<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>Michał Borek - tech blog &#187; C++</title>
	<atom:link href="http://www.greenpath.pl/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.greenpath.pl</link>
	<description>Programmer&#039;s point of view</description>
	<lastBuildDate>Fri, 30 Dec 2011 22:20:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Rozproszony Ray Tracing</title>
		<link>http://www.greenpath.pl/2009/05/rozproszony-ray-tracing/</link>
		<comments>http://www.greenpath.pl/2009/05/rozproszony-ray-tracing/#comments</comments>
		<pubDate>Sat, 30 May 2009 13:12:00 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Grafika]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Ray Tracing]]></category>
		<category><![CDATA[distributed systems]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[tcp]]></category>
		<guid isPermaLink="false">http://www.greenpath.pl/?p=35</guid>
		<description><![CDATA[Na zajęcia z systemów rozproszonych postanowiłem rozwinąć lekko swój projekt ray tracera, tworzony w zeszłym roku. Projekt oparty został o bibliotekę QT w wersji 4.5. Komunikacja odbywa się za pomocą socketów TCP. Architektura tego rozwiązania opiera się o 3 elementy: Klient &#8211; program, w którym operuje użytkownik chcący wygenerować obraz metoda ray tracing. Serwer zarządzający [...]]]></description>
			<content:encoded><![CDATA[<p>Na zajęcia z systemów rozproszonych postanowiłem rozwinąć lekko swój projekt ray tracera, tworzony w zeszłym roku.</p>
<p>Projekt oparty został o bibliotekę <a title="Qt library" href="http://qtsoftware.com" target="_blank">QT</a> w wersji 4.5. Komunikacja odbywa się za pomocą socketów TCP.</p>
<p>Architektura tego rozwiązania opiera się o 3 elementy:</p>
<ul>
<li>Klient &#8211; program, w którym operuje użytkownik chcący wygenerować obraz metoda ray tracing.</li>
<li>Serwer zarządzający &#8211; który rozsyła części obrazu do generowania przez serwery robocze</li>
<li>Serwery robocze &#8211; pracujące nad generowaniem poszczególnych części obrazu.</li>
</ul>
<p>Jak to bywa w projektach studenckich, także i ten jest napisany obecnie dość chaotycznie i zawiera na pewno wiele błędów. Będą one jednak usuwane z biegiem czasu, a w chwili obecnej istotne jest raczej to, że projekt mniej więcej działa <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Na początek jeden screen klienta:</p>
<p><img class="aligncenter size-medium wp-image-36" title="Distributed Ray Tracing - client" src="http://www.greenpath.pl/wp-content/uploads/2009/05/client-300x208.png" alt="Distributed Ray Tracing - client" width="300" height="208" /></p>
<p>Projekt został wrzucony na <a href="http://code.google.com">code.google.com</a> i znajduje się pod adresem: <a href="http://code.google.com/p/distributedraytracing/">http://code.google.com/p/distributedraytracing/</a>.</p>
<p>Sama biblioteka ray tracera jest osobną dll&#8217;ką i jest nieco niedopracowana. Postaram się, bliżej wakacji, poprawić wszystkie błędy w niej zawarte i wprowadzić obsługę standardowych formatów scen (obecnie stosowany jest system niestandardowy, lecz dorzucone są przykładowe sceny).</p>
<p>Postaram się w przyszłości opisać niektóre fragmenty tego rozwiązania.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/05/rozproszony-ray-tracing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CUDA &#8211; przykład (dodawanie wektorów)</title>
		<link>http://www.greenpath.pl/2008/11/cuda-przyklad-dodawanie-wektorow/</link>
		<comments>http://www.greenpath.pl/2008/11/cuda-przyklad-dodawanie-wektorow/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 17:17:06 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[NVidia CUDA]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[NVIDIA]]></category>
		<guid isPermaLink="false">http://www.greenpath.pl/?p=15</guid>
		<description><![CDATA[Na początek taki szkolny przykład dodawanie do siebie dwóch tablic wektorów. Dodawanie kolejnych par wektorów odbywa się na karcie graficznej. Odpowiada za to funkcja vecAdd z kwalifikatorem __global__. Kwalifikator ten oznacza, że funkcja może być wykonywana zarówno jako host (CPU) jak i device (GPU). Prosty kod odpowiadający za dodawanie 2 wektorów #include &#60;stdio.h&#62; #include &#60;cutil.h&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Na początek taki szkolny przykład dodawanie do siebie dwóch tablic wektorów.</p>
<p>Dodawanie kolejnych par wektorów odbywa się na karcie graficznej. Odpowiada za to funkcja vecAdd z kwalifikatorem __global__.<br />
Kwalifikator ten oznacza, że funkcja może być wykonywana zarówno jako host (CPU) jak i device (GPU).</p>
<p>Prosty kod odpowiadający za dodawanie 2 wektorów</p>
<pre>#include &lt;stdio.h&gt;
#include &lt;cutil.h&gt;
__global__ void vecAdd (float3 a[10], float3 b[10]) {
int i = threadIdx.x;
a[i].x += b[i].x;
a[i].y += b[i].y;
a[i].z += b[i].z;
}
int main(int argc, char** argv) {
CUT_DEVICE_INIT(argc, argv); // inicjalizacja GPU
float3 *a_h, *b_h, *a_d, *b_d, *result;
int arraySize = 10;
int sizeInBytes = arraySize * sizeof(float3);
a_h = (float3*)malloc(sizeInBytes); // inicjalizacja tablic (na hoscie)
b_h = (float3*)malloc(sizeInBytes);
result = (float3*)malloc(sizeInBytes);
CUDA_SAFE_CALL(cudaMalloc((void**)&amp;a_d, sizeInBytes)); // inicjalizacja tablic na GPU
CUDA_SAFE_CALL(cudaMalloc((void**)&amp;b_d, sizeInBytes));
for(int i = 0; i &lt; arraySize; i++) { // przykładowe dane
a_h[i].x = 100.0f + i;
a_h[i].y = 200.0f + i;
a_h[i].z = 300.0f + i;
b_h[i].x = 50.0f + i;
b_h[i].y = 50.0f + i;
b_h[i].z = 50.0f + i;
}
CUDA_SAFE_CALL(cudaMemcpy(a_d, a_h, sizeInBytes, cudaMemcpyHostToDevice));
// kopiujemy tablicę z hosta do GPU
CUDA_SAFE_CALL(cudaMemcpy(b_d, b_h, sizeInBytes, cudaMemcpyHostToDevice));
vecAdd&lt;&lt;&lt;1, arraySize&gt;&gt;&gt;(a_d, b_d); // wykonujemy dodawanie
CUDA_SAFE_CALL(cudaMemcpy(result, a_d, sizeInBytes, cudaMemcpyDeviceToHost));
// kopiujemy z powrotem
for(int i = 0; i &lt; arraySize; i++){
printf("Wartość %d.elementu %f, %f, %f \n", i, result[i].x,
result[i].y, result[i].z); // wyswietlamy <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
}
CUT_EXIT(0, NULL); // koniec
}</pre>
<p>Wydaje się proste <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>W przyszłości postaram się opisać po kolei wszystkie szczegóły.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2008/11/cuda-przyklad-dodawanie-wektorow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

