を使用して、ホストにページ整列メモリを割り当てましたposix_memalign
。への呼び出しposix_memalign
はエラーを返しません。ただし、このポインターを引数として使用するcudaHostRegister
と、「無効な引数」エラーが発生します。問題は何ですか?
- CUDA API バージョン: 4.0
- gcc バージョン: 4.4.5
- GPU 計算能力: 2.0
メモリ割り当てはアプリケーション コードで行われ、ポインタがライブラリ ルーチンに渡されます。
アプリケーション コード スニペット:
if(posix_memalign((void **)&h_A, getpagesize(), n * n * sizeof(float))) {
printf("Error allocating aligned memory for A\n");
return 1;
}
共有ライブラリのコード スニペット:
if((ret = cudaSetDeviceFlags(cudaDeviceMapHost)) != cudaSuccess) {
fprintf(stderr, "Error setting device flag: %s\n",
cudaGetErrorString(ret));
return NULL;
}
if((ret = cudaHostRegister(h_A, n2 * sizeof(float),
cudaHostRegisterMapped)) != cudaSuccess) {
fprintf(stderr, "Error registering page-locked memory for A: %s\n",
cudaGetErrorString(ret));
return NULL;
}