这真让我抓狂。我一生都无法弄清楚为什么会发生这种情况。基本上,我的这段代码在 Linux(Nsight eclipse 版)下运行良好。我尝试通过创建 Visual Studio 2013 项目并对其进行配置使其与 Windows 兼容。
此时一切似乎都很好,代码编译没有任何问题。当我使用“发布”配置时,它甚至运行良好。但是,一旦我尝试调试配置,下面的部分就会崩溃并出现cudaErrorInvalidValue
错误。
我已经将问题追溯到优化标志。禁用优化将导致崩溃。使用/O2
or /O1
,代码运行良好!
同样,无论有没有优化,这在 Linux 下都可以正常工作。我想知道 Windows 优化带来了什么。如果有任何帮助,我正在使用带有 CUDA 6.5 和静态库链接的 Visual Studio 2013(更新 4)。(在 Linux 上是 CUDA 6.5,但是动态库链接)。
整个代码可在此处获得。
size_t hostPitch = (size_t)getHostPitch();
size_t devicePitch = (size_t)getDevicePitch();
size_t cal = (size_t)(width * numChannels * sizeof(T));
size_t h = (size_t)height;
cudaError_t eCUDAResult = cudaMemcpy2D((void*)this->hostData, hostPitch, (const void*)this->deviceData, devicePitch, cal, h, cudaMemcpyDeviceToHost);