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呼び出しの結果はむしろランダムに見え、間違ったインデックスを出力します。
誰かが私の問題に対するゴリの良い答えを持っていますか?私は両方のcublasIdamax
とcublasIdamin
呼び出しに
は残念ながら、これは私が持っている問題が解決しない 'int型*を' '初期化max_idx'と'と 'int'の代わりに、内部min_idx'試してみてください、そして、参照によってCUBLASに渡す'& – Vanwaril