cudaMemcpy2D を使用して 20 * 20 char 値の 2D 配列をカーネルに送信していますが、20 * 30 の配列を送信しようとするとエラーが発生します。
これらの行のコードは次のとおりです。
次のように定数を定義します。
//Define for 2D arrays
#define TEXTSIZE 20
#define NUMBERTEXT 30
私はこのように私のtextPitchを定義します
size_t pitch_text;
次のように配列を初期化します。
char text[NUMBERTEXT][TEXTSIZE] = {{'A','A','B','C','B','B','C','A','B','A','A','B','B','A','A','A','C','A','A','B'},\ ... }};
私は cudamalloc を次のようにします:
gpuErrchk(cudaMallocPitch( (void**)&d_text, &pitch_text, NUMBERTEXT * sizeof(char), TEXTSIZE));
CudaMemcpy2D は次のように初期化されます。
gpuErrchk(cudaMemcpy2D(d_text, pitch_text, text, TEXTSIZE * sizeof(char), TEXTSIZE * sizeof(char),NUMBERTEXT, cudaMemcpyHostToDevice));
受信したエラーは次のとおりです。
GPUassert: invalid argument ../2D.cu 212
212 行目のエラーは、基本的に CudaMemcpy2D 行です。
大規模な 2D 配列をグローバル メモリの GPU に送信するより良い方法はありますか? 20 * 20 配列を使用すると、コードが正常に機能することに注意してください。
ありがとうございました