ПрограммированиеФорумОбщее

Параллельные вычисления на GPU

Страницы: 1 2 Следующая »
#0
19:26, 1 фев 2015

Здравствуйте! Нужны ваши рекомендации по такому вопросу.

Необходимо параллельно произвести сложные вычисления на GPU, не выходя за рамки следующих требований:
1. вычисления должны производиться параллельно;
2. будет один большой кусок данных в видеопамяти, которые должен быть доступен в каждом из параллельно выполняющихся потоков на GPU, не дублируясь при этом в памяти;
3. каждый параллельно выполняющийся поток должен иметь возможность записать результаты своих вычислений в видеопамять;
4. должна быть возможность дождаться окончания выполнения всех параллельно выполняющихся потоков на GPU;
5. должна быть доступна одна из следующих возможностей (в порядке убывания приоритета):
5.1. возможность сохранять результаты вычислений сразу в OpenGL текстуру;
5.2. возможность создать OpenGL текстуру из результатов вычислений, находящихся в видеопамяти;
5.3. возможность перегнать результаты вычислений из видеопамяти в оперативную память;
6. независимость от платформы (Windows, Linux) и от производителя оборудования (NVIDIA, ATI), т.е. должно работать, результат работы должен быть одинаковым и, желательно, с наименьшими расхождениями в скорости.

Какие технологии вы порекомендуете использовать?
Можно ли обойтись только OpenGL и GLSL?
Какие подводные камни вы видите?

Что уже отпадает:
- CUDA (по 6 пункту требований: работает только на NVIDIA)
- OpenCL (по 6 пункту требований: судя по отзывам, на ATI работает заметно медленней, чем на NVIDIA, и вообще работает заметно медленней, чем при использовании CUDA или GLSL)

Если я где-то ошибаюсь или что-то не понимаю, пожалуйста, поправьте.

#1
19:59, 1 фев 2015

ialexbr
Не ясен характер вычислений. А то может тебе надо только пиксель закрасить по какой-то формуле :)

#2
20:16, 1 фев 2015

Blew_zc
Да мне нужно закрашивать пиксели в текстуре, но по очень трудоемкой формуле. Было бы идеально, если бы каждый пиксель обрабатывался параллельно от остальных, для увеличения скорости вычислений. Все это нужно, чтобы добиться фотореалистичности в реальном времени.

#3
22:18, 1 фев 2015

ialexbr
> Да мне нужно закрашивать пиксели в текстуре, но по очень трудоемкой формуле.
> Было бы идеально, если бы каждый пиксель обрабатывался параллельно от
> остальных, для увеличения скорости вычислений.
Так и есть.

ialexbr
> Все это нужно, чтобы добиться фотореалистичности в реальном времени.
А вот это зависит от специфических алгоритмов, заточенных под GPU. Ибо у GPU куча нюансов по работе с памятью, синхронизацией, etc...
Например, у GPU нет стека. Трассировку путем рекурсивного обхода дерева влоб не сделаешь :)

#4
2:13, 2 фев 2015

ialexbr
Пиксельный шейдер удовлетворяет всем требованиям.

#5
2:30, 2 фев 2015

ialexbr
> - OpenCL (по 5 пункту требований: судя по отзывам, на ATI работает заметно
> медленней, чем на NVIDIA, и вообще работает заметно медленней, чем при
> использовании CUDA или GLSL)
Чушь. Бери OpenCL, он отличный.

#6
10:53, 2 фев 2015

ialexbr
> 6. независимость от платформы (Windows, Linux) и от производителя оборудования (NVIDIA, ATI), т.е. должно работать, результат работы должен быть одинаковым и, желательно, с наименьшими расхождениями в скорости.
Благодаря этому пункту других вариантов нет, кроме OpenCL.

> Что уже отпадает:
> - CUDA (по 5 пункту требований: работает только на NVIDIA)
> - OpenCL (по 5 пункту требований: судя по отзывам, на ATI работает заметно медленней, чем на NVIDIA, и вообще работает заметно медленней, чем при использовании CUDA или GLSL)
Про CUDA понятно, он отпадает по п.6
Про OpenCL непонятно почему отпала п. 5. Что CUDA, что OpenCL умеют работать непосредственно с ресурсами DX и OGL.

> 5.2. возможность создать OpenGL текстуру из результатов вычислений, находящихся в видеопамяти;
А вы можете из GLSL или HLSL создавать текстуры? Если можете научите, пож, а иначе этот пункт равносилен п.5.1.

А так по теме:
Конечно все зависит от характера вычислений.
Но если OpenCL работает медленно GLSL, значит вы не научились работать с OpenCL.

> Да мне нужно закрашивать пиксели в текстуре, но по очень трудоемкой формуле. Было бы идеально, если бы каждый пиксель обрабатывался параллельно от остальных, для увеличения скорости вычислений.
Для этого OpenCL и CUDA создавались.
> если бы каждый пиксель обрабатывался параллельно от остальных
Да. Это можно реализовать на OpenCL или CUDA.

> Все это нужно, чтобы добиться фотореалистичности в реальном времени.
Это уже зависит от
> очень трудоемкой формуле

#7
11:38, 2 фев 2015

-Eugene-
> Пиксельный шейдер удовлетворяет всем требованиям.
+1, если формула не слишком сложная (т.е. ее в принципе можно на нем реализовать).

#8
13:45, 2 фев 2015

ialexbr
> - OpenCL (по 5 пункту требований: судя по отзывам, на ATI работает заметно медленней, чем на NVIDIA
Вообще-то бред. В некоторых задачах он рвет Ncidia на CUDA. AMD очень серьезно взялись за OpenCL.

#9
17:41, 2 фев 2015

А как на пиксельном шейдере реализовать, например, поиск наибольшего числа в текстуре? Или поиск какого-либо конкретного числа? (желательно не за log(width) проходов)

#10
17:42, 2 фев 2015

newillusion
> поиск наибольшего числа в текстуре? Или поиск какого-либо конкретного числа?
> (желательно не за log(width) проходов)
Вот так:
> за log(width) проходов
Я AABB так считаю для ландшафта. Намного шустрее аналогичного на процессоре.

#11
17:52, 2 фев 2015

newillusion
Есть еще вершинный шейдер! Можно нарисовать N^2 точек, каждая будет сравнивать соответствующую точку текстуры с заданным числом и выводить результат или делать discard. А для поиска максимума можно сначала BLENDом вывести, а потом как на прошлом шаге.

Про производительность не знаю, у меня все работало, но сравнить не с чем, может и тормознуто.

#12
18:59, 2 фев 2015

newillusion
> А как на пиксельном шейдере реализовать, например, поиск наибольшего числа в
> текстуре? Или поиск какого-либо конкретного числа? (желательно не за log(width)
> проходов)
А чем подход будет принципиально отличаться от OpenCL/DirectCompute/CUDA? Архитектура та же, поэтому те же ограничения.

#13
19:29, 2 фев 2015

ialexbr
> судя по отзывам, на ATI работает заметно медленней, чем на NVIDIA, и вообще
> работает заметно медленней, чем при использовании CUDA или GLSL
  Может потому что на ATI вообще всё медленнее, такой вариант не рассматривался? :-7

#14
20:27, 2 фев 2015

ialexbr
Если OpenCL устроит boost.compute посмотрите

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.