<?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; NVidia CUDA</title>
	<atom:link href="http://www.greenpath.pl/category/grafika/nvidia-cuda/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>OpenCL &#8211; język obliczeń równoległych &#8211; już jest!</title>
		<link>http://www.greenpath.pl/2008/12/opencl-jezyk-obliczen-rownoleglych-juz-jest/</link>
		<comments>http://www.greenpath.pl/2008/12/opencl-jezyk-obliczen-rownoleglych-juz-jest/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 22:01:14 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[NVidia CUDA]]></category>
		<category><![CDATA[Cell]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[GPGPU]]></category>
		<category><![CDATA[OpenCL]]></category>
		<guid isPermaLink="false">http://www.greenpath.pl/?p=23</guid>
		<description><![CDATA[5 grudnia br.  została upubliczniona wersja 1.0 specyfikacji języka OpenCL (Open Computing Language), który ma być pomostem pomiędzy API poszczególnych technologii równoległego przetwarzania danych na GPU i CPU (między innymi w technologii NVidia CUDA, ATI Stream na procesorach Cell (tych z PS3 ). Khronos Group (twórca specyfikacji) chwali się tym, iż język ten ma zapewnić [...]]]></description>
			<content:encoded><![CDATA[<p>5 grudnia br.  została upubliczniona wersja 1.0 specyfikacji języka OpenCL (Open Computing Language), który ma być pomostem pomiędzy API poszczególnych technologii równoległego przetwarzania danych na GPU i CPU (między innymi w technologii <a title="NVIDIA CUDA" href="http://www.greenpath.pl/tag/cuda/">NVidia CUDA</a>, ATI Stream na procesorach Cell (tych z PS3 <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).</p>
<p>Khronos Group (twórca specyfikacji) chwali się tym, iż język ten ma zapewnić pełną niezależność języka od wykorzystanej technologii, a lista firm zaangażowanych w projekt, czyli: 3DLABS, Activision Blizzard, AMD, Apple, ARM, Barco, Broadcom, Codeplay, Electronic Arts, Ericsson, Freescale, HI, IBM, Intel, Imagination Technologies, Kestrel Institute, Motorola, Movidia, Nokia, NVIDIA, QNX, RapidMind, Samsung, Seaweed, Takumi, Texas Instruments i Umeå University uspokaja mnie, jeżeli chodzi o powodzenie tego projektu <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Wcześniej zajmowałem się stricte technologią <a title="NVidia CUDA" href="http://www.greenpath.pl/tag/cuda/">CUDA</a>, ale z racji tego iż gdzieś na półce kurzy się moje PS3, to technologię tą zacznę wykorzystywać z jeszcze większą chęcią.</p>
<p>W najbliższym czasie postaram się opisać szerzej język OpenCL (jak tylko przeczytam specyfikację <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ), a także sprawdzę na ile język ten jest wygodny, elastyczny i.. czy działa.</p>
<p>A jeżeli zadziała, może być ciekawie <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2008/12/opencl-jezyk-obliczen-rownoleglych-juz-jest/feed/</wfw:commentRss>
		<slash:comments>1</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>
		<item>
		<title>Początek zabawy z CUDA</title>
		<link>http://www.greenpath.pl/2008/11/poczatek-zabawy-z-cuda/</link>
		<comments>http://www.greenpath.pl/2008/11/poczatek-zabawy-z-cuda/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 10:50:18 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[Grafika]]></category>
		<category><![CDATA[NVidia CUDA]]></category>
		<category><![CDATA[Ray Tracing]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[NVIDIA]]></category>
		<guid isPermaLink="false">http://greenpath.pl/?p=6</guid>
		<description><![CDATA[Żeby zacząć zabawę, należy kupić zabawkę. Postanowiłem zaopatrzyć się w sprzęt, który pozwoli w pełni wykorzystać technologię CUDA do obliczeń związanych z ray tracingiem. Zdecydowałem się na Asusa GTX260, który nie miał zbyt wygórowanej ceny, ale oferował to co misie lubią najbardziej, czyli dużo &#8220;thread proccessors&#8221;. Sprzęcik wygląda mniej więcej tak: Jeżeli chodzi o mechanizm [...]]]></description>
			<content:encoded><![CDATA[<p>Żeby zacząć zabawę, należy kupić zabawkę.</p>
<p>Postanowiłem zaopatrzyć się w sprzęt, który pozwoli w pełni wykorzystać technologię CUDA do obliczeń związanych z ray tracingiem. Zdecydowałem się na Asusa GTX260, który nie miał zbyt wygórowanej ceny, ale oferował to co misie lubią najbardziej, czyli dużo &#8220;thread proccessors&#8221;. Sprzęcik wygląda mniej więcej tak:</p>
<div id="attachment_7" class="wp-caption aligncenter" style="width: 310px"><a href="http://greenpath.pl/wp-content/uploads/2008/11/asus-engtx260-896mb-htdp-448bit-pci-e.jpg"><img class="size-medium wp-image-7" title="asus-engtx260-896mb-htdp-448bit-pci-e" src="http://greenpath.pl/wp-content/uploads/2008/11/asus-engtx260-896mb-htdp-448bit-pci-e-300x211.jpg" alt="Asus GTX260" width="300" height="211" /></a><p class="wp-caption-text">Asus GTX260</p></div>
<p>Jeżeli chodzi o mechanizm CUDA, początkowo (czego nie dotyczytałem wcześniej) okazało się, że funkcje __global__, __device__ (czyli te uruchamiane na karcie graficznej), nie obsługują rekursji! Więc algorytm rekursywnych testów przecięć się nie sprawdzi. Może jednak uda się zaimplementować równoległe przeprowadzanie testów cieni, co w przypadku scen z dużą liczbą świateł, może dość mocno przyspieszyć generowanie obrazu.</p>
<p>W kolejnych postach postaram się zaprezentować przykładowe zastosowanie CUDA do szybkich obliczeń, a także powiedzieć coś więcej o samej technologii.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2008/11/poczatek-zabawy-z-cuda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

