私は非常に興味深い問題を抱えていますが、それを 3 時間解決していますが、何が起こっているのか、なぜ機能していないのかわかりません。私はそれをグーグルで試しましたが、結果はありませんでした。
私はCUDAでプログラムをコーディングしています。私はこの本当に単純なコードを持っています:
__global__ void calcErrorOutputLayer_kernel(*arguments...*)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
float gradient;
float derivation;
derivation = pow((2/(pow(euler, neuron_device[startIndex + idx].outputValue) +
pow(euler, -neuron_device[startIndex + idx].outputValue))), 2);
gradient = (backVector_device[idx] - neuron_device[startIndex + idx].outputValue);
gradient = gradient * derivation; //this line doesn't work
gradient = gradient * 2.0; //this line works
わかりましたので、勾配は正しく計算され、導出も行われます。しかし、行が来ると、これら2つの変数が互いに乗算されるべきであり、何も起こらず(勾配の値は変更されません)、次の行でCUDAデバッガーは次のように伝えます:「「派生」はターゲット位置に値がありません」
勾配 * 2.0 は正しく機能し、勾配の値を 2 回変更します。
誰でも私を助けてもらえますか?