Библиотеки. GPGPU
Расположение библиотеки CUDA:
10.1 | /usr/local/CUDA/10.1.105/ |
9.0 | /usr/local/cuda/ |
8.0 | /usr/local/CUDA/8.0 |
7.0 | /usr/local/CUDA/7.0 |
6.0 | /usr/local/CUDA/6.0 |
Поддержка в компиляторах:
Технология | Язык | Компилятор |
CUDA | CUDA C | Nvidia: nvcc |
CUDA Fortran | PGI: pgfortran | |
OpenCL | OpenCL C | Nvidia: clcc |
OpenACC | C, C++ и Fortran | PGI, GCC (>= 5.0) |
Содержание:
GPGPU (англ. General-purpose computing for graphics processing units, неспециализированные вычисления на графических процессорах) — техника использования графического процессора видеокарты, который обычно имеет дело с вычислениями только для компьютерной графики, чтобы выполнять расчёты в приложениях для общих вычислений, которые обычно проводит центральный процессор. Это стало возможным благодаря добавлению программируемых шейдерных блоков и более высокой арифметической точности растровых конвейеров, что позволяет разработчикам ПО использовать потоковые процессоры для не-графических данных.
Реализации:
1) CUDA — технология GPGPU, позволяющая программистам реализовывать на языке программирования Си (а также C++/C#) алгоритмы, выполнимые на графических процессорах ускорителей GeForce восьмого поколения и новее. Технология CUDA разработана компанией Nvidia.
3) OpenCL - является языком программирования задач, связанных с параллельными вычислениями на различных графических и центральных процессорах.
5) OpenACC — стандарт, описывающий набор директив для написания гетерогенных программ, задействующих как центральный, так и графический процессор. Используется для распараллеливания программ на языках C, C++ и Fortran. Стандарт был создан группой, в которую вошли CAPS, Cray, NVIDIA и PGI.
CUDA SDK позволяет программистам реализовывать на специальном упрощённом диалекте языка программирования Си алгоритмы, выполнимые на графических процессорах Nvidia, и включать специальные функции в текст программы на Си. Архитектура CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического ускорителя и управлять его памятью.
1) Оф. сайт
OpenCL (от англ. Open Computing Language — открытый язык вычислений) — фреймворк для написания компьютерных программ, связанных с параллельными вычислениями на различных графических и центральных процессорах, а также FPGA. В OpenCL входят язык программирования, который основан на стандарте языка программирования Си C99, и интерфейс программирования приложений. OpenCL обеспечивает параллелизм на уровне инструкций и на уровне данных и является осуществлением техники GPGPU. OpenCL является полностью открытым стандартом, его использование не облагается лицензионными отчислениями.
1) Оф. сайт
OpenACC (от англ. Open Accelerators) — программный стандарт для параллельного программирования, разрабатываемый совместно компаниями Cray, CAPS, Nvidia и PGI. Стандарт описывает набор директив компилятора, предназначенных для упрощения создания гетерогенных параллельных программ, задействующих как центральный, так и графический процессор[1][2].
Как и более ранний стандарт OpenMP, OpenACC используется для аннотирования фрагментов программ на языках C, C++ и Fortran. С помощью набора директив компилятора программист отмечает участки кода, которые следует выполнять параллельно или на графическом процессоре, обозначает какие из переменных являются общими, а какие индивидуальными для потока и т. п[3]. По синтаксису схож с OpenMP[4]. Стандарт OpenACC позволяет программисту абстрагироваться от особенностей инициализации графического процессора, вопросов передачи данных на сопроцессор и обратно и т. д.
1) Оф. сайт
2) Стандарт
$ CUDA_PATH=/usr/local/cuda
$ CUDA_TEST_PATH=$CUDA_PATH/samples/1_Utilities/bandwidthTest/
$ export PATH=/usr/local/cuda/bin/:$PATH
$ CUDA_INC_PATH=/usr/local/cuda/samples/common/inc
$
$ nvcc $CUDA_TEST_PATH/bandwidthTest.cu -I$CUDA_INC_PATH
$
$ ./a.out
[CUDA Bandwidth Test] - Starting...
Running on...
Device 0: Tesla K40m
Quick Mode
Host to Device Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 10152.7
Device to Host Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 10269.2
Device to Device Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 183668.1
Result = PASS
NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.
$