TL; DR - GCC (gövde) zaten OpenPO 4.0 boşaltma işlemini nVidia GPU'ya destekliyor mu?GCC'de OpenMP 4.0: nVidia GPU'ya aktarma
Eğer öyleyse, ne yapıyorum yanlış? (aşağıdaki açıklama).
Ben Ubuntu 14.04.2 LTS koşuyorum.
En son GCC trunk numaralı telefonu (25 Mart 2015 tarihli) kontrol ettim.
Getting Started on Ubuntu kılavuzuna göre CUDA 7.0 araç setini yükledim. CUDA numuneleri başarıyla çalıştırmak, yani deviceQuery
ben https://gcc.gnu.org/wiki/Offloading talimat yanı https://gcc.gnu.org/install/specific.html#nvptx-x-none
gibi nvptx-araçları ve nvptx-newlib (configure
, make
yüklemiş izlemiş 730.
benim GeForce GT algılar , sudo make install
), newlib ayrıca GCC'nin gövde dizinine ln -s
ile bağlanmıştır.
../../trunk/configure --target=nvptx-none --enable-as-accelerator-for=x86_64-pc-linux-gnu --with-build-time-tools=/usr/local/nvptx-none/bin --disable-sjlj-exceptions --enable-newlib-io-long-long
make -j 9
sudo make install DESTDIR=/install
... ve konak GCC derleyici kendisi: Ben LD_LIBRARY_PATH belirledik
../trunk/configure --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu --enable-offload-targets=nvptx-none=/install/prefix --with-cuda-driver=/usr/local/cuda --enable-languages=c,c++
make -j 9
sudo make install DESTDIR=/install
Sonra hedef hızlandırıcı nvptx-hiçbiri derleyici inşa buna göre:
export LD_LIBRARY_PATH=/install/usr/local/lib64:/install/usr/local/lib/gcc/nvptx-none/5.0.0/:/usr/local/cuda/lib64:$LD_LIBRARY_PATH
Elbette
, mkoffload aracı oluşturulmuştur:
/install/usr/local/libexec/gcc/x86_64-pc-linux-gnu/5.0.0/accel/nvptx-none/mkoffload
yanı hedef ve ana derleyiciler orada:
/install/usr/local/bin/x86_64-pc-linux-gnu-gcc
/install/usr/local/bin/x86_64-pc-linux-gnu-accel-nvptx-none-gcc
Ama sayısını sorgulayan bir örnek kod derleme yaparken omp_get_num_devices()
numaralı aygıtlara yanıt veririm, yanıt 0
:
$ /install/usr/local/bin/x86_64-pc-linux-gnu-gcc -fopenmp -foffload=nvptx-none main.c
$ ./a.out
0
Ben hedef derleyici'nın seçeneklerine
-v
(ayrıntılı) seçeneği eklediğinizde
, aşağıdaki çıktıyı almak:
$ /install/usr/local/bin/x86_64-pc-linux-gnu-gcc -fopenmp -foffload=nvptx-none="-v" main.c
Using built-in specs.
COLLECT_GCC=/install/usr/local/bin/x86_64-pc-linux-gnu-accel-nvptx-none-gcc
Target: nvptx-none
Configured with: ../../trunk/configure --target=nvptx-none --enable-as-accelerator-for=x86_64-pc-linux-gnu --with-build-time-tools=/usr/local/nvptx-none/bin --disable-sjlj-exceptions --enable-newlib-io-long-long
Thread model: single
gcc version 5.0.0 20150325 (experimental) (GCC)
COLLECT_GCC_OPTIONS='-m64' '-S' '-fmath-errno' '-fsigned-zeros' '-ftrapping-math' '-fno-trapv' '-fno-strict-overflow' '-fno-openacc' '-foffload-abi=lp64' '-fopenmp' '-v' '-v' '-o' '/tmp/cccxIggp.mkoffload'
/install/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/5.0.0/accel/nvptx-none/lto1 -quiet -dumpbase ccKOW9hi.o -m64 -auxbase-strip /tmp/cccxIggp.mkoffload -version -fmath-errno -fsigned-zeros -ftrapping-math -fno-trapv -fno-strict-overflow -fno-openacc -foffload-abi=lp64 -fopenmp -o /tmp/cccxIggp.mkoffload @/tmp/ccjRDWhp
GNU GIMPLE (GCC) version 5.0.0 20150325 (experimental) (nvptx-none)
compiled by GNU C version 5.0.0 20150325 (experimental), GMP version 5.1.3, MPFR version 3.1.2-p3, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
GNU GIMPLE (GCC) version 5.0.0 20150325 (experimental) (nvptx-none)
compiled by GNU C version 5.0.0 20150325 (experimental), GMP version 5.1.3, MPFR version 3.1.2-p3, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
COMPILER_PATH=/install/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/5.0.0/accel/nvptx-none/:/install/usr/local/bin/../libexec/gcc/
LIBRARY_PATH=/install/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/5.0.0/accel/nvptx-none/:/install/usr/local/bin/../lib/gcc/
COLLECT_GCC_OPTIONS='-m64' '-S' '-fmath-errno' '-fsigned-zeros' '-ftrapping-math' '-fno-trapv' '-fno-strict-overflow' '-fno-openacc' '-foffload-abi=lp64' '-fopenmp' '-v' '-v' '-o' '/tmp/cccxIggp.mkoffload'
yüzden araç zinciri çağrılan ve .mkoffload
dosyaları oluşturulur olduğunu görünüyor.
Yardım edin. Eğer işe yarayacaksa, neyin yanlış olduğunu nasıl teşhis edebilirim?
Tamamen işlevsel bir CUDA yüklemeniz var mı? – talonmies
@talonmies CUDA örnekleri nvidia GPU –
'umu başarıyla algılamaya çalıştı. Üzgünüm, ama sormam gerekiyordu. İnsanların buraya kodlarının neden işe yaramadığını ve kök nedeninin işlevsel bir CUDA kurulumuna sahip olmadıklarını sormak için buraya kaç kez geldiğine inanmazsınız. – talonmies