На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> Тема про GPU
    Буэнос диас, амигос!

    Тема простая. Всем известно что в некоторых случаях вычисления на GPU дают ощутимый профит.
    Например, на сколько я знаю, при майнинге криптовалюты. Поэтому два вопроса:

    1) Есть ли библиотеки свободного доступа на С/C++, которые реализуют вычисления на GPU (Nvidia, Radeon)?
    2) Самый важный вопрос - какие алгоритмы/вычисления желательно переложить на GPU чтобы получить профит по скорости?
      Погугли OpenCL
        ^D^ima, зачет!!!
        Теперь нужно ограничить области применение. Про майнинг я ниче не знаю, а вот использование в видео-кодинге и программном сжатии - видел и наблюдал в диспетчере задач. Давай определимся, чем можно (и как) запрячь GPU?
          JoeUser
          GPU можно запрячь всем. Желательно там где у вас есть однородные данные(массивы, вектора, шаблоны, графы, строки, звук, изображение). Единственно что не имеем смысл перекладывать отдельные функции, на пересылке данных больше времени потеряете.
            Pavia, понимаю. Но какие преобразования и чего делают профит в задействовании GPU?
            Инкремент и декремент регистра, к примеру, я и на CPU произведу мастерски! :)
              Например, нейросети на GPU намного быстрее работают. https://ru.wikipedia.org/wiki/Caffe
                АЛУ - блок непосредственно занимающийся вычислениями: сложениями, умножениями, сдвигами, булевыми операциями и др.
                В ГПУ колличество блоков АЛУ больше чем в ЦПУ. Причём кратно больше 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 пока не додумались перевести. Но это от того что линейные циклы и рекурсию надо заменять пирамидальной обработкой.
                Сообщение отредактировано: Pavia -
                  Pavia, кросава!

                  А теперь прошу привести исходный текст для примера. Типа GPU-Хело-Ворлд :) Просто для ознакомления.
                    Если у Вас видеокарта 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
                      ExpandedWrap disabled
                         // 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'е, так как там много строк тут не привожу.
                      Сообщение отредактировано: Pavia -
                        Pavia, еще раз - пасиба за инфу! Бум разбираться.
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0317 ]   [ 16 queries used ]   [ Generated: 29.03.24, 13:16 GMT ]