Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677

GPGPU

09.03.2014, 22:19. Показов 814. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите какую из существующих вариантов реализации стоит изучать?

Мне нужны только сложение, вычитание, умножение и (к сожалению) условия.

Кстати, будет ли прирост скорости и значительный ли при расчётах на GPU, если вместо условных переходов использовать что-то такое:

вместо
C++
1
if(x<0)x*=(-1);
это
C++
1
x+=(-x)*2*(x<0);
Ясно, что нахождение числа по модулю - простой пример, который ЦП выполнит быстрее в первом случае, а вот когда это вычисляется миллионами на архитектуре, которая не очень дружит с ветвлениями?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.03.2014, 22:19
Ответы с готовыми решениями:

Графические вычисления (GPGPU)
Как мне на видеокарте запустить такой код (тоесть чтобы исполняла видеокарта, а не ЦП): #include &lt;iostream&gt; int main...

#Вычисления на GPU (GPGPU - вычислений на видеокартах): CUDA, OpenCL, AMD APP и DirectCompute
GPGPU («GPU общего назначения») — техника использования графического процессора видеокарты для общих вычислений, которые обычно проводит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
10.03.2014, 00:32
общим стандартом для всех gpu является opencl. Но также есть и более специфичные библиотеки, разрабатываемые для конкретных gpu: для nvidia это cuda, для amd - bolt. Есть альтернатива и от microsoft - amp. Так что выбор зависит от конкретных целей и то, на чём будет применяться приложение.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.03.2014, 00:35
На всякий случай. Семантика второго выражения точно так же имеет ветвление
1
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
10.03.2014, 01:34  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
На всякий случай. Семантика второго выражения точно так же имеет ветвление
Согласен.
cmp reg,0 или test reg? Или в граф. процессорах нет аналогов?

Добавлено через 17 минут
C++
1
2
x=x>>31;
x=x&1;
Битовые сдвиги и OR XOR END-ы в GPU есть?

Добавлено через 15 минут
Цитата Сообщение от _lunar_ Посмотреть сообщение
общим стандартом для всех gpu является opencl
Где-то читал, что пока производители карт тянут одеяло на себя и что "стандартный" openCL пока не особо поддерживается...не знаю на сколько это правда.
Цитата Сообщение от _lunar_ Посмотреть сообщение
выбор зависит от конкретных целей и то, на чём будет применяться приложение
хочу перенести игровой движок на GPU. Там не стандартный подход к представлению 3-d мира, так что обычные OpenGL, DX не подходят. Мне нужна простейшая математика(+,-,*), считающая массив rgba и его отображение на экран. У меня nVidia GeForce 8...но, пожалуй, от того, что моя игра будет работать и на других видеокартах я плакать не буду =)
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
10.03.2014, 10:18
Цитата Сообщение от Evg Посмотреть сообщение
Семантика второго выражения точно так же имеет ветвление.
Проверяли или предполагаете? А то хорошо бы проверить оба, мало ли что там компилятор наоптимизирует.

Добавлено через 5 минут
Цитата Сообщение от Retyrn0 Посмотреть сообщение
if(x<0)x*=(-1);
Конкретно в этом случае лучше всё же использовать специализированную функцию графического процессора abs. Уж её-то точно реализовывали "в железе" так, чтобы она работала с наибольшей скоростью.
1
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
10.03.2014, 12:53  [ТС]
Цитата Сообщение от Nick Alte Посмотреть сообщение
в этом случае лучше всё же использовать специализированную функцию графического процессора abs
Спасибо, буду знать. На CPU, например, abs() работает медленнее(у меня). Вероятно из-за времени на вызов функции. Но это просто пример, который мне пришёл в голову. Уверен, Вы правильно поняли что я имею ввиду. Будет ли ускорение, если ветвления преобразовать в математику?
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
10.03.2014, 14:52
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Будет ли ускорение, если ветвления преобразовать в математику?
Вот это, кстати, надо измерять. У графических процессоров архитектура кардинально отличается от сложной и универсальной архитектуры процессоров общего назначения. Там может просто не оказаться хитрых "приспособ" вроде предсказателей ветвления и прочего. И многие советы и рекомендации по увеличению производительности, работающие на центральном процессоре, могут оказаться бесполезными или даже вредными на процессоре графическом.
Так что любую оптимизацию лучше измерять, это самый надёжный способ. А ещё лучше оставить при себе "измерялку" и при обновлении аппаратной части перемерить. Результаты могут оказаться весьма любопытными.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.03.2014, 15:16
Цитата Сообщение от Nick Alte Посмотреть сообщение
Проверяли или предполагаете?
"Семантика" - это смысл, который вкладывается в язык программирования (а не в процессор), тут не надо ничего предполагать, всё написано в стандарте языка. Для компилятора нет принципиальной разницы между первым и вторым. Если компилятор умеет должным образом оптимизировать второй исходник, то он соптимизирует и первый.

