Ошибки компиляции с использованием инструментария Nvidia GPU Computing и Cygwin с Eclipse

0

Я использую Nvidia GPU Computing toolkit в Windows 7 x64 с 64-битным пакетом Cygwin и Eclipse. (Я использую внутренние инструменты сборки, потому что GNU make не любит двоеточия в путях Windows.) Мой код:

Здесь довольно простой фрагмент кода: #include #include с использованием пространства имен std;

int main() {
    cl_int error = 42;
    cl_platform_id platform;

    error = clGetPlatformIDs(1, &platform, NULL);

    return 0;
}

C++ код компилируется и работает нормально, и я могу использовать заголовки OpenCL и cl_int и cl_device_id, но с clGetPlatformID я получаю следующую ошибку компиляции:

relocation truncated to fit: R_X86_64_32 against symbol 
'__imp_clGetPlatformIDs' defined in .idata$5 section in 
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\lib
\x64/OpenCL.lib(OpenCL.dll.b)

Я пробовал следующее:

  • Удаление/переустановка инструментов Cygwin
  • Удалите/переустановите как 32-разрядные, так и 64-разрядные библиотеки в наборе инструментов Nvidia GPU Computing
  • Удалите/переустановите Eclipse и проверите большинство настроек
  • Избегая 32-битных ограничений памяти, добавив "-mcmodel = средний" или "-mcmodel = большой". (Согласно поисковым запросам, в какой-то момент смешиваются 32 и 64 битные двоичные файлы.)
  • Подтверждено, что я использую только 64-битные библиотеки Nvidia и инструменты Cygwin.

Я предполагаю, что внутренний строитель виноват, но использование этого было решением другой проблемы, которая привела к сбою сборки.

  • 0
    Поиск слова «перемещение, усеченное до соответствия» привело бы вас к stackoverflow.com/questions/10486116/… среди других ссылок.
  • 0
    Добро пожаловать в SO и короткое примечание: чтобы увеличить вероятность ответа на ваш вопрос, вам нужно сделать его кратким, чтобы его можно было быстро прочитать. Я отредактировал ваш вопрос, чтобы отразить это. Пожалуйста, просмотрите и убедитесь, что он содержит основы вашей проблемы.
Показать ещё 5 комментариев
Теги:
compiler-errors
opencl

2 ответа

1

У меня была такая же ошибка, наконец я решил эту проблему, и последнее, что я сделал, это:

1) В cygwin установите все пакеты, содержащие opencl в имени.

2) Далее, в ...\cygwin\etc\OpenCL\vendors\ vendors ...\cygwin\etc\OpenCL\vendors\ (я нашел pocl.icd там) создаю nvidia.icd и разместил там одну строку "/cygdrive/c/Windows/System32/nvopencl.dll". Аналогичные действия могут быть выполнены для драйвера Intel OpenCL.

3) Наконец, не делайте ошибок (как и я) в файле CMake. Пример рабочего кода:

cmake_minimum_required(VERSION 3.6)

set(MODULE_NAME opencl-test)

project(${MODULE_NAME})

set(CMAKE_CXX_STANDARD 14)

find_package(OpenCL)

# set include directories
include_directories(${OpenCL_INCLUDE_DIRS})

# set source files
set(SOURCE_FILES main.cpp)
add_executable(${MODULE_NAME} ${SOURCE_FILES})

# linking
target_link_libraries(${MODULE_NAME} ${OpenCL_LIBRARY})
1

У меня есть небольшое обновление об этом:

Протерте и переустановите почти все (инструментарий CUDA, Cygwin, Eclipse), и он по-прежнему дает мне ту же ошибку даже с соответствующими флагами (которые я использовал до того, как капитан Очевидный был связан с сообщением, предлагающим его).

Прогресс, который я сделал, заключается в том, что я, вероятно, обрушился на то, где проблема на самом деле. Исходя из относительных путей, проблемы с GNU не могут справиться с двоеточиями в путях. Это в основном очищает внутренний конструктор Eclipse. Тем не менее, у меня почти такая же настройка, что и на другой машине, разница в том, что эта настройка имеет карту AMD и, следовательно, использует пакет приложений AMD App SDK, а не Nvidia OpenCL.

Мое подозрение состоит в том, что это может быть ошибкой, вызванной недавно выпущенной версией 6.0 инструментария CUDA, поскольку она вводит некоторые довольно крупные обновления, такие как унифицированная память, и они, возможно, не тестировали ее так хорошо, без плагина NSight Visual Studio. В конце концов, они рекомендуют вам разрабатывать Visual Studio с этим плагином, и у меня нет (законного) доступа к Visual Studio прямо сейчас.

Редактирование: я довольно хорошо это подтвердил... Установил SDK для приложений AMD на машине Nvidia GPU, и он работает безупречно, так что, похоже, Nvidia действительно испортила OpenCL в версии 6 CUDA Toolkit. Ты знаешь, что они в конкуренции с OpenCL через CUDA, вряд ли найду это удивительным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню