以下のコードを使用して、GPU上のポインタによる割り当て方法をテストします。std :: vectorを使用するときに割り当てるcudaMalloc()<int *>
#include <stdio.h>
#include <cuda_runtime.h>
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
cudaError_t err = cudaSuccess;
size_t numBytes;
vector<int*> a;
numBytes = 10 * sizeof(int);
err = cudaMalloc((void**)&a[0], numBytes);
if (err != cudaSuccess)
{
fprintf(stderr, "Failed to allocate device vector A (error code %s)!\n", cudaGetErrorString(err));
exit(EXIT_FAILURE);
}
printf("Done\n");
return 0;
}
私はcmdで正常にコンパイルできます。nvcc b.cu -o b.o
、しかし、私はcmdで、それを実行すると:私は、ポインタを使用しての間にいくつかのミスがあると思います
Failed to allocate device vector A (error code invalid argument)!
:./b.o
、私は、次の誤ったメッセージに会いましたしかし、なぜそれが起こったのか分かりません。
目的が、デバイスポインタを含むホストstd :: vectorを持つことであるなら、どのように実際に役立つのでしょうか? – talonmies
@talonmies:2番目のオプションは、切り替えの目的を示唆しています。最初のオプションは機能します - アロケータはCUDAデバイス上でallocateを使うことができます。おそらく私はそれをもっと明確にすべきです。 – einpoklum