<?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</title>
	<atom:link href="http://www.greenpath.pl/tag/nvidia/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>Nvidia PhysX Visual Debugger</title>
		<link>http://www.greenpath.pl/2009/08/nvidia-physx-visual-debugger/</link>
		<comments>http://www.greenpath.pl/2009/08/nvidia-physx-visual-debugger/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 02:07:54 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[backgammon]]></category>
		<category><![CDATA[debugger]]></category>
		<category><![CDATA[NVIDIA]]></category>
		<category><![CDATA[physx]]></category>
		<guid isPermaLink="false">http://www.greenpath.pl/?p=102</guid>
		<description><![CDATA[Dotychczas moje debugowanie Physx&#8217;a ograniczało się do debugowania kodu c++ i ręcznego dopasowywania brył otaczających obiekty, które chciałem uwzględnić przy obliczaniu kolizji. Dziś wpadł mi w ręce PhysX Visual Debugger firmy NVidia. Aplikacja ta zdalnie debuguje scenę stworzoną przy użyciu silnika Physx. Wizualizuje ona zarówno aktorów (obiekty, z którymi liczone są kolizje) jak i wiele [...]]]></description>
			<content:encoded><![CDATA[<p>Dotychczas moje debugowanie Physx&#8217;a ograniczało się do debugowania kodu c++ i ręcznego dopasowywania brył otaczających obiekty, które chciałem uwzględnić przy obliczaniu kolizji.</p>
<p>Dziś wpadł mi w ręce <a href="/tag/physx/">PhysX</a> Visual Debugger firmy <a title="NVidia" href="/tag/nvidia">NVidia</a>. Aplikacja ta zdalnie debuguje scenę stworzoną przy użyciu silnika <a href="/tag/physx/">Physx</a>. Wizualizuje ona zarówno aktorów (obiekty, z którymi liczone są kolizje) jak i wiele innych parametrów, w tym:</p>
<ul>
<li>bryły otaczające &#8211; bryły, z którymi przeprowadzane są uproszczone testy kolizji</li>
<li>wektory prędkości</li>
<li>stan obiektu &#8211; pokazuje, czy obiekt jest uśpiony, czy występuje kolizja z innym obiektem itd.</li>
<li>itd.</li>
</ul>
<p>Dodatkowo debugger pokazuje wszystkie parametry aktorów, dzięki czemu możemy w łatwy sposób wychwycić błąd.</p>
<p>Dzięki tej aplikacji udało mi się zauważyć błąd w tworzonej obecnie grze <a href="/tag/backgammon">backgammon</a>, którego nie dało się zauważyć inaczej, a który powodował dziwne zachowywanie się pionków.</p>
<p>Poniżej krótkie wideo z testowania gry z wykorzystaniem Physx Visual Debugger.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/dC71st1xLr0&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/dC71st1xLr0&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>PhysX Remote Debugger dostępny jest do ściągnięcia na stronie: <a title="Physx Visual Debugger" href="http://developer.nvidia.com/object/pvd_home.html">http://developer.nvidia.com/object/pvd_home.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/08/nvidia-physx-visual-debugger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Back to Backgammon :)</title>
		<link>http://www.greenpath.pl/2009/08/back-to-backgammon/</link>
		<comments>http://www.greenpath.pl/2009/08/back-to-backgammon/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 02:29:30 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[backgammon]]></category>
		<category><![CDATA[NVIDIA]]></category>
		<category><![CDATA[physx]]></category>
		<guid isPermaLink="false">http://www.greenpath.pl/?p=91</guid>
		<description><![CDATA[Rok temu zacząłem tworzyć grę w oparciu o OpenGL. Grą tą był Backgammon, jedna z najstarszych gier świata. Chciałem stworzyć wszystko w 3d i zachować jak największy realizm, co okazało się trudnym zadaniem dla początkującego programisty tego typu aplikacji. Po kilku miesiącach przerwy zasiadłem do pracy ponownie. Zacząłem bawić się silnikiem Physx firmy NVidia, aby [...]]]></description>
			<content:encoded><![CDATA[<p>Rok temu zacząłem tworzyć grę w oparciu o OpenGL. Grą tą był Backgammon, jedna z najstarszych gier świata. Chciałem stworzyć wszystko w 3d i zachować jak największy realizm, co okazało się trudnym zadaniem dla początkującego programisty tego typu aplikacji.</p>
<p>Po kilku miesiącach przerwy zasiadłem do pracy ponownie. Zacząłem bawić się silnikiem Physx firmy NVidia, aby gra była bardziej realna. Jak to bywa, co chwilę napotykam na problemy, z którymi męczę się przez kilka godzin, a rozwiązanie okazuje się banalne <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Poniżej 2 filmiki z etapów tworzenia gry <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  To dopiero sam początek, więc za bardzo nie ma czym się zachwycać, ale pokazują one mniej więcej, jak będzie wyglądać gra.</p>
<p>Poniższe filmiki pokazują działanie silnika fizycznego do obsługi kostek. Na razie nie są brane pod uwagę kolizje z planszą, a jedynie pomiędzy kostkami. Kolejnym etapem są kolizje z planszą oraz z pionkami.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/smNRmJzK0r4&#038;hl=pl&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/smNRmJzK0r4&#038;hl=pl&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
Etap 1</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/PHtYONEtfBE&#038;hl=pl&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/PHtYONEtfBE&#038;hl=pl&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
Etap 2</p>
<p>Nie wiem kiedy powstanie etap 3, ale mam nadzieję, że niedługo..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/08/back-to-backgammon/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>
		<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>

