web-dev-qa-db-ja.com

Ubuntu 16.10では、CUDAのOpenCLをどのように設定する必要がありますか?

OpenCL、CUDA、GPUを使用するプログラムをコンパイルしようとしています。 Ubuntu 16.10 GTX 1070マシンにNvidiaドライバー、CUDA、cuDNN、GCC、およびOpenCLをインストールしようとしましたが、ほとんどの部分が機能しているようです。ただし、プログラムをコンパイルできるようにOpenCLをセットアップする方法はまだわかりません。

一見、 oclvanitygen をコンパイルしようとしています。これは、Bitcoinウォレットを生成するためのOpenCLプログラムです。コンパイルしようとすると、問題が発生します。

>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

何が間違っている可能性があり、どのように修正できますか?

システムのセットアップ方法の具体的な詳細を以下にリストします。コンパイラーがOpenCLの必要なものにアクセスできるようにすることに関して、私が誤って行ったいくつかのステップがあると推測しています。


Nvidiaドライバーをインストールしました。

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

CUDAをインストールしました。

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

これにより、ディレクトリ/usr/local/cuda-8.0にCUDAがインストールされました。 PATH環境変数にディレクトリ/usr/local/cuda-8.0/binを含めました。

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

CuDNNをインストールしました。

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

CuDNNアーカイブには次のものが含まれます。

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

インターネットが私に言ったので、私はこれらのファイルのいくつかを他のディレクトリにコピーしました。

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

CUDA用にGCC 4.9をインストールして変更しました。

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はCUDAに含まれています。ディレクトリ/usr/includeにNvidia OpenCLヘッダーへのシンボリックリンクを作成しました。

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

コンパイル済みのOpenCLライブラリファイルにもリンクしました。

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

あなたの問題はOpenCLやCUDAにあるようには見えませんが、代わりにこの特定のプロジェクトを構築する方法に問題があります。

oclvanitygenをビルドするには、代わりにmake oclvanitygenを実行するか、手動でビルドします。

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

ビルドエラーにリストされるvg_exec_context_new_keyなどの未定義の参照は、OpenCLではなくvanitygenプロジェクト自体のファイルからのものであるため、これらのファイルをビルドに追加すると修正されます。

1
Candy Gumdrop