私はclfftのサンプルコードを見ていました。私は、各関数呼び出しの後にerrに値を代入し続けていることに気づきます。このコードのエラーチェックのポイントは何ですか?
err = clfftCreateDefaultPlan(&planHandle, ctx, dim, clLengths);
/* Set plan parameters. */
err = clfftSetPlanPrecision(planHandle, CLFFT_SINGLE);
err = clfftSetLayout(planHandle, CLFFT_COMPLEX_INTERLEAVED, CLFFT_COMPLEX_INTERLEAVED);
err = clfftSetResultLocation(planHandle, CLFFT_INPLACE);
/* Bake the plan. */
err = clfftBakePlan(planHandle, 1, &queue, NULL, NULL);
/* Execute the plan. */
err = clfftEnqueueTransform(planHandle, CLFFT_FORWARD, 1, &queue, 0, NULL, NULL, &bufX, NULL, NULL);
/* Wait for calculations to be finished. */
err = clFinish(queue);
/* Fetch results of calculations. */
err = clEnqueueReadBuffer(queue, bufX, CL_TRUE, 0, N * 2 * sizeof(*X), X, 0, NULL, NULL);
私はエラーチェックの必要性を理解していますが、実際には戻り値をチェックすることはありません。彼らはそれをerrに割り当てて上書きします。私のコードでは、私はこれを持っています...
status = clfftSetPlanPrecision(bpm->fft_plan, bpm->float_type);
if(status != CLBPM_SUCCESS)
goto cleanup;
status = clfftSetLayout(bpm->fft_plan, CLFFT_COMPLEX_INTERLEAVED, CLFFT_COMPLEX_INTERLEAVED);
if(status != CLBPM_SUCCESS)
goto cleanup;
status = clfftSetPlanScale(bpm->fft_plan, CLFFT_FORWARD, 1.0f/(bpm->grid_size * bpm->grid_size));
if(status != CLBPM_SUCCESS)
goto cleanup;
status = clfftSetPlanScale(bpm->fft_plan, CLFFT_BACKWARD, 1.0f);
if(status != CLBPM_SUCCESS)
goto cleanup;
status = clfftSetResultLocation(bpm->fft_plan, CLFFT_OUTOFPLACE);
if(status != CLBPM_SUCCESS)
goto cleanup;
例のコードはちょうど悪いコードですか、それとも関数呼び出しを通して伝播するエラーですか?
'err'のポスト減速度。何とか特別なの? – chux
ここに完全なコードへのリンクがあります(スクロールダウン)https://github.com/clMathLibraries/clFFTエラーはcl_intタイプのものです – chasep255
完全なコードではありません。 'type cl_int'の定義はそこにはありません(AFAICT)、おそらく' CL/cl.h'にあります。 OTOH、私はこの調査のラインが今では助けになるとは思わない。 – chux