Компилятор Cuda не работает с GCC 4.5+ - PullRequest
2 голосов
/ 22 декабря 2011

Я новичок в Cuda и пытаюсь скомпилировать этот простой test_1.cu файл:

#include <stdio.h>

__global__ void kernel(void)
{
}

int main (void)
{
    kernel<<<1,1>>>();
    printf( "Hello, World!\n");
    return 0;

}

используя это: nvcc test_1.cu

Вывод, который я получаю:

In file included from /usr/local/cuda/bin/../include/cuda_runtime.h:59:0,
                 from <command-line>:0:
/usr/local/cuda/bin/../include/host_config.h:82:2: error: #error -- unsupported GNU version! gcc 4.5 and up are not supported!

мой gcc - версия:

gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Как я могу установить вторую версию gcc (4.4 -) вместе с 4.6, не испортив все?

Я нашел эту старую тему:

CUDA несовместима с моей версией gcc

ответ был:

gcc 4.5 и 4.6 не поддерживаются в CUDA - код не компилируется и остальная часть набора инструментов, включая cuda-gdb, не будет работать должным образом. Вы не можете использовать их, и ограничение не подлежит обсуждению.

Ваше единственное решение - установить версию gcc 4.4 в качестве второй компилятор (большинство дистрибутивов позволят это). Есть возможность nvcc --compiler-bindir, который можно использовать для указания на альтернативу компилятор. Создайте локальный каталог и сделайте символические ссылки на поддерживаемые исполняемые файлы версии gcc. Передайте этот локальный каталог в nvcc через опцию --compiler-bindir, и вы сможете скомпилировать Код CUDA, не влияющий на остальную часть вашей системы.

Но я понятия не имею, как это сделать

Ответы [ 5 ]

3 голосов
/ 07 января 2013

В моем случае у меня не было прав root, поэтому я не мог полностью заменить текущую версию gcc (4.7) более старой версией 4.4 (которая, я думаю, была бы плохой альтернативой). Хотя у меня были права на установку CUDA. Мое решение состояло в том, чтобы создать дополнительную папку (например, / somepath / gccfornvcc /), где бы у меня не было прав, затем создать ссылку на компилятор, принятый nvcc. У меня уже был доступен gcc 4.4 (но вы можете установить его, не удаляя текущую версию).

ln -s [path to gcc 4.4]/gcc-4.4 /somepath/gccfornvcc/gcc

Затем в той же папке, где находится двоичный файл nvcc, вы должны найти файл с именем nvcc.profile. Там вам просто нужно добавить следующую строку:

compiler-bindir = /somepath/gccfornvcc

И это заставит nvcc использовать правильный компилятор. Это помогает поддерживать систему в надлежащем состоянии, поддерживать новейший компилятор, но nvcc (только nvcc) будет использовать старую версию компилятора.

2 голосов
/ 22 декабря 2011

Проведение некоторых онлайн-исследований показывает несколько способов выполнения этой задачи.Я только что проверил метод, найденный здесь: http://www.vectorfabrics.com/blog/item/cuda_4.0_on_ubuntu_11.04, и он работал как шарм для меня.Это пошаговое руководство по установке gcc 4.4 и созданию сценариев для запуска этой версии с nvcc.Если вы предпочитаете попробовать метод, упомянутый в вашем посте, я рекомендую перейти по этой первой ссылке для установки gcc4.4, а затем создать символические ссылки, как указано в вашем посте.Создание символических ссылок в Linux выполняется с помощью команды 'ln'.

Например:

 ln -s [source file/folder path] [linkpath]

Эта ссылка дает несколько примеров создания символических ссылок как в Ubuntu, так и в Windows: http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/. Надеюсь, это направит вас в правильном направлении.

1 голос
/ 22 декабря 2011

Полагаю, вы можете попробовать новую бета-версию , основанную на LLVM.

0 голосов
/ 29 декабря 2011

Ссылка: Я обновляю свой gcc с 4.4 до 4.6. Тогда я не мог использовать nvcc для компиляции моего кода. К счастью, с помощью метода, предоставленного по следующей ссылке. Я установил свой компилятор gcc по умолчанию обратно на gcc 4.4. Теперь я могу скомпилировать файл, используя gcc4.4 или gcc4.6. выходить круто http://ubuntuguide.net/how-to-install-and-setup-gcc-4-1g4-1-in-ubuntu-10-0410-10

0 голосов
/ 23 декабря 2011

Еще один способ заставить nvcc работать с компилятором не по умолчанию (в отличие от ответа @ Sluml, это обеспечивает большую гибкость):

Сначала, как и предлагал @Slump, вам нужно создать каталог ~/local/gcc-4.4/, а затем создать там символические ссылки для правильных версий gcc: for i in gcc gxx; do ln -s /usr/bin/${i}-4.4 ~/local/cudagcc/${i}; done. Теперь при запуске nvcc -ccbin ~/local/gcc-4.4/ ... nvcc будет использовать правильные версии gcc.

Вот небольшой фрагмент CMake, заставляющий nvcc использовать определенный компилятор хоста.

option (CUDA_ENFORCE_HOST_COMPILER "Force nvcc to use the same compiler used to compile .c(pp) files insted of gcc/g++" OFF)
if (${CUDA_ENFORCE_HOST_COMPILER})
  set (CMAKE_GCC_TEMP_DIR "CMakeGCC")
  file(MAKE_DIRECTORY ${CMAKE_GCC_TEMP_DIR})
  execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_C_COMPILER} ${CMAKE_GCC_TEMP_DIR}/gcc)
  execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CXX_COMPILER} ${CMAKE_GCC_TEMP_DIR}/g++)
  set(CUDA_NVCC_FLAGS -ccbin ${CMAKE_GCC_TEMP_DIR} ${CUDA_NVCC_FLAGS})
endif()
...