Я смотрел пример кода для 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);
Я понимаю необходимость проверки ошибок, но они никогда не проверяют возвращаемое значение. Они просто назначают его ошибке и перезаписывают. В моем коде у меня есть это ...
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 err только типа cl_int – chasep255
Не полный код. Определение 'type cl_int' не существует (AFAICT), возможно, в' CL/cl.h'. OTOH, я не ожидаю, что эта линия исследования поможет в любом случае. – chux