了解Cublas:向量加法(asum)

时间:2013-03-21 16:43:06

标签: cuda cublas

根据CUBLAS reference,asum函数(用于获取向量元素的总和)是:

cublasStatus_t  cublasSasum(cublasHandle_t handle, int n, const float *x, int incx, float *result)

您可以在参考链接中看到参数说明,粗略地说,我们有xn元素的向量incx,元素之间的距离为int arraySize = 10; float* a = (float*) malloc (sizeof(float) * arraySize); float* d_a; cudaMalloc((void**) &d_a, sizeof(float) * arraySize); for (int i=0; i<arraySize; i++) a[i]=0.8f; cudaMemcpy(d_a, a, sizeof(float) * arraySize, cudaMemcpyHostToDevice); cublasStatus_t ret; cublasHandle_t handle; ret = cublasCreate(&handle); float* cb_result = (float*) malloc (sizeof(float)); ret = cublasSasum(handle, arraySize, d_a, sizeof(float), cb_result); printf("\n\nCUBLAS: %.3f", *cb_result); cublasDestroy(handle);

我的代码是(非常简化,但我也对此进行了测试,但仍然存在错误):

CUDA_STATUS_SUCCESS

我已经删除了错误检查以简化代码(没有错误,CUBLAS函数返回free)和cudaFree以及0

它编译,运行,它不会抛出任何错误,但打印结果为1.QNAN,调试时实际上是{{1}}。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

cublasSasum的一个论点是不正确的。这个电话应该是这样的:

ret = cublasSasum(handle, arraySize, d_a, 1, cb_result);

请注意,倒数第二个参数incx应位于中,而不是字节