gcc cuda debian

gcc - uninstall cuda ubuntu



CUDA incompatible con mi versiĆ³n de gcc (15)

CUDA busca algunas modificaciones en el encabezado compatibles con gcc4.7 y quizás una versión superior: https://www.udacity.com/wiki/cs344/troubleshoot_gcc47

Tengo problemas para compilar algunos de los ejemplos enviados con CUDA SDK. He instalado el controlador de los desarrolladores (versión 270.41.19) y el kit de herramientas CUDA, y finalmente el SDK (ambos versión 4.0.17).

Inicialmente no compiló en absoluto dando:

error -- unsupported GNU version! gcc 4.5 and up are not supported!

Encontré la línea responsable en 81: /usr/local/cuda/include/host_config.h y la cambié a:

//#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4) #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)

a partir de ese momento obtuve solo algunos de los ejemplos para compilar, se detiene con:

In file included from /usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr.h:162:0, from /usr/include/c++/4.6/ext/atomicity.h:34, from /usr/include/c++/4.6/bits/ios_base.h:41, from /usr/include/c++/4.6/ios:43, from /usr/include/c++/4.6/ostream:40, from /usr/include/c++/4.6/iterator:64, from /usr/local/cuda/include/thrust/iterator/iterator_categories.h:38, from /usr/local/cuda/include/thrust/device_ptr.h:26, from /usr/local/cuda/include/thrust/device_malloc_allocator.h:27, from /usr/local/cuda/include/thrust/device_vector.h:26, from lineOfSight.cu:37: /usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr-default.h:251:1: error: pasting "__gthrw_" and "/* Android''s C library does not provide pthread_cancel, check for `pthread_create'' instead. */" does not give a valid preprocessing token make[1]: *** [obj/x86_64/release/lineOfSight.cu.o] Error 1

Como se compilan algunos ejemplos, creo que esto no es un problema de controlador, sino que debe tener algo que ver con una versión de gcc no compatible. La degradación no es una opción ya que gcc4.6 tiene un sistema completo como dependencia en este punto ...


Como ya se señaló, nvcc depende de gcc 4.4. Es posible configurar nvcc para usar la versión correcta de gcc sin pasar ningún parámetro del compilador añadiendo softlinks al directorio bin creado con la instalación de nvcc.

El directorio binario predeterminado de cuda (el valor predeterminado de instalación) es / usr / local / cuda / bin, y es suficiente con agregar un enlace a la versión correcta de gcc desde este directorio:

sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc


Consulte cómo usar "update-alternatives" para evitar este problema:

... Si instala gcc 4.6 también puede usar el comando update-alternatives para permitir cambiar fácilmente entre versiones. Esto se puede configurar con:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 sudo update-alternatives --config gcc


En $CUDA_HOME/include/host_config.h , busque líneas como estas (puede variar ligeramente entre las diferentes versiones de CUDA):

//... #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9) #error -- unsupported GNU version! gcc versions later than 4.9 are not supported! #endif [> __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9) <] //...

Quítelos o cámbielos de acuerdo con su condición.

Tenga en cuenta que este método es potencialmente inseguro y puede romper su construcción. Por ejemplo, gcc 5 usa C ++ 11 como predeterminado, sin embargo, este no es el caso para nvcc a partir de CUDA 7.5. Una solución es agregar

--Xcompiler="--std=c++98" para CUDA <= 6.5

o

--std=c++11 para CUDA> = 7.0.


En la mayoría de las distribuciones tiene la posibilidad de instalar otra versión de gcc y g ++ junto a un compilador más reciente como gcc-4.7. Además, la mayoría de los sistemas de compilación conocen las variables de entorno CC y CXX , que permiten especificar otros compiladores C y C ++, respectivamente. SO sugiero algo como:

CC=gcc-4.4 CXX=g++-4.4 cmake path/to/your/CMakeLists.txt

Para Makefiles debería haber una manera similar. No recomiendo establecer enlaces simbólicos personalizados en / usr / local a menos que sepa lo que está haciendo.


Esto funciona para fedora 23. Los repositorios de compat gcc serán ligeramente diferentes en función de su versión de fedora.

Si instala los siguientes repositorios:

sudo yum install compat-gcc-34-c++-3.4.6-37.fc23.x86_64 compat-gcc-34-3.4.6-37.fc23.x86_64

Ahora haga los enlaces suaves como se mencionó anteriormente, suponiendo que su carpeta cuda bin está en /usr/local/cuda/

sudo ln -s /usr/bin/gcc-34 /usr/local/cuda/bin/gcc sudo ln -s /usr/bin/g++-34 /usr/local/cuda/bin/g++

Ahora debería poder compilar con nvcc sin el error de versión de gcc.


La solución de Gearoid Murphy funciona como un encanto. Para mí tenía dos directorios para cuda -

/usr/local/cuda /usr/local/cuda-5.0

Los enlaces suaves deben agregarse solo al directorio mencionado a continuación:

/usr/local/cuda

Además, se requirieron enlaces blandos g ++ y gcc como menciona SchighSchagh.


La solución de Gearoid Murphy funciona mejor para mí ya que en mi distribución (Ubuntu 11.10), gcc-4.4 y gcc-4.6 están en el mismo directorio, por lo que --compiler-bindir no es de ayuda. La única advertencia es que también tuve que instalar g ++ - 4.4 y también hacer un enlace simbólico:

sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc sudo ln -s /usr/bin/g++-4.4 /usr/local/cuda/bin/g++


Otra forma de configurar nvcc para usar una versión específica de gcc (gcc-4.4, por ejemplo) es editar nvcc.profile y modificar PATH para incluir primero la ruta al gcc que desea usar.

Por ejemplo (gcc-4.4.6 instalado en / opt):

PATH += /opt/gcc-4.4.6/lib/gcc/x86_64-unknown-linux-gnu/4.4.6:/opt/gcc-4.4.6/bin:$(TOP)/open64/bin:$(TOP)/share/cuda/nvvm:$(_HERE_):

La ubicación de nvcc.profile varía, pero debe estar en el mismo directorio que el ejecutable nvcc .

Esto es un poco complicado , ya que nvcc.profile no está diseñado para la configuración del usuario según el manual nvcc, pero fue la solución que mejor funcionó para mí.


Para CUDA7.5 estas líneas funcionan:

sudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gcc sudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++


Para compilar los ejemplos de CUDA 8.0 en Ubuntu 16.10, hice:

sudo apt-get install gcc-5 g++-5 cd /path/to/NVIDIA_CUDA-8.0_Samples # Find the path to the library (this should be in NVIDIA''s Makefiles) LIBLOC=`find /usr/lib -name "libnvcuvid.so.*" | head -n1 | perl -pe ''s[/usr/lib/(nvidia-/d+)/.*][$1]''` # Substitute that path into the makefiles for the hard-coded, incorrect one find . -name "*.mk" | xargs perl -pi -e "s/nvidia-/d+/$LIBLOC/g" # Make using the supported compiler HOST_COMPILER=g++-5 make

Esto tiene la ventaja de no modificar todo el sistema o hacer enlaces simbólicos solo a los binarios (que podrían causar problemas de vinculación de bibliotecas).


Para personas como yo que se confunden al utilizar cmake , el script FindCUDA.cmake anula algunas de las cosas de nvcc.profile . Puede especificar el compilador de host CUDA_HOST_COMPILER configurando CUDA_HOST_COMPILER según http://public.kitware.com/Bug/view.php?id=13674 .


Tuve que instalar las versiones anteriores de gcc, g ++.

sudo apt-get install gcc-4.4 sudo apt-get install g++-4.4

Verifique que gcc-4.4 esté en / usr / bin / y lo mismo para g ++ Entonces podría usar la solución anterior:

sudo ln -s /usr/bin/gcc-4.4 /opt/cuda/bin/gcc sudo ln -s /usr/bin/g++-4.4 /opt/cuda/bin/g++


gcc 4.5 y 4.6 no son compatibles con CUDA: el código no se compilará y el resto de la cadena de herramientas, incluido cuda-gdb, no funcionará correctamente. No puede usarlos, y la restricción no es negociable.

Su única solución es instalar una versión de gcc 4.4 como un segundo compilador (la mayoría de las distribuciones lo permitirán). Existe una opción para nvcc --compiler-bindir que se puede usar para apuntar a un compilador alternativo. Cree un directorio local y luego cree enlaces simbólicos a los ejecutables de la versión compatible con gcc. Pase ese directorio local a nvcc a través de la opción --compiler-bindir , y usted debería poder compilar el código CUDA sin afectar el resto de su sistema.

EDITAR :

Tenga en cuenta que esta pregunta y respuesta pertenecen a CUDA 4. Desde su creación, NVIDIA ha seguido ampliando el soporte para versiones posteriores de gcc en la versión más reciente de CUDA Toolchain.

  • A partir de la versión CUDA 4.1, ahora se admite gcc 4.5. gcc 4.6 y 4.7 no son compatibles.
  • A partir de la versión CUDA 5.0, ahora se admite gcc 4.6. gcc 4.7 no es compatible.
  • A partir de la versión CUDA 6.0, gcc 4.7 ahora es compatible.
  • A partir de la versión CUDA 7.0, gcc 4.8 es totalmente compatible, con soporte 4.9 en Ubuntu 14.04 y Fedora 21.
  • A partir de la versión CUDA 7.5, gcc 4.8 es totalmente compatible, con soporte 4.9 en Ubuntu 14.04 y Fedora 21.
  • A partir de la versión CUDA 8, gcc 5.3 es totalmente compatible con Ubuntu 16.06 y Fedora 23.
  • A partir de la versión CUDA 9, gcc 6 es totalmente compatible con Ubuntu 16.04, Ubuntu 17.04 y Fedora 25.

En la actualidad, (a partir de CUDA 9) no hay compatibilidad gcc 7 en CUDA.

Tenga en cuenta que NVIDIA ha agregado recientemente una tabla muy útil que contiene el compilador compatible y la matriz del sistema operativo para la versión actual de CUDA.


Actualizar:

Para CUDA 9:

sudo ln -s /usr/bin/gcc-6 /usr/local/cuda/bin/gcc sudo ln -s /usr/bin/g++-6 /usr/local/cuda/bin/g++

Primero debe tener gcc y g ++ 6 instalados:

sudo apt install gcc-6 g++-6

Respuesta anterior:

Para CUDA 8:

sudo ln -s /usr/bin/gcc-5 /usr/local/cuda/bin/gcc sudo ln -s /usr/bin/g++-5 /usr/local/cuda/bin/g++

Primero debe tener gcc y g ++ 5 instalados:

sudo apt install gcc-5 g++-5