it-swarm.com.de

Wie soll OpenCL von CUDA in Ubuntu 16.10 eingerichtet werden?

Ich versuche, ein Programm zu kompilieren, das OpenCL und CUDA und GPUs verwendet. Ich habe versucht, Nvidia-Treiber, CUDA, cuDNN, GCC und OpenCL auf meinem Ubuntu 16.10 GTX 1070-Computer zu installieren, und die meisten Dinge scheinen zu funktionieren. Ich bin mir jedoch immer noch nicht sicher, wie ich OpenCL so einrichten soll, dass ich das Programm kompilieren kann.

Auf einen Blick versuche ich, oclvanitygen zu kompilieren, ein OpenCL-Programm zum Generieren von Bitcoin-Wallets. Ich stoße auf Schwierigkeiten, wenn ich versuche, es zu kompilieren.

>git clone https://github.com/samr7/vanitygen.git
>cd vanitygen
>gcc -o  oclvanitygen oclvanitygen.c -lOpenCL
/tmp/ccPaWgka.o: In function `main':
oclvanitygen.c:(.text+0x50c): undefined reference to `vg_exec_context_new_key'
oclvanitygen.c:(.text+0x529): undefined reference to `EC_KEY_get0_group'
oclvanitygen.c:(.text+0x53e): undefined reference to `EC_POINT_hex2point'
oclvanitygen.c:(.text+0x554): undefined reference to `EC_KEY_free'
oclvanitygen.c:(.text+0x815): undefined reference to `Rand_load_file'
oclvanitygen.c:(.text+0x894): undefined reference to `vg_regex_context_new'
oclvanitygen.c:(.text+0x8b8): undefined reference to `vg_prefix_context_new'
oclvanitygen.c:(.text+0x935): undefined reference to `vg_output_match_console'
oclvanitygen.c:(.text+0x947): undefined reference to `vg_output_timing_console'
oclvanitygen.c:(.text+0x9d4): undefined reference to `vg_context_add_patterns'
oclvanitygen.c:(.text+0xa28): undefined reference to `vg_read_file'
oclvanitygen.c:(.text+0xa9c): undefined reference to `vg_prefix_context_set_case_insensitive'
oclvanitygen.c:(.text+0xabb): undefined reference to `vg_context_add_patterns'
oclvanitygen.c:(.text+0xb37): undefined reference to `vg_read_password'
oclvanitygen.c:(.text+0xb86): undefined reference to `vg_check_password_complexity'
oclvanitygen.c:(.text+0xc33): undefined reference to `vg_ocl_context_new_from_devstr'
oclvanitygen.c:(.text+0xcdc): undefined reference to `vg_ocl_context_new'
oclvanitygen.c:(.text+0xd06): undefined reference to `vg_ocl_enumerate_devices'
oclvanitygen.c:(.text+0xd1c): undefined reference to `vg_context_start_threads'
oclvanitygen.c:(.text+0xd41): undefined reference to `vg_context_wait_for_completion'
oclvanitygen.c:(.text+0xd50): undefined reference to `vg_ocl_context_free'
collect2: error: ld returned 1 exit status

Was läuft wahrscheinlich schief und wie kann ich das beheben?

Die spezifischen Details zum Einrichten des Systems sind unten aufgeführt. Ich vermute, dass es einige Schritte gibt, die ich in Bezug auf den Zugriff des Compilers auf die OpenCL-Anforderungen falsch ausgeführt habe.


Ich habe Nvidia-Treiber installiert.

Sudo add-apt-repository ppa:graphics-drivers/ppa
Sudo apt update
Sudo apt install            \
    nvidia-367              \
    nvidia-prime            \
    nvidia-modprobe         \
    nvidia-opencl-dev

Ich habe CUDA installiert.

Sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_AMD64.deb
Sudo apt-get update
Sudo apt-get install cuda

Dadurch wurde CUDA im Verzeichnis /usr/local/cuda-8.0 Installiert. Ich habe das Verzeichnis /usr/local/cuda-8.0/bin In die Umgebungsvariable PATH aufgenommen.

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}

Ich habe cuDNN installiert.

tar -xvf cudnn-8.0-linux-x64-v5.1.tgz

Das cuDNN-Archiv enthält Folgendes:

cuda/include/cudnn.h
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.5
cuda/lib64/libcudnn.so.5.1.10
cuda/lib64/libcudnn_static.a

Ich habe einige dieser Dateien in andere Verzeichnisse kopiert, weil mich das Internet dazu aufgefordert hat.

Sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include/
Sudo cp cuda/lib64/* /usr/local/cuda-8.0/lib64/

Ich habe GCC 4.9 für CUDA installiert und geändert.

Sudo apt-get install gcc-4.9 g++-4.9

ln -fs /usr/bin/gcc-4.9 /usr/bin/gcc
ln -fs /usr/bin/g++-4.9 /usr/bin/g++

OpenCL ist in CUDA enthalten. Ich habe einen symbolischen Link zu den Nvidia OpenCL-Headern im Verzeichnis /usr/include Erstellt.

Sudo ln -s /usr/include/nvidia-375/CL /usr/include

Ich habe auch die kompilierte OpenCL-Bibliotheksdatei verlinkt:

Sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/local/lib/libOpenCL.so
3

Ihr Problem scheint nicht bei OpenCL oder CUDA zu liegen, sondern bei der Art und Weise, wie Sie dieses bestimmte Projekt erstellen.

Um oclvanitygen zu erstellen, führen Sie stattdessen make oclvanitygen Aus oder erstellen Sie es manuell:

gcc -o oclvanitygen oclvanitygen.c oclengine.c pattern.c util.c -lpcre -lcrypto -lm -pthread -lOpenCL

Die undefinierten Referenzen, die in Ihrem Erstellungsfehler aufgeführt sind, wie z. B. vg_exec_context_new_key, Stammen aus Dateien im Vanitygen-Projekt selbst und nicht aus OpenCL. Fügen Sie diese Dateien daher zu den Erstellungskorrekturen hinzu.

1
Candy Gumdrop