Tengo problemas para compilar algunos de los ejemplos enviados con CUDA SDK. He instalado el controlador de desarrolladores (versión 270.41.19) y el kit de herramientas CUDA, luego finalmente el SDK (ambas versiones 4.0.17).
Inicialmente no se 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.hy 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
A medida que se compilan algunos de los 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 momento ...
Respuestas:
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 agregando enlaces de software al directorio bin creado con la instalación de nvcc.
El directorio binario de cuda predeterminado (el predeterminado de instalación) es / usr / local / cuda / bin, agregar un enlace suave a la versión correcta de gcc desde este directorio es suficiente:
sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
fuente
nvcc
invocaciones de trabajo, pero dicen, aplicarmake
a las muestras de CUDA, pronto trae en las invocaciones a partir de:nvcc -ccbin g++
. Para mí usésudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gcc
ysudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++
.cmake .. && make
, puede intentarlocmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.4" .. && make
. Si usa simpleMakefile
, puede intentarlomake CXX=g++-4.4 CC=gcc-4.4
.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 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 haga enlaces simbólicos a los ejecutables de la versión gcc admitidos. Pase ese directorio local a nvcc a través de la--compiler-bindir
opción, y debería poder compilar el código CUDA sin afectar al resto de su sistema.EDITAR :
Tenga en cuenta que esta pregunta y respuesta pertenecen a CUDA 4.
Desde que se escribió, NVIDIA ha seguido ampliando el soporte para versiones posteriores de gcc en la versión más reciente de la cadena de herramientas CUDA.
Actualmente (a partir de CUDA 10.1) no hay soporte para gcc 9 en CUDA.
Tenga en cuenta que NVIDIA ha agregado recientemente una tabla muy útil aquí que contiene el compilador compatible y la matriz del sistema operativo para la versión actual de CUDA.
fuente
gcc 4.9.3
SLES 11 SP3 sin ningún problema.Compruebe la versión máxima de GCC admitida para su versión de CUDA:
Establezca una var env para esa versión de GCC. Por ejemplo, para CUDA 10.2:
Asegúrese de tener instalada esa versión:
Agregue enlaces simbólicos dentro de las carpetas CUDA:
(o sustitúyalo
/usr/local/cuda
por la ruta de instalación de CUDA, si no está allí)Consulte esta esencia de GitHub para obtener más información sobre la tabla de compatibilidad CUDA-GCC .
fuente
/usr/bin/gcc
y/usr/bin/g++
o/usr/local/cuda/bin/gcc
carpetas a mí mismo?cuda_10.2.89_440.33.01_linux.run
asistente de NVIDIA , que simplemente falló en tiempo de ejecución con una queja sobre la compatibilidad con gcc. Terminé decidiendo desinstalar gcc 9: Pcudatoolkit-dev
), entonces necesita vincular dentro de su env likeln -s /usr/bin/gcc-8 /home/user/miniconda3/envs/your_env/bin/gcc
yln -s /usr/bin/g++-8 /home/user/miniconda3/envs/your_env/bin/g++
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 vincularlo también:
fuente
Para CUDA7.5 estas líneas funcionan:
fuente
Vea cómo utilizar "alternativas de actualización" para solucionar este problema:
fuente
Si no usé
cmake
para mí ninguno de los trucos para editar los archivos y vincular funcionó, entonces compilé usando las banderas que especifican la versión gcc / g ++.cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..
Funcionó a la perfección.
fuente
En la mayoría de las distribuciones, tiene la posibilidad de instalar otra versión de gcc y g ++ junto al compilador más reciente como gcc-4.7. Además, la mayoría de los sistemas de compilación son conscientes de las variables de entorno
CC
yCXX
, que le permiten especificar otros compiladores de C y C ++ respectivamente. Entonces sugiero algo como:Para Makefiles debería haber una forma similar. No recomiendo establecer enlaces simbólicos personalizados dentro de / usr / local a menos que sepa lo que está haciendo.
fuente
Esto funciona para fedora 23. Los repositorios de compat gcc serán ligeramente diferentes según su versión de fedora.
Si instala los siguientes repositorios:
Ahora haga los enlaces suaves como se mencionó anteriormente, asumiendo que su carpeta cuda bin está en
/usr/local/cuda/
Ahora debería poder compilar
nvcc
sin el error de versión gcc.fuente
La solución de Gearoid Murphy funciona de maravilla. Para mí tenía dos directorios para cuda -
Los enlaces suaves tenían que agregarse solo al directorio mencionado a continuación:
Además, se requerían enlaces blandos g ++ y gcc como lo menciona SchighSchagh.
fuente
Otra forma de configurar nvcc para usar una versión específica de gcc (gcc-4.4, por ejemplo) es editar nvcc.profile y alterar PATH para incluir la ruta al gcc que desea usar primero.
Por ejemplo (gcc-4.4.6 instalado en / opt):
La ubicación de nvcc.profile varía, pero debería estar en el mismo directorio que el propio ejecutable nvcc .
Esto es un truco, ya que nvcc.profile no está diseñado para la configuración del usuario según el manual de nvcc, pero fue la solución que mejor funcionó para mí.
fuente
mkdir /usr/local/bin/cuda-hack && ln -s /usr/bin/g++-5 /usr/local/bin/cuda-hack
CUDA es después de algunas modificaciones de encabezado compatible con gcc4.7 y tal vez una versión superior: https://www.udacity.com/wiki/cs344/troubleshoot_gcc47
fuente
Para las personas como yo que se confunden mientras usan
cmake
, elFindCUDA.cmake
script anula algunas de las cosas denvcc.profile
. Puede especificar elnvcc
compilador de host configurandoCUDA_HOST_COMPILER
según http://public.kitware.com/Bug/view.php?id=13674 .fuente
cmake .. -DCMAKE_INSTALL_PREFIX=/InstallPos_GPU/ -DCMAKE_C_COMPILER="/gcc-8.3.0/bin/gcc" -DCMAKE_CXX_COMPILER="/gcc-8.3.0/bin/g++" -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/cuda-7.5/ -D NVCCFLAGS=" -ccbin /cuda-7.5/bin/" -DCUDA_HOST_COMPILER=/cuda-7.5/bin/gcc
He instalado correctamente los gromacs compatibles con GPU.Tuve que instalar las versiones anteriores de gcc, g ++.
Verifique que gcc-4.4 esté en / usr / bin /, y lo mismo para g ++ Entonces podría usar la solución anterior:
fuente
En
$CUDA_HOME/include/host_config.h
, busque líneas como estas (pueden variar ligeramente entre diferentes versiones de CUDA):Quítelos o cámbielos que coincidan con su condición.
Tenga en cuenta que este método es potencialmente inseguro y puede romper su compilación. Por ejemplo, gcc 5 usa C ++ 11 por defecto, sin embargo, este no es el caso para nvcc a partir de CUDA 7.5. Una solución alternativa es agregar
--Xcompiler="--std=c++98"
para CUDA <= 6.5o
--std=c++11
para CUDA> = 7.0.fuente
--std=c++
opción?Si encuentra este error, lea el archivo de registro:
Simplemente siga la sugerencia en el archivo de registro:
Trabajo hecho :)
Acabo de instalar CUDA 10.2 con gcc 9.2 en Kubuntu 19.10 usando la
--override
opción.fuente
Para compilar los ejemplos de CUDA 8.0 en Ubuntu 16.10, hice:
Esto tiene la ventaja de no modificar todo el sistema o hacer enlaces simbólicos solo a los binarios (lo que podría causar problemas de vinculación de bibliotecas).
fuente
Esto resolvió mi problema:
fuente
Para CUDA 6.5 (y aparentemente 7.0 y 7.5), he creado una versión del paquete gcc 4.8.5 RPM (bajo Fedora Core 30) que permite que esa versión de gcc se instale junto con el GCC actual de su sistema.
Puedes encontrar toda esa información aquí .
fuente
En mi caso, ya tenía CUDA instalado desde la versión de Ubuntu y cmake lo detectaría en lugar de la versión recién instalada usando NVidia SDK Manager.
Corrí
dpkg -l | grep cuda
y pude ver ambas versiones.Lo que tuve que hacer fue desinstalar el antiguo CUDA (versión 9.1 en mi caso) y dejar la nueva versión sola (versión 10.2). Usé el comando de purga así:
Verifique que los nombres de los paquetes coincidan con la versión que desea eliminar de su instalación.
Tuve que volver a ejecutar
cmake
desde unBUILD
directorio en blanco para redirigir todas las#include
bibliotecas y a la versión SDK (ya que las rutas antiguas se crearon en el entorno de compilación existente).fuente
Esto sucede porque su versión actual de CUDA no es compatible con su versión actual de GCC. Debes hacer lo siguiente:
Encuentre la versión de GCC compatible (en mi caso 5 para CUDA 9)
Instale la versión de GCC compatible
Cambie los enlaces suaves para GCC en el
/usr/bin
directorioCambie los enlaces suaves para GCC en el
/usr/local/cuda-9.0/bin
directorioAgregar
-DCUDA_HOST_COMPILER=/usr/bin/gcc-5
a susetup.py
archivo, utilizado para la compilaciónEliminar el directorio de compilación anterior
Compilar de nuevo configurando
CUDAHOSTCXX=/usr/bin/gcc-5
Nota: Si sigue apareciendo el
gcc: error trying to exec 'cc1plus': execvp: no such file or directory
error después de seguir estos pasos, intente reinstalar el GCC de esta manera y luego compile nuevamente:Créditos: https://github.com/facebookresearch/maskrcnn-benchmark/issues/25#issuecomment-433382510
fuente