1
$\begingroup$

Is there anyone with Image Processing background who can suggests which one is better for Image Processing algorithms among CUDA and FPGA. I'm specifically looking to write code for Wavelet Transform and Discrete Cosine Transform and eventually writing code for Quantization and Arithmatic coding, but i am confused which hardware programming language should i focus on among CUDA and FPGA.

Here are few questions i want to ask,

  • Which one is better for Image Processing like compression, watermarking etc ?
  • Which one is Faster ?
  • Which one is easy to implement ?
$\endgroup$
3
$\begingroup$

Did you have a chance to look at Spiral site? They try to address this question. For example, there are special cases where FPGA will run O(N) instead of the customary O(N log N).

Here's a paper that deals with generating FPGA.

All the way at the end of benchmarks page they show performance of a software algorithm enhanced with FPGA-based solvers.

P.S. It's worth noting that Spiral can be used to optimize algorithms other than FFT, but presented data outlines the popular case only.

$\endgroup$
1
$\begingroup$

The question you've asked is not that easy to answer. It depends on many factors.

I will try to give you explanations in the opposite order:

Which one is easy to implement ?

There is no direct comparison between CUDA and FPGA as CUDA is a programming language and FPGA is hardware architecture. FPGAs can be programmed either in HDL (Verilog or VHDL) or on higher level using OpenCL. CUDA on the other hand is a programming language specially designed for Nvidia GPUs.

So, you can compare:

  • FPGA to GPU or
  • CUDA to OpenCL or HDL

Programming a GPU in CUDA is definitely the easiest way. If you don't have any experience with HDL it will almost surely be too much of a challenge for you. OpenCL for FPGA could be a way to go. However, it is harder to implement and probably a lot more expensive.

Which one is Faster ?

GPU runs faster, but FPGA can be more efficient.

GPU has the potential of running at a speed higher than FPGA can ever reach. But only for algorithms that are specially suited for that. If the algorithm is not optimal, the GPU will loose a lot of performance.

FPGA on the other hand runs much slower, but you can implement problem-specific hardware that will be very efficient and get stuff done faster.

It's kinda like eating your soup with a fork very fast vs. eating it with a spoon more slowly.

Which one is better for Image Processing like compression, watermarking etc ?

GPU was invented for pixel-wise image processing, so you can expect it to perform better. Compression is mostly signal processing, so I would place my bet on the FPGA. Watermarking will be faster on GPU.

Both devices base their performance on parallelization, but each in a slightly different way. If the algorithm can be granulated into a lot of pieces that execute the same operations (keyword: SIMD), the GPU will be faster. If the algorithm can be implemented as a long pipeline, the FPGA will be faster. Also, if you want to use floating point, FPGA will not be very happy with it :)

There are some examples for FPGA algorithms on Altera site. Most of those can beat GPU solutions.

There are tons of examples and libraries for CUDA.

Sources: I wrote a master's thesis on comparing performance of FPGAs (OpenCL) and GPUs Algorithm Acceleration on FPGA with OpenCL

$\endgroup$
  • $\begingroup$ Can you please add a link to the thesis or other suitable references if available? $\endgroup$ – A_A Apr 9 '18 at 11:48
  • $\begingroup$ It's not published anywhere online, so I can only give you my onedrive link. I don't know if there is any convention on hating such links--- Algorithm Acceleration on FPGA with OpenCL $\endgroup$ – Zdovc Apr 10 '18 at 10:59
  • $\begingroup$ Thank you. No particular "hate" as far as I am aware (?). I am not asking for me specifically but since the last phrase of your answer refers to the thesis, I thought it would be good to include a link to it. You can edit your answer to add the link to the main body. All the best. $\endgroup$ – A_A Apr 10 '18 at 11:12
  • $\begingroup$ I included the link in the answer. Could you please upvote my answer if you found it useful. I'm in a desperate need for reputation so I can use stackexchange normally. $\endgroup$ – Zdovc Apr 10 '18 at 11:24

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.