Libraries Hierarchy

Hello,

I’m doing a project for my degree and it is focused on CUDA, its libraries and how they interact. I need this information to complete a scheme that shows how CUDA and the external libraries interact.

I’m not sure about next information but it has been obtained using google…

Until CUDA 5.0 I have observe that they have an hierarchy:

High level CUBLAS, CUFFT…
Medium level CUDA_RUNTIME_API
Low level CUDA_DIVER_API

It means that if you use a CUBLAS function (like cublasSgemm), that function is decomposed into CUDA_RUNTIME_API functions and CUDA_RUNTIME_API functions into CUDA_DRIVER_API functions.

But now, with CUDA 5.5 I think that this hierarchy has changed. I don’t know if it is because the static CUDA_RUNTIME_API has appeared.

Does anybody know if I am right?
Does the hierarchy has changed?

Thanks!

Hi again!!

Well, I think what the solution is. Using the ldd linux command over libcublas.so.5.5 and comparing the output with the same command over libcublas.so.5.0 some changes appear.

The dynamic links to libcudart.so and libcuda.so have dissapeared but it does not mean that libcublas does not call them. I am not 100% sure but I think that new libraries like CUBLAS and CUFFT are compiled using the static cuda runtime API.

Then the hierarachy is the same that in previous CUDA versions but now, the libraries are compiled with the statics libraries.

Thanks

Yes, you are correct. cuBLAS and cuFFT (as well as cuRAND, cuSPARSE, and NPP) are compiled against the static version of the CUDART library, starting with CUDA 5.5. This makes application deployment easier for developers that combine libraries built against different versions of the CUDA toolkit.

Thanks Ujval for your confirmation.