Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[54.91.19.62] |
|
Сообщ.
#1
,
|
|
|
Буэнос диас, амигос!
Тема простая. Всем известно что в некоторых случаях вычисления на GPU дают ощутимый профит. Например, на сколько я знаю, при майнинге криптовалюты. Поэтому два вопроса: 1) Есть ли библиотеки свободного доступа на С/C++, которые реализуют вычисления на GPU (Nvidia, Radeon)? 2) Самый важный вопрос - какие алгоритмы/вычисления желательно переложить на GPU чтобы получить профит по скорости? |
Сообщ.
#2
,
|
|
|
Погугли OpenCL
|
Сообщ.
#3
,
|
|
|
^D^ima, зачет!!!
Теперь нужно ограничить области применение. Про майнинг я ниче не знаю, а вот использование в видео-кодинге и программном сжатии - видел и наблюдал в диспетчере задач. Давай определимся, чем можно (и как) запрячь GPU? |
Сообщ.
#4
,
|
|
|
JoeUser
GPU можно запрячь всем. Желательно там где у вас есть однородные данные(массивы, вектора, шаблоны, графы, строки, звук, изображение). Единственно что не имеем смысл перекладывать отдельные функции, на пересылке данных больше времени потеряете. |
Сообщ.
#5
,
|
|
|
Pavia, понимаю. Но какие преобразования и чего делают профит в задействовании GPU?
Инкремент и декремент регистра, к примеру, я и на CPU произведу мастерски! |
Сообщ.
#6
,
|
|
|
Например, нейросети на GPU намного быстрее работают. https://ru.wikipedia.org/wiki/Caffe
|
Сообщ.
#7
,
|
|
|
АЛУ - блок непосредственно занимающийся вычислениями: сложениями, умножениями, сдвигами, булевыми операциями и др.
В ГПУ колличество блоков АЛУ больше чем в ЦПУ. Причём кратно больше 2, 4, 8, 16, 32 раза. За счёт этого прирост в скорости. Он за секунду делает больше операций. Минус больше энергопотребление. Средний ЦПУ 75-150 средний ГПУ 75-450 кВт. Тут разница в 5 рааз. А далее частные ускорения. Одно время NVidia лидировала на числах Double что нужно для научных рассчётов. Сейчас напротив для ИИ чем числа меньше тем быстрее. переход от single к Half Single. даёт 5 кратный прирост скорости. Совмещение умножения со сложение в одной команде MulAdd, в ЦПУ добавили чуть позже чем в ГПУ поэтому ATI-AMD ГПУ был быстрее конкурентов. Первые GpGPU занимались решением матричных уравнений ещё 2000 них годах.. ЦПУ'шная библиотека BLAS была переписана на Cuda получилась cuBlas. А так же БПФ (cuFFT)- это фильтрация, томография, радары, радио обработка звука. Потом начали делать сортировку. За счёт шины памяти у видео карты 128 до 720 более высокая производительность памяти чем у ЦПУ. Поэтому после БПФ сделали быструю сортировку чисел. Поэтому некоторые умельцы мастерили сервера для защиты от DDoS атак на ГПУ. Так как быстрее можно расшифровать текст и быстрее его проверить. Потом графы. Затем оптимизировать декодирования видео. Затем ускорили рендеринг в 3D-CAD и САПРах (к примеру Cyclea). А потом рендеринг текста (). Потом OpenCV перевели на Gpu. Затем ИИ TensorFlow. Обработку текста на GPU пока не додумались перевести. Но это от того что линейные циклы и рекурсию надо заменять пирамидальной обработкой. |
Сообщ.
#8
,
|
|
|
Pavia, кросава!
А теперь прошу привести исходный текст для примера. Типа GPU-Хело-Ворлд Просто для ознакомления. |
Сообщ.
#9
,
|
|
|
Если у Вас видеокарта AMD то ставите APP SDK 3 https://community.amd.com/thread/220978
Если у Вас видеокарта NVidia то ставите CUDA Toolkit https://developer.nvidia.com/cuda-downloads Примеры лучше брать у NVidia. Вот вам сложение векторов это как раз Ваш GPU-Хело-Ворлд https://github.com/sschaetz/nvidia-opencl-e...rc/oclVectorAdd |
Сообщ.
#10
,
|
|
|
// OpenCL Kernel Function for element by element vector addition __kernel void VectorAdd(__global const float* a, __global const float* b, __global float* c, int iNumElements) { // get index into global data array int iGID = get_global_id(0); // bound check (equivalent to the limit on a 'for' loop for standard/serial C code if (iGID >= iNumElements) {return;} // add the vector elements c[iGID] = a[iGID] + b[iGID]; } На форуме подсветки синтаксиса ocl нету поэтому поставил cpp. Что-бы этот код заработал его и данные нужно загрузить в GPU пример загрузки oclVectorAdd.cpp лежит на на git'е, так как там много строк тут не привожу. |
Сообщ.
#11
,
|
|
|
Pavia, еще раз - пасиба за инфу! Бум разбираться.
|