Como o OpenCL do CUDA deve ser configurado no Ubuntu 16.10?

3

Eu estou tentando compilar um programa que faz uso de OpenCL e CUDA e GPUs. Eu tentei instalar drivers Nvidia, CUDA, cuDNN, GCC e OpenCL na minha máquina Ubuntu 16.10 GTX 1070 e, na maior parte, as coisas parecem estar funcionando. No entanto, eu ainda não tenho certeza de como configurar o OpenCL para que eu possa compilar o programa.

De relance, estou tentando compilar o oclvanitygen , que é um programa OpenCL para gerar carteiras de Bitcoin. Eu me deparo com dificuldades quando tento compilá-lo.

>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

O que provavelmente está errado e como posso corrigi-lo?

Os detalhes específicos de como eu configuro o sistema estão listados abaixo. Eu estou supondo que existem alguns passos que eu fiz incorretamente no que diz respeito a deixar o compilador ter acesso ao que ele precisa do OpenCL.

Eu instalei drivers da Nvidia.

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

Eu instalei o 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

Isso instalou o CUDA no diretório /usr/local/cuda-8.0 . Eu incluí o diretório /usr/local/cuda-8.0/bin na variável de ambiente PATH.

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

Eu instalei o cuDNN.

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

O arquivo cuDNN contém o seguinte:

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

Copiei alguns desses arquivos para outros diretórios porque a Internet me disse para.

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

Eu instalei e mudei para o GCC 4.9 para CUDA.

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++

O OpenCL está incluído no CUDA. Eu criei um link simbólico para os cabeçalhos Nvidia OpenCL no diretório /usr/include .

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

Eu também vinculei ao arquivo de biblioteca OpenCL compilado:

sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/local/lib/libOpenCL.so
    
por BlandCorporation 14.03.2017 / 19:26

1 resposta

1

Seu problema não parece ser com o OpenCL ou CUDA, mas sim com a forma como você está construindo este projeto em particular.

Para criar oclvanitygen , tente executar make oclvanitygen ou construí-lo manualmente:

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

As referências indefinidas listadas no seu erro de compilação, como vg_exec_context_new_key , são de arquivos no próprio projeto vanitygen, não do OpenCL, portanto, a inclusão desses arquivos na compilação o corrige.

    
por Candy Gumdrop 14.11.2017 / 11:06