CUDA and Stream must die
Why CUDA and Stream need to expire on the long term.... and why Direct Compute should never establish. This is why OpenCL is the only way to go... at least why only this direction is desirable and needed.
First what are CUDA and Stream? Although I'm most certain that you all have heard about CUDA, Stream might be unknown. The reason for this might be marketing but I don't plan to discuss it here. Both technologies are designed to combine the power of the CPU and the GPU and other processors (multiple CPUs and GPUs together are possible too). The GPU is powerful, but you can't run an executable on a GPU because both have not been designed for it. This is where techniques as CUDA among others comes into place. For example the decoder CoreAVC supports CUDA, so that decoding of H.264 streams can be done by CPU and GPU together. DVXA is different, but also used for video decoding. DVXA is limited so not a good choice for doing other things. CUDA and Stream are proprietary, CUDA belongs to NVIDIA and Stream belongs to AMD/ATI. That means until there are no resources to implement support for CUDA and Stream the developer has to decide what he implements.
The dark side of this is, that the user/customer is in trouble, when he wants to use something that supports CUDA, but his video card is an AMD/ATI product that supports Stream. Or the other way around... the user got an NVIDIA card that supports CUDA, but Stream support is required. To be fair I have to say that CUDA is spread further, at least to my knowledge. The real pain is that the free choice is no longer given, when others decide what they implement. Assuming that support for CUDA will spread even further you would need to buy an NVIDA card and the next card would have to be an NVIDA too. Assuming that support for Stream picks up speed and spreads as far as CUDA or further would make you need to buy an AMD/ATI card. Or you even got the problem that you would need cards of both manufactures. (BTW: Currently it's hardly possible to run a system with an NVIDIA card and an AMD/ATI card, due to the driver of NVIDIA, it detects another card of another manufacturer and then it disables some functions. It's quite understandable that you can't connect the cards and use them together, but refusing to work completely because of another card surprised me*)
Good news there's something called OpenCL (Open Computing Language) what does the same as CUDA and Stream and the best is OpenCL is managed by the non-profit technology consortium Khronos Group, so it can be used by any manufacturer. AMD, IBM, Intel, and Nvidia worked on it. Guess what.... NVIDIA and AMD/ATI already support OpenCL. [See list]
On the long term CUDA and Stream have to disappear as both slow down development, force the user to act against common sense (price/usage ratio, energy consumption, loudness, etc.) Please note that CUDA and Stream provide the basis for SDKs for using OpenCL.
You may have heard about Direct Compute. This makes use of DirectX and can be used to combine CPU and GPU too. As DirectX it's known from games it would be a good idea to use Direct Compute for them. This truly will work for games (as well as for all the other things too) and yes it's not limited to a manufacturer (they just need to support DirectX along with the system), but saying DirectX means windows only. There's no discussion about the fact that Windows is the most spread platform, but OpenCL can be used on any system, even on stand-alone hardware or on mobile devices, so it would be a failure to use Direct Compute too widely. I would like that Direct Compute is supported so it can be used for games that run on windows anyway.
Currently you need to have the same card twice (along with a mainboard that supports it) to use SLI or Crossfire, but AMD/ATI released driver updates that will make it possible to use different AMD/ATI cards together. With version 10.2 this should be possible 
The next thing for CoreAVC is to implement OpenCL, that's already planned. [2/3]
For me it's clear only something that can work with any operating system, with any manufacturer (that supports it) should have success. Developers implement just OpenCL and users have the free choice what they buy. From this site there's no reason not to use OpenCL and when other reasons come up, the direction is right. Anything else should go the same way.
What can be done with CUDA, Stream and OpenCL (and others)? You can accelerate video decoding, to watch High Definition videos without stuttering playback on a slow CPU as the GPU does some work too. You can encode videos faster. You can use them for calculations the CPU would do alone normally, but with the GPU it's faster. Basically it's about making CPU and GPU work together. Multi-core CPUs and multi-core GPUs as well.
Also the video card has the advantage that it might got DDR 5 RAM while the system got DDR 3 RAM, so calculations with many steps can be processed faster based on the clock speed of the video card. A video card has limited RAM space (1GB is common), while the system might have 4 GB RAM by default, so memory intensive calculations with many of in-between steps can be stored there. RAM on video cards is mostly named GDDR to avoid confusion.
OpenGL is something different as OpenCL.
http://www.khronos.org/files/opencl-quick-reference-card.pdf [PDF] (please copy and paste or download directly)
AMD about OpenCL
Nvidia about OpenCL
There are SDKs from manufacturers but I wont link them here, instead an open toolkit
AMD OpenCL explanation
“As you may or may not know, Windows 7 allows two display drivers to be used at once - like in Windows XP. Therefore, it is possible to use an Nvidia card for PhysX and ATI card for graphics rendering. Sadly, since the release of 186 graphics drivers, Nvidia has decided to block this feature anytime a Non-Nvidia GPU is present in the system “
(please copy and paste)
The above link also refers to a patched driver, but be aware that it's not official.
List of video cards that support OpenCL.
As there are so many cards I decided to post series only. This list does not claim to be complete and it does not claim to be correct. I excluded other products beside GeForce and Radeon.
This is complicated as it seems to depend on the driver too. Both manufacturers are not very specific about it. Hardware sites don't seem to be worried about this. They only say what DirectX version is supported.
I got problems with the naming of NVIDIA cards and so with the series. Sorry.
300 series (found OpenCL support in the specs)
400 series (should be, it's coming)
With other words from 9000 series onwards. (Prior I don't know)
HD 4350 series
HD 4500 series
HD 4600 series
HD 4700 series
HD 4800 series
HD 5400 series (found OpenCL support in the specs)
HD 5500 series (found OpenCL support in the specs)
HD 5600 series (found OpenCL support in the specs)
HD 5700 series (found OpenCL support in the specs) (and I know)
HD 5800 series (found OpenCL support in the specs)
HD 5900 series (found OpenCL support in the specs)
With other words from HD 4350 onwards.
In the case that you wonder. The AMD/ATI series can be grouped to HD 4000 series and HD 5000 series. Only cards prior to HD 4350 need to be excluded. The NVIDIA groups could be split, but I decided to leave them as you see them, because I don't know the differences between the series and the cards. Also note that more series do not mean more cards and more names don't mean more cards either.
Written on 06. March 2010, published on 14. March 2010
Author: Sebastian G. alias endlessmind (bastik)