CISMM / Clarity

An open-source deconvolution library with CUDA acceleration
http://cismm.cs.unc.edu/downloads/?dl_cat=11
16 stars 3 forks source link

Patch to compile Clarity 1.0 in Ubuntu 11.10 #1

Closed rcasero closed 12 years ago

rcasero commented 12 years ago

Dear all,

I have downloaded and tried to compile Clarity 1.0.0 in Ubuntu 11.10, and had to make some small edits to get it to compile. I'm going to try to attach a patch to this issue (first time I use GitHub).

The patch is going to contain some extra stuff, as I have put Clarity as a third-party library in project Gerardus

http://code.google.com/p/gerardus/source/browse/#svn%2Ftrunk%2Fcpp%2Fsrc%2Fthird-party%2Fcquammen-Clarity

(I'm building a Matlab MEX interface for it).

Best regards,

Ramon.

rcasero commented 12 years ago

OK, so it seems that patches are not attached, they are put in gist and then linked from the issue. So here you are

https://gist.github.com/1392533

cquammen commented 12 years ago

Ramon,

Thank you for sending the patches. I've incorporated most of them in master. If you have some time, please verify that the changes work on your system.

Thanks, Cory

rcasero commented 12 years ago

Hi Cory,

Sorry for the slow reply, due to the winter holiday. Thanks for the fixes to the code.

I have checked out the latest code, and I had some trouble compiling it, but that was due to nVIDIA CUDA not being compatible with gcc's current version in Ubuntu (v4.5). I think I solved that, adding to the root CMakeLists.txt in Gerardus the lines

SET(CMAKE_C_COMPILER gcc-4.4) SET(CMAKE_CXX_COMPILER g++-4.4) SET(CUDA_NVCC_FLAGS "-D__GNUC_MINOR__=4")

Clarity itself seems to compile fine in Ubuntu now.

Now I'm having trouble with the Gerardus Matlab interface because Matlab wants to use its own FFTW library, while Clarity wants to use the one installed in the system. Will try to figure out a solution.

Cheers,

Ramon.

rcasero commented 12 years ago

Hi Cory,

I solved the problems I was having, and your new version of Clarity compiles as part of Gerardus, with an without CUDA. The duplicity of the FFTW libraries doesn't seem to be a problem. I just had to make some small changes to the CMakeLists.txt in Clarity. You can see the diff below

http://code.google.com/p/gerardus/source/diff?spec=svn672&r=672&format=side&path=/trunk/cpp/src/third-party/cquammen-Clarity/CMakeLists.txt

I ran a test on an image with different sizes RxCx19 and a Point Spread Function of size 9x9x7. Time in seconds.

 R,C | no CUDA  |  CUDA   |
---------------------------
 128 |   14.55  |  15.38  |
 256 |    9.13  |   9.85  |
 512 |  103.44  |  93.79  |
1024 |  162.80  | 156.00  |
---------------------------

Cheers,

Ramon.

cquammen commented 12 years ago

Ramon,

Thanks for the information. My understanding of the first part of your patch is that you are telling nvcc the GCC minor version number because otherwise it gets it wrong. My initial thought is that I don't want to include defining this macro for nvcc in case someone uses gcc 4.2, for instance.

I should include documentation on how Clarity needs to be compiled with a version of gcc < 4.5.

Cory

On Thu, Jan 12, 2012 at 10:38 PM, rcasero reply@reply.github.com wrote:

Hi Cory,

I solved the problems I was having, and your new version of Clarity compiles as part of Gerardus, with an without CUDA. The duplicity of the FFTW libraries doesn't seem to be a problem. I just had to make some small changes to the CMakeLists.txt in Clarity. You can see the diff below

http://code.google.com/p/gerardus/source/diff?spec=svn672&r=672&format=side&path=/trunk/cpp/src/third-party/cquammen-Clarity/CMakeLists.txt

I ran a test on an image with different sizes RxCx19 and a Point Spread Function of size 9x9x7. Time in seconds.

        R,C | no CUDA  |  CUDA   |        ---------------------------         128 |   14.55  |  15.38  |         256 |    9.13  |   9.85  |         512 |  103.44  |  93.79  |        1024 |  162.80  | 156.00  |        ---------------------------

Cheers,

Ramon.


Reply to this email directly or view it on GitHub: https://github.com/cquammen/Clarity/issues/1#issuecomment-3475006

Cory Quammen Research Associate Department of Computer Science The University of North Carolina at Chapel Hill

rcasero commented 12 years ago

On 17/01/12 18:58, cquammen wrote:

Ramon,

Thanks for the information. My understanding of the first part of your patch is that you are telling nvcc the GCC minor version number because otherwise it gets it wrong. My initial thought is that I don't want to include defining this macro for nvcc in case someone uses gcc 4.2, for instance.

I should include documentation on how Clarity needs to be compiled with a version of gcc< 4.5.

Hi Cory,

Yes, you are right. In Gerardus, if you select CUDA, then it forces the compiler to be gcc-4.4. But when nvcc checks for the compilers version, it queries gcc, which returns e.g. gcc 4.5.

So that macro is doing as you say, passing the correct minor version to the compiler. This could be done better, doing something like --version with the compiler, parsing the minor version, and then passing that to the compiler.

Cheers,

Ramon.

Dr. Ramón Casero Cañas

Computational Biology Department of Computer Science University of Oxford Wolfson Building, Parks Rd Oxford OX1 3QD

tlf +44 (0) 1865 610737 web http://www.cs.ox.ac.uk/people/Ramon.CaseroCanas photos http://www.flickr.com/photos/rcasero/