【发布时间】:2012-05-05 22:44:12
【问题描述】:
我无法理解为什么我的函数使用 CUBLAS 在一系列双精度中找到最大值和最小值的函数不能正常工作。
代码如下:
void findMaxAndMinGPU(double* values, int* max_idx, int* min_idx, int n)
{
double* d_values;
cublasHandle_t handle;
cublasStatus_t stat;
safecall( cudaMalloc((void**) &d_values, sizeof(double) * n), "cudaMalloc (d_values) in findMaxAndMinGPU");
safecall( cudaMemcpy(d_values, values, sizeof(double) * n, cudaMemcpyHostToDevice), "cudaMemcpy (h_values > d_values) in findMaxAndMinGPU");
cublasCreate(&handle);
stat = cublasIdamax(handle, n, d_values, sizeof(double), max_idx);
if (stat != CUBLAS_STATUS_SUCCESS)
printf("Max failed\n");
stat = cublasIdamin(handle, n, d_values, sizeof(double), min_idx);
if (stat != CUBLAS_STATUS_SUCCESS)
printf("min failed\n");
cudaFree(d_values);
cublasDestroy(handle);
}
其中 values 是要在其中搜索的值。 max_idx 和 min_idx 是值中找到的数字的索引。 CUBLAS 调用的结果似乎相当随机并且输出错误的索引。
有人对我的问题有很好的回答吗?我现在有点难过:(
【问题讨论】:
-
尝试将
max_idx和min_idx内部初始化为int而不是int *,并通过引用&max_idx将它们传递给cublas