根据CUBLAS 参考,asum 函数(用于获取向量元素的总和)是:
cublasStatus_t cublasSasum(cublasHandle_t handle, int n, const float *x, int incx, float *result)
您可以在参考链接中看到参数说明,大致我们有一个元素向量x
以及n
元素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);
为了简化代码,我删除了错误检查(没有错误,CUBLAS 函数返回CUDA_STATUS_SUCCESS
)和free
and cudaFree
。
它编译,它运行,它不会抛出任何错误,但打印的结果是0
,并且,调试,它实际上是1.QNAN
。
我错过了什么?