<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: A quick programmer&#8217;s look at NVIDIA&#8217;s CUDA</title>
	<atom:link href="http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/</link>
	<description>Bryan O&#039;Sullivan&#039;s blog</description>
	<lastBuildDate>Wed, 08 Feb 2012 06:41:38 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Arno</title>
		<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/comment-page-1/#comment-240802</link>
		<dc:creator>Arno</dc:creator>
		<pubDate>Fri, 07 Aug 2009 12:06:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/#comment-240802</guid>
		<description>I have production level code, that can , with very minor modifications, be run both on the CPU and the GPU using CUDA. Just one more difference: the code runs up to 350x faster on a dual GTX280 than it does on 4 cores of an Intel Xeon at 2.8 GHz. In both cases threading is used, with the same thread library and both graphics cards and all 4 cores run at 100% load during execution. I have found CUDA to be easier to deal with than PVM or MPI.</description>
		<content:encoded><![CDATA[<p>I have production level code, that can , with very minor modifications, be run both on the CPU and the GPU using CUDA. Just one more difference: the code runs up to 350x faster on a dual GTX280 than it does on 4 cores of an Intel Xeon at 2.8 GHz. In both cases threading is used, with the same thread library and both graphics cards and all 4 cores run at 100% load during execution. I have found CUDA to be easier to deal with than PVM or MPI.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Oded Kuznik</title>
		<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/comment-page-1/#comment-103161</link>
		<dc:creator>Oded Kuznik</dc:creator>
		<pubDate>Wed, 28 Nov 2007 04:22:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/#comment-103161</guid>
		<description>Hi Arun,

You mentioned that i can launch several kernels concurrently.
Can i do it on the same GPU?

Thanks</description>
		<content:encoded><![CDATA[<p>Hi Arun,</p>
<p>You mentioned that i can launch several kernels concurrently.<br />
Can i do it on the same GPU?</p>
<p>Thanks</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: bart.kevelham.com &#187; A different sound on GPGPU</title>
		<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/comment-page-1/#comment-98837</link>
		<dc:creator>bart.kevelham.com &#187; A different sound on GPGPU</dc:creator>
		<pubDate>Tue, 13 Nov 2007 22:34:58 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/#comment-98837</guid>
		<description>[...] http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/ One of the better reviews I&#8217;ve read. A must read!! &#8220;People with the expertise, persistence, and bloody-mindedness to keep slogging away will undoubtedly see phenomenal speedups for some application kernels.&#8221; That must be me I guess&#8230; [...]</description>
		<content:encoded><![CDATA[<p>[...] <a href="http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/" rel="nofollow">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/</a> One of the better reviews I&#8217;ve read. A must read!! &#8220;People with the expertise, persistence, and bloody-mindedness to keep slogging away will undoubtedly see phenomenal speedups for some application kernels.&#8221; That must be me I guess&#8230; [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sarnath</title>
		<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/comment-page-1/#comment-90360</link>
		<dc:creator>Sarnath</dc:creator>
		<pubDate>Mon, 15 Oct 2007 13:57:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/#comment-90360</guid>
		<description>CUDA rocks!</description>
		<content:encoded><![CDATA[<p>CUDA rocks!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Per</title>
		<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/comment-page-1/#comment-51784</link>
		<dc:creator>Per</dc:creator>
		<pubDate>Fri, 01 Jun 2007 19:37:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/#comment-51784</guid>
		<description>Researching CUDA this summer (I have just started doing so with a team at Augustana University) and having no prior experience with GPU manipulation this provides a great springboard into branching math intensive portions of code into the GPU.  From reading the manual, I have to agree with everyone&#039;s opinion on where the difficulty lies.  

Memory management/hierarchy.

I would like to point out though, that I don&#039;t think that efficiency will be &quot;unlikely&quot; as Bryan has stated.  All I&#039;m seeing is code that allows &quot;close to metal(Not a fan of the ATI CTM code)&quot; code with a decent clarity of what portions of the GPU need to be addressed to accomplish the multi-threaded tasks.  And as said before, I think the biggest problem is changing the logic of programming for a CPU to programming for a GPU.</description>
		<content:encoded><![CDATA[<p>Researching CUDA this summer (I have just started doing so with a team at Augustana University) and having no prior experience with GPU manipulation this provides a great springboard into branching math intensive portions of code into the GPU.  From reading the manual, I have to agree with everyone&#8217;s opinion on where the difficulty lies.  </p>
<p>Memory management/hierarchy.</p>
<p>I would like to point out though, that I don&#8217;t think that efficiency will be &#8220;unlikely&#8221; as Bryan has stated.  All I&#8217;m seeing is code that allows &#8220;close to metal(Not a fan of the ATI CTM code)&#8221; code with a decent clarity of what portions of the GPU need to be addressed to accomplish the multi-threaded tasks.  And as said before, I think the biggest problem is changing the logic of programming for a CPU to programming for a GPU.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ÐÐ»Ñ‘Ð½Ð° C++: NVidia CUDA Ð¸ ATI CTM</title>
		<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/comment-page-1/#comment-23270</link>
		<dc:creator>ÐÐ»Ñ‘Ð½Ð° C++: NVidia CUDA Ð¸ ATI CTM</dc:creator>
		<pubDate>Fri, 02 Mar 2007 18:30:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/#comment-23270</guid>
		<description>[...] Ð¸ Ð¼Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ CUDA:NVIDIA CUDA Quick SummaryNVIDIA CUDA IntroductionA quick programmerâ€™s look at NVIDIAâ€™s CUDANvidia releases Cuda - and reinvents Stream Processing?G80 Architecture from CUDA - [...]</description>
		<content:encoded><![CDATA[<p>[...] Ð¸ Ð¼Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ CUDA:NVIDIA CUDA Quick SummaryNVIDIA CUDA IntroductionA quick programmerâ€™s look at NVIDIAâ€™s CUDANvidia releases Cuda &#8211; and reinvents Stream Processing?G80 Architecture from CUDA &#8211; [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jrk</title>
		<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/comment-page-1/#comment-22850</link>
		<dc:creator>jrk</dc:creator>
		<pubDate>Thu, 01 Mar 2007 23:41:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/#comment-22850</guid>
		<description>I completely agree with Arun.

I&#039;d also like to respond to the undercurrent throughout this discussion which came to the surface in Ian Ameline&#039;s comment:

&quot;The exposing of the banked shared memory to the programming model, is IMHO not a good idea â€” but from their standpoint it might not be such a bad one â€” it does tie CUDA pretty tightly to their architecture.&quot;

Every fast/parallel machine today has a complex memory hierarchy, and leveraging it effectively is critical to not only implementing but designing efficient algorithms. After several years of struggling with a heavily abstracted, hidden, and very complex memory hierarchy, the GPGPU community has realized that explicit knowledge and moderate control of the memory hierarchy is *critical* to achieving high performance.  Working against a driver that hides all the complexity under the hood is actually MUCH HARDER than simply making it explicit.  CUDA not only makes it clearer to programmers when they&#039;re going to fall off cliffs (because they very much do exist, whether or not they&#039;re exposed in the programming model), it gives them vastly more powerful tools to simply and explicitly determine where they want to be with respect to those cliffs.

Sure, it would be nice if we could build machines which ran code efficiently with no concern for the intricacies of the memory system, but that simply isn&#039;t true -- *especially* not at the high-performance and massively parallel end of the application and hardware spectrum.

(Also cf. Sequoia, as others have mentioned.)</description>
		<content:encoded><![CDATA[<p>I completely agree with Arun.</p>
<p>I&#8217;d also like to respond to the undercurrent throughout this discussion which came to the surface in Ian Ameline&#8217;s comment:</p>
<p>&#8220;The exposing of the banked shared memory to the programming model, is IMHO not a good idea â€” but from their standpoint it might not be such a bad one â€” it does tie CUDA pretty tightly to their architecture.&#8221;</p>
<p>Every fast/parallel machine today has a complex memory hierarchy, and leveraging it effectively is critical to not only implementing but designing efficient algorithms. After several years of struggling with a heavily abstracted, hidden, and very complex memory hierarchy, the GPGPU community has realized that explicit knowledge and moderate control of the memory hierarchy is *critical* to achieving high performance.  Working against a driver that hides all the complexity under the hood is actually MUCH HARDER than simply making it explicit.  CUDA not only makes it clearer to programmers when they&#8217;re going to fall off cliffs (because they very much do exist, whether or not they&#8217;re exposed in the programming model), it gives them vastly more powerful tools to simply and explicitly determine where they want to be with respect to those cliffs.</p>
<p>Sure, it would be nice if we could build machines which ran code efficiently with no concern for the intricacies of the memory system, but that simply isn&#8217;t true &#8212; *especially* not at the high-performance and massively parallel end of the application and hardware spectrum.</p>
<p>(Also cf. Sequoia, as others have mentioned.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Stone</title>
		<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/comment-page-1/#comment-22835</link>
		<dc:creator>John Stone</dc:creator>
		<pubDate>Thu, 01 Mar 2007 22:22:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/#comment-22835</guid>
		<description>While some of the criticisms in this article are valid, I&#039;ve found writing CUDA programs no more difficult than convincing vectorizing/SSE-capable compilers for regular CPUs to do something useful.  For anyone that&#039;s accustomed to the rigors of parallel programming with threads or message passing, I don&#039;t think that CUDA presents any special challenges.  In performance oriented multithreaded code one has to worry about hot spotting, false sharing, and lots of other &quot;implicit&quot; issues which relate to the memory system and program design.  I actually find it much easier to deal with these things explicitly, as you have no doubts whatsoever that bank conflicts will negatively impact your performance.  I think that the explicit exposure of the memory system makes it a lot easier to leverage for high performance coding.  One thing people should keep in mind is that the hardware is what it is.  Some algorithms just aren&#039;t going to run well on GPUs, and so some of the &quot;pain&quot; people talk about may be the natural result of attempting to run inappropriate algorithms on hardware that&#039;s ill suited to them.  It&#039;s probably much better to start with a clean slate than to immediately take your favorite C code and try and hack it into a CUDA program.  I&#039;ve found it best to accept the hardware as it is and use it efficiently for the tasks it&#039;s ideally suited.  I strongly recommend that new CUDA programmers read the NVIDIA documentation cover to cover, more than once, before bothering to write their first programs.  Going into GPU programming without first doing the necessary background reading is rather like attempting to write thread-safe programs without knowing what mutex locks and condition variables are, IMHO.  I think people will find CuDA and GPU programming in general harder to learn than other paradigms simply because they&#039;ll find that much of what they&#039;ve come to _assume_ is true about the performance and architecture of the underlying machine is false when running on a GPU.  It&#039;s sometimes hard to swallow the idea that on a GPU you&#039;re often  better off doing redundant calculations than adding in lots of branching to avoid work, or that it might be better for independent threads to duplicate effort rather than adding in lots of barrier synchronizations or collective operations to exchange partial results, etc.  Once you get used to what the GPU _likes_ to do, writing code for it is much simpler.

Cheers,
  John</description>
		<content:encoded><![CDATA[<p>While some of the criticisms in this article are valid, I&#8217;ve found writing CUDA programs no more difficult than convincing vectorizing/SSE-capable compilers for regular CPUs to do something useful.  For anyone that&#8217;s accustomed to the rigors of parallel programming with threads or message passing, I don&#8217;t think that CUDA presents any special challenges.  In performance oriented multithreaded code one has to worry about hot spotting, false sharing, and lots of other &#8220;implicit&#8221; issues which relate to the memory system and program design.  I actually find it much easier to deal with these things explicitly, as you have no doubts whatsoever that bank conflicts will negatively impact your performance.  I think that the explicit exposure of the memory system makes it a lot easier to leverage for high performance coding.  One thing people should keep in mind is that the hardware is what it is.  Some algorithms just aren&#8217;t going to run well on GPUs, and so some of the &#8220;pain&#8221; people talk about may be the natural result of attempting to run inappropriate algorithms on hardware that&#8217;s ill suited to them.  It&#8217;s probably much better to start with a clean slate than to immediately take your favorite C code and try and hack it into a CUDA program.  I&#8217;ve found it best to accept the hardware as it is and use it efficiently for the tasks it&#8217;s ideally suited.  I strongly recommend that new CUDA programmers read the NVIDIA documentation cover to cover, more than once, before bothering to write their first programs.  Going into GPU programming without first doing the necessary background reading is rather like attempting to write thread-safe programs without knowing what mutex locks and condition variables are, IMHO.  I think people will find CuDA and GPU programming in general harder to learn than other paradigms simply because they&#8217;ll find that much of what they&#8217;ve come to _assume_ is true about the performance and architecture of the underlying machine is false when running on a GPU.  It&#8217;s sometimes hard to swallow the idea that on a GPU you&#8217;re often  better off doing redundant calculations than adding in lots of branching to avoid work, or that it might be better for independent threads to duplicate effort rather than adding in lots of barrier synchronizations or collective operations to exchange partial results, etc.  Once you get used to what the GPU _likes_ to do, writing code for it is much simpler.</p>
<p>Cheers,<br />
  John</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ian Ameline</title>
		<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/comment-page-1/#comment-22358</link>
		<dc:creator>Ian Ameline</dc:creator>
		<pubDate>Wed, 28 Feb 2007 16:57:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/#comment-22358</guid>
		<description>Peakstream&#039;s API looks much cleaner, but currently they completely take over the gpu -- it cannot be used to attach a display -- so if you are doing 3D, you need a second GPU. That pretty much rules them out for me -- at least until they fix that limitation.

Another one to look at is RapidMinds -- it builds on McCool&#039;s earlier work.

CUDAs great advantage in my mind is its ability to send the results of its computations directly into the gfx rendering pipeline.

The exposing of the banked shared memory to the programming model, is IMHO not a good idea -- but from their standpoint it might not be such a bad one -- it does tie CUDA pretty tightly to their architecture.

People interested in data parallel programming should also look closely at Intel&#039;s Thread Building Blocks (TBB) library.</description>
		<content:encoded><![CDATA[<p>Peakstream&#8217;s API looks much cleaner, but currently they completely take over the gpu &#8212; it cannot be used to attach a display &#8212; so if you are doing 3D, you need a second GPU. That pretty much rules them out for me &#8212; at least until they fix that limitation.</p>
<p>Another one to look at is RapidMinds &#8212; it builds on McCool&#8217;s earlier work.</p>
<p>CUDAs great advantage in my mind is its ability to send the results of its computations directly into the gfx rendering pipeline.</p>
<p>The exposing of the banked shared memory to the programming model, is IMHO not a good idea &#8212; but from their standpoint it might not be such a bad one &#8212; it does tie CUDA pretty tightly to their architecture.</p>
<p>People interested in data parallel programming should also look closely at Intel&#8217;s Thread Building Blocks (TBB) library.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stream Programmer</title>
		<link>http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/comment-page-1/#comment-22113</link>
		<dc:creator>Stream Programmer</dc:creator>
		<pubDate>Wed, 28 Feb 2007 00:58:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/02/22/a-quick-programmers-look-at-nvidias-cuda/#comment-22113</guid>
		<description>Has anyone looked at PeakStream&#039;s API?  They too run on GPU&#039;s,  and have a far simpler programming model.</description>
		<content:encoded><![CDATA[<p>Has anyone looked at PeakStream&#8217;s API?  They too run on GPU&#8217;s,  and have a far simpler programming model.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

