2017-06-28 2 views
2

Ich habe gerade Debian Stretch (9) und Cuda 8 auf einem neuen GPU-Server installiert. Stretch kommt nicht mit älteren Versionen von gcc, daher muss ich clang als Host-Compiler verwenden (nvcc unterstützt gcc-6 nicht). Ich kann dies aufrufen nvcc als:Setze Standard-Host-Compiler für nvcc

nvcc -ccbin clang-3.8 

Gibt es eine Möglichkeit, dieses System weit zu erreichen - z. in cuda config oder eine Umgebungsvariable?

Antwort

1

Dokumentation von nvcc keine env Variable Liste ccbin zu ändern, nur die Option:

http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html

--compiler-bindir directory, -ccbin das Verzeichnis an, in dem der Compiler ausführbare Datei befindet sich. Der Host-Compiler-Name der ausführbaren Datei kann ebenfalls angegeben werden, um sicherzustellen, dass der richtige Host-Compiler ausgewählt ist. Auch

Linux Führer haben keine solche Informationen: http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

Sie können versuchen, einige nvcc Wrapper-Skript erstellen und es früher in der PATH-env var wie wenn man:

mkdir ~/supernvcc 
echo '#!/bin/sh' > ~/supernvcc/nvcc 
echo `which nvcc` -ccbin clang-3.8 '[email protected]' >> ~/supernvcc/nvcc 
chmod +x ~/supernvcc/nvcc 
export PATH=/home/`id -un`/supernvcc:$PATH 

(Wiederholung letzte Zeile mit export in jeder neuen Shell vor der Verwendung nvcc oder fügen Sie es zu Ihrem .bashrc oder andere Shell-Init-Skript)

PS: ein d nvcc ist zu Bash-Skript, können Sie kopieren Sie es einfach und bearbeitet:

cat `which nvcc` 

UPDATE: People recommend to link correct gcc version zum intern dir /usr/local/cuda/bin/ von CUDA:

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

Danke, obwohl zu diesen Bemühungen gehen es sein könnte arbeite nur die makefiles ändern - ich war jus hoffte es gab einen "sauberen" Weg, dies zu tun – Chris

+0

@RobertCrovella, Alias ​​funktioniert nicht für Skript-Shells von Makefiles gestartet. In Ubuntu nvcc (/ usr/bin/nvcc) von Ubuntu-Paket ist Skript, nicht überprüft Debian und/oder Nvidia-Variante des Pakets (und es gibt gcc-5/g ++ - 5 in ubuntu, die auch von nvcc unterstützt wird). 'supernvcc/nvcc' ist möglicherweise bequemer, wenn viele Makefiles vorhanden sind. – osgx

+0

Und meine Lösung ist unvollständig: Ich habe makefile (cmakefile), die nvcc mit falschem '-ccbin/usr/bin/cc' aufruft, die auf gcc-6 zeigt, nicht gcc-5 benötigt von nvcc. Und nvcc schlägt fehl, wenn zwei Optionen von "-ccbin" vorhanden sind. Also, es wird etwas besseres supernvcc/nvcc benötigt, das '$ @' aus '-ccbin' und dem nächsten Argument filtert und andere Argumente an echtes nvcc weitergibt, aber ich habe keine Kenntnis von dieser Art von Bash-Magie. – osgx

Verwandte Themen