我在使用CUBLAS發現在雙倍範圍內發現最大值和最小值的函數無法正常工作時遇到問題。使用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);
}
當值是值中搜索。 max_idx和min_idx是找到的數值的索引。 CUBLAS調用的結果看起來相當隨意,並且輸出錯誤的索引。
任何人對我的問題有很好的回答?我現在有點難過:(
嘗試初始化'max_idx'和'內min_idx'爲'int'取代'INT *',並通過引用它們傳遞到CUBLAS'&max_idx' – Vanwaril 2012-04-25 19:42:52