Это сводит меня с ума. Я не могу понять, почему это происходит. В принципе, у меня есть этот код, который отлично работает под Linux (версия Eclipse от Nsight). Я попытался сделать его совместимым с Windows, создав проект Visual Studio 2013 и настроив его.Ошибка cudaMemCpy2d (cudaErrorInvalidValue) при запуске конфигурации «отладки»
На данный момент все кажется прекрасным, код компилируется без проблем. Он даже отлично работает, когда я использую конфигурацию «Release». Однако, как только я попробую настроить Debug, приведенная ниже часть сбой с ошибкой cudaErrorInvalidValue
.
Я отследил проблему до флага оптимизации. Отключение оптимизации приведет к сбою. Используя /O2
или /O1
, код работает отлично!
Опять же, это прекрасно работает под Linux с оптимизацией или без нее. Интересно, что дает в оптимизации Windows. Если это поможет, я использую Visual Studio 2013 (обновление 4) с CUDA 6.5 и статической библиотекой. (В Linux это был CUDA 6.5, но динамическая компоновка библиотеки).
Весь код доступен here.
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);
SO [ожидает] (http://stackoverflow.com/help/on-topic) [MCVE] (http://stackoverflow.com/help/mcve) в самом вопросе. То, с чем вы связались («весь код»), даже не является полным кодом. Это заголовочный файл. –
@RobertCrovella Но с этим проектом очень сложно создать минимально рабочий пример :(Ошибка возникает только на одном определенном виде данных ... Любые предложения? – M2X
@RobertCrovella «Весь» код - это минимальная библиотека, которая вычисляет функции HoG на GPU. Репозиторий уже доступен. Также заголовочный файл действительно не является файлом заголовка. Это реализация класса шаблонов – M2X