CUDAを使用してニューラルネットワークを作成しようとしています。
私のカーネルは次のようになります:
__global__ void feedForward(float *input, float *output, float **weight) {
//Here the threadId uniquely identifies weight in a neuron
int weightIndex = threadIdx.x;
//Here the blockId uniquely identifies a neuron
int neuronIndex = blockIdx.x;
if(neuronIndex<NO_OF_NEURONS && weightIndex<NO_OF_WEIGHTS)
output[neuronIndex] += weight[neuronIndex][weightIndex]
* input[weightIndex];
}
出力をホストにコピーして戻すときに、エラーが発生します
行xxでのエラー不特定の起動失敗
xx行目:
CUDA_CHECK_RETURN(cudaMemcpy(h_output, d_Output, output_size, cudaMemcpyDeviceToHost));
私はここで何か間違ったことをしていますか?
ウェイトマトリックスを参照するためにブロックインデックスとスレッドインデックスの両方を使用しているためです。それとも問題は他の場所にありますか?
私は次のようにウェイトマトリックスをオールコーティングしています:
cudaMallocPitch((void**)&d_Weight, &pitch_W,input_size,NO_OF_NEURONS);
私のカーネル呼び出しは次のとおりです。
feedForward<<<NO_OF_NEURONS,NO_OF_WEIGHTS>>>(d_Input,d_Output,d_Weight);
その後、私は呼び出します:cudaThreadSynchronize();
私はCUDAを使ったプログラミングに不慣れです。どんな助けでもいただければ幸いです。
ありがとう