racecheck 도구가 내 응용 프로그램과 메모리 경쟁을보고했습니다. 나는 이것을 CUFFT exec 함수에 격리시켰다.왜 cuda-memcheck racecheck가 cufft에서 오류를보고합니까?
내가 잘못 했나요? 그렇지 않다면 어떻게하면 경주가 이것을 무시할 수 있습니까? 여기
는cuda-memcheck --tool racecheck
에서 실행할 때이
========= Race reported between Write access at 0x00000a30 in void spVector0128C::kernelTex<unsigned int, float, fftDirection_t=-1, unsigned int=8, unsigned int=8, LUT, ALL, WRITEBACK>(kernel_parameters_t<fft_tex_t, unsigned int, float>)
========= and Read access at 0x00000a70 in void spVector0128C::kernelTex<unsigned int, float, fftDirection_t=-1, unsigned int=8, unsigned int=8, LUT, ALL, WRITEBACK>(kernel_parameters_t<fft_tex_t, unsigned int, float>) [4 hazards]
예 당신이 잘못 작업을 수행하지 않는
#include <cufft.h>
#include <iostream>
#define ck(cmd) if (cmd) { std::cerr << "error at line " << __LINE__ << std::endl;exit(1);}
int main(int argc,char ** argv)
{
int nfft=128;
cufftComplex * ibuf;
cufftComplex * obuf;
ck(cudaMalloc((void**)&ibuf, sizeof(cufftComplex)*nfft));
ck(cudaMalloc((void**)&obuf, sizeof(cufftComplex)*nfft));
ck(cudaMemset(ibuf,0,sizeof(cufftComplex)*nfft));
cufftHandle fft;
ck(cufftPlanMany(&fft,1,&nfft,
NULL,1,nfft,
NULL,1,nfft,
CUFFT_C2C,1));
ck(cufftExecC2C(fft,ibuf,obuf,CUFFT_FORWARD));
ck(cudaDeviceSynchronize());
cufftDestroy(fft);
ck(cudaFree(ibuf));
ck(cudaFree(obuf));
return 0;
}
FWIW, cuFFT에 대한 nVidia 버그 # 1823484를 제출했습니다. 어쩌면 그것은 cuda-memcheck에게 재 할당 될 것입니다. –