1
$\begingroup$

I'm working on an image processing project and have written some of my algorithms in OpenCL. At the moment I'm using Cloo.

I'm at the stage now where I want to optimise my program, as it currently runs too slowly.

I'm also thinking it might be worth investigating some other implementations of OpenCL.

I have tried to install Intel's SDK however the installation failed. (I think I may need to get in Intel GPU to use the SDK, I currently am using an NVIDIA Quadro K4000).

I found this site recommending the Intel SDK because of its a mature implementation.

Is it worth investing in an Intel graphics card for the Intel SDK?

$\endgroup$
  • $\begingroup$ Looks like AMD's SDK works fine on my computer, even if intel's wont. $\endgroup$ – sav Jun 13 '14 at 4:49
5
$\begingroup$

Short answer: No.

You have a number of options here.

For your NVIDIA GPU, you will get the best performance by switching to CUDA, rather than OpenCL. You can also upgrade your card, to something like the Geforce Titan, which significanty outperforms the Quadro card for GPU computation.

My personal opinion is that CUDA is much nicer to work with, has better library support, etc, but there are some disadvantages as well. This includes not being able to use AMD GPUs and ofcourse you would have to reimplement everything. CUDA and OpenCL are quite similar however, and translating from OpenCL to CUDA is relatively easy. The opposite is not always the case. NVIDIA also has the Performance Primitives (NVPP) library which implements many basic image processing steps.

Getting an Intel GPU will NOT improve performance, nor make programming easier. Intel GPUs are generally built for saving power, not for performance. You could consider an Intel Xeon Phi, but from what I understand you would still need to modify your code significantly to get good performance (Disclaimer: I have never programmed a Xeon Phi, so maybe it's less work than I imagine).

Another option is to get an AMD card, and use the AMD libraries for OpenCL. As OpenCL is the default way to do GPU computations on AMD cards (unlike the Xeon Phi and NVIDIAs cards), they have some decent libraries.

Without knowing more about your problem, it's difficult to say what you should do. NVIDIA cards are faster for floating point arithmetic, AMD cards are better at integers. I would consider abandoning Cloo, as it has not been updated in a couple of years.

If you're not comfortable with the low-level programming required from CUDA and OpenCL, you could also try something like the ArrayFire library, which seems to ease implementation quite a bit.

Finally, if you post more about your problem and how you have solved it, maybe someone here will be able to help with optimizing the code.

$\endgroup$
0
$\begingroup$

Depending on how much flexibility you need, a high level kernel crafting tool, such as Blurate, might work too. That way you won't have to deal with SDKs

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.