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
cudaFree
コンパイルして実行し、エラーをスローしませんが、出力される結果は0
、デバッグでは実際には1.QNAN
です。
私は何を取りこぼしたか?