The PAQ compression algorithm (read here) is by far the best algorithm for compressing files. However, it is also one of the slowest, taking well over 10 hours to compress 1GB on even the best CPU’s. Can this algorithm be sped up using CUDA? (It is open-source, BTW).
Side question: Will there ever be a Java compiler (or an API/SDK) that creates CUDA-compatible executables (.jar files are OK as long as they work with CUDA)?
You fully understand the algorithm that you want to implement on CUDA hardware
You know (or learn) about the CUDA programming model and hardware
and from 1+2) you can devise whether or not you can expect any speedups from using CUDA.
So learn about PAQ and also about CUDA.
My take is that general binary data compression algorithms hardly maps to CUDA because this is fundamentally a very sequential operation with a lot of data dependencies. Also the shared memory on the chip is a definitely too small to work with large data sets efficiently.
Video and image compression/decompression benefit from CUDA because the required transformations can be accelerated greatly by CUDA (for JPEG, JPEG2000, etc), as well as things like motion vector search and inloop filtering (for H.264 and MPEG4 for example). Also for decompression there’s plenty of dedicated hardware on the GPUs.
The CUDA acceleration for image and video compression standards benefits from the fact that the source data is partitioned into smaller blocks for transformation and processing (e.g. macroblocks). These can be shoved into shared memory and be processed on several multiprocessors in parallel.
actualy there is a parallel solution for what u wrote, a very good one, have a look at the scan example and the cudpp. I use these techniques in a number of places. It’s true that the GPU isn’t good for every kind of problem. But in most cases i found that it might be hard, require more time and a rewrite of the algorithm. but in the end you will get a performance boost, maybe not x100 but can defiantly be x10. So good luck !!! :)
I don’t want to discourage, but you have a few big hurdles to cross, but if you have the perseverance then go for it. I enjoy my daily work with CUDA very much.