Hello everybody,
For solving tridiagonal systems with CUDA, I have always used CUDPP 2.1 library without any problem. However, if I use CUDA 5.5 or higher, I obtain a “glibc detected malloc() memory corruption” error. After checking that the memory allocation is done fine, the body of my code is the following:
CUDPPResult res;
CUDPPHandle theCudpp;
res=cudppCreate(&theCudpp);
if (CUDPP_SUCCESS != res)
{
printf("Error in cudppCreate()\n");
exit(-1);
}
CUDPPConfiguration config;
//config.op = CUDPP_ADD;
config.datatype = CUDPP_FLOAT;
config.algorithm = CUDPP_TRIDIAGONAL;
config.options = 0;//CUDPP_OPTION_FORWARD ;//| CUDPP_OPTION_EXCLUSIVE;
CUDPPHandle tridiplan = 0;
res = cudppPlan(theCudpp, &tridiplan, config, 0, 0, 0);
if (CUDPP_SUCCESS != res)
{
printf("Error creating CUDPPPlan\n");
exit(-1);
}*/
// Run
res = cudppTridiagonal(tridiplan, d_a, d_b, d_c, d_d, d_x, numElements,numBatches);
if (CUDPP_SUCCESS != res)
{
printf("Error in cudppTridiagonal()\n");
exit(-1);
}
res = cudppDestroyPlan(tridiplan);
if (CUDPP_SUCCESS != res)
{
printf("Error destroying CUDPPPlan\n");
exit(-1);
}
// shut down the CUDPP library
cudppDestroy(theCudpp);
cudaDeviceSynchronize();
It is curious that commenting all this code except the cudppHandle creation&destruction works fine in CUDA 5.0 but fails in CUDA 5.5. Does anyone know if there is a bug with CUDA 5.5 and CUDPP 2.1 ?? I haven’t found anything in Google…
Thank you,