killercode
killercode

Reputation: 1706

GPU Programming?

I'm new to the GPU Programming world, I've tried reading on Wikipedia and Googling, but I still have several questions:

Upvotes: 8

Views: 2981

Answers (5)

SaeedD
SaeedD

Reputation: 11

If you want to write a portable code which you can execute on different GPU devices and also on CPUs. You need to use OpenCL.

Actually, to configure your kernel you need to write a host code in C. The configuration file might be shorter if you want to write it for CUDA kernels comparing to OpenCL one.

Upvotes: 0

antonioduarte
antonioduarte

Reputation: 655

In addition to previous answers, for CUDA you would need a NVIDIA card/GPU, unless you have access for a remote one, which I would recommend this course from Coursera:

Heterogeneous Parallel Programming

It not just gives an introduction to CUDA and OpenCL, memory model, tiling, handling boundary conditions and performance considerations, but also directive-based languages such as OpenACC, a high level language for expressing parallelism into your code, leaving mostly of the parallel programming work for the compiler (good to start with). Also, this course has a online platform where you can use their GPU, which is good to start GPU programming without concerning about software/hardware setup.

Upvotes: 1

Vando
Vando

Reputation: 189

completing the answer given by @nulvinge, I'd say that OpenCL its to GPU Programming like OpenGL is to GPU Rendering. But its not the only option for multi-architecture development, you could also use DirectCompute, but I wouldn't say that its the best option, just if you want your code running on every DirectX11 compatible GPUs, that includes some intel graphics cards chips too right?

But even if you are thinking in doing some GPU programming with OpenCL, do not forget to study the architecture of the platforms that you're using. ATI CPUs, GPUs and NVIDIA GPUs have big differences and your code is needed to be tuned for each platform that you're using if you want to get the most of it...

Fortunately both NVIDIA and AMD have Programming Guides to help you:)

Upvotes: 3

Paul R
Paul R

Reputation: 213120

You probably want to do some background reading on CUDA - it's not something you can just pick up by looking at a few code samples. There are about 3 different CUDA books on Amazon now, and there is a lot of reference material at http://developer.nvidia.com.

To answer your questions:

  • yes, .cu files are compiled with nvcc to an intermediate form (PTX) - this is subsequently converted to GPU-specific code at run-time

  • the generated code will run on a subset of nVidia GPUs, the size of the subset depending on what CUDA capabilities you use in your code

Upvotes: 5

nulvinge
nulvinge

Reputation: 1598

To answer your second question:

OpenCL is the (only) way to go if you want to write platform independent GPGPU code.

ATIs website actually has a lot of resources for OpenCL if you search a little, and their example projects are very easy to modify into what you need, or just to understand the code.

The OpenCL spec and reference pages is also a very good source of knowledge: http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/ http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf

There are a lot of talks that explain some of the core concepts, and also that explain how to write fast code that I would recommend (that is applicable to CUDA too).

To almost answer your first question: In OpenCL, the code is compiled at runtime to the specific GPU you're using (to guarantee speed).

Upvotes: 10

Related Questions