@FHulsemann I am sorry that nobody answered your question earlier but I can answer.
With the new generic API (64-bit integer), CUSOLVER changed what is returned by the “buffer_size” functions.
Before it was the number of element in a given array of type T where T is Float32, Float64, ComplexF32, Complex64.
It is what is returned by cusolverDnDgesvdj_bufferSize where T = Float64 (legacy API).
With the new API, the buffer size is in bytes because we only have one function for the buffer size of all precisions (cusolverDnX…)
To more easily reuse buffers between all routines, we allocate buffers of `CuArray{UInt8}, which can be used for the old and new API and easily reused for different precisions.
It is why you have a factor 8 between the Julia and C versions. A Float64 requires 8 bytes so we need a vector of CuArray{UInt8} that is 8 times longer than a CuArray{Float64} to store the same content.
You can see here what we do:
Julia and C are consistent, the only difference is that we compute the number of bytes in Julia while C returns the number of coefficients for a given precision.