Цитата Сообщение от Nick Alte Посмотреть сообщение
А то хорошо бы проверить оба, мало ли что там компилятор наоптимизирует.
Проверь, кто ж тебе мешает
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
10.03.2014, 16:12  [ТС]
Цитата Сообщение от Nick Alte Посмотреть сообщение
Вот это, кстати, надо измерять.
В том то и дело, что ГПУ для меня пока - только очень вкусная теоретическая возможность. Я ещё ни одной программы на ГПУ не написал потому что
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Подскажите какую из существующих вариантов реализации стоит изучать?
Думал, может кто уже нащупал подобную возможность.
По-сему я сделал вывод, что нужно учить OpenCL и самому отвечать на 2-й вопрос)

Добавлено через 7 минут
Цитата Сообщение от Evg Посмотреть сообщение
смысл, который вкладывается в язык программирования
Вы бесконечно правы в плане программирования, как точной науки. Но Вы не читаете между строк. Фраза
Цитата Сообщение от Retyrn0 Посмотреть сообщение
если вместо условных переходов использовать что-то такое:
подразумевала, не конкретную функцию, а идею избавиться от ветвлений. Но если Вы предпочитаете точный пример, то:

вместо:
C++
1
if(x<0)x*=(-1);
это:
C++
1
2
x=x>>31;
x=x&1;
Семантика в порядке?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.03.2014, 17:31
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Но Вы не читаете между строк
Я сразу написал "на всякий случай", ибо было подозрение, что ТС (т.е. ты) не видит разницы между операцией сравнения на позиции condition и rvalue. Моё замечание касалось только этого и больше ничего. Я в глаза не видел ни одного компилятора для GPU, а потому по конкретике я ничего не знаю

Цитата Сообщение от Retyrn0 Посмотреть сообщение
Семантика в порядке?
Я не совсем понимаю, чего ты этим кодом хочешь показать. Значение выражения "x>>31" всегда равно нулю или единице, а потому выражение "x=x&1" является мёртвым кодом. Если это был намёк на то, что этим можно пользоваться вместо (x<0), то да, этим можно пользоваться. Будет ли это быстрее - скорее всего да. "Скорее всего", потому что я не знаю спецификации GPU, но из общих соображений небольшое количество лишних арифметических операций работают эффективнее, чем операция условного перехода
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
10.03.2014, 21:02  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Я в глаза не видел ни одного компилятора для GPU, а потому по конкретике я ничего не знаю
ааа.
Цитата Сообщение от Evg Посмотреть сообщение
"x=x&1" является мёртвым кодом
Извините, тупанул. =/ Поспешил - людей насмешил.
C++
1
x+=(x<<1)*(x>>31);
Цитата Сообщение от Evg Посмотреть сообщение
"Скорее всего", потому что я не знаю спецификации GPU
Я тоже её не знаю, именно поэтому обратился к людям, которые, возможно, с этим уже сталкивались вплотную. Если кто-то, кто с ГПУ "на ты" уже пользовался таким методом(или счёл его интересным), то мне было бы понятно, по контексту ответа, стоит преобразовывать свой код в математику или "ографичивать" алгоритм, с использованием лаконичных старых добрых if else.

По ответам понял, что люди с этим ещё не сталкивались или считают результат непредсказуемым(на разном железе - разным). По-сему буду юзать условия и не заморачиваться над математикой. Спасибо за ответы.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.03.2014, 21:44
Скажем так, я сталкивался с этим на "обычных" процессорах. Там действительно заморачиваются и вместо if'ов строят арифметику. Мне кажется, что GPU мало чем отличается от "обычного" процессора с точки зрения организации конвейера - на большой частоте приходится делать длинный конвейер, а потому условный переход должен тормозить конвейер. Другое дело, что было бы логично делать условный переход с подсказкой (о том, каким будет наиболее вероятным результат сравнения), но при этом нужно и в язык некоторую конструкцию вносить. В языке GNU C для этих дел используют __builtin_expect, может быть и в языке для GPU есть нечто подобное
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
10.03.2014, 22:18  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
было бы логично делать условный переход с подсказкой (о том, каким будет наиболее вероятным результат сравнения)
В моём случае это 50/50. signed int координаты могут равновероятно быть положительными и отрицательными.
Цитата Сообщение от Evg Посмотреть сообщение
Мне кажется, что GPU мало чем отличается от "обычного" процессора с точки зрения организации конвейера
Хорошо. Буду тестировать, замерять, как только разжую GPGPU =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru