Графика - одна из тех «смущающих параллелей» проблем.Предполагается, что Haskell действительно хорош для параллельной обработки.Итак, мой вопрос:
Каков наилучший способ выбросить как можно больше ядер ЦП при проблеме рендеринга?
Возможно ли эточтобы заставить GPU вместо этого выполнять задачу?
Под «проблемой рендеринга» я имею в виду такие проблемы:
Цвет каждого пикселячистая функция его координат.
Мы начинаем с существующего «входного» изображения, и цвет каждого «выходного» пикселя является чистой функцией соответствующего входного пикселя, или, возможно, небольшогоокрестности таких пикселей.
Относительно # 1: Это выглядит тривиально, но на самом деле это не так.Существует несколько возможных вариантов структуры данных для хранения вычисленных пикселей (которые влияют на то, как вы можете получить к ним доступ и насколько легко вы можете вывести результат на диск или экран).Есть несколько способов выполнения на нескольких ядрах.И так далее.
Мне кажется, что Data Parallel Haskell был бы идеальным выбором для такого рода вещей.Однако, в прошлый раз, когда я проверял, DPH еще не работает.Вот и все.Даже если предположить, что это работает, вы, вероятно, создадите параллельный массив для хранения пикселей, а затем вам придется скопировать пикселей, чтобы отобразить их на экране или записать их на диск.
Я бы попробовал зажечь каждый пиксель, но это, вероятно, слишком мелкозернистый.Я мог бы сделать пиксели списком и использовать одну из стратегий параллельного списка.Или я мог бы сделать его неизменным массивом (unboxed?) И написать некоторый ручной код для запуска искр.Или я мог бы пойти с явными потоками и изменяемыми массивами.Или я мог бы иметь несколько рабочих потоков, которые передавали бы значения пикселей через канал в главный поток, который помещал результаты в нужное место.Или ...
Таким образом, здесь есть удивительное количество возможностей, и я не уверен, что лучше.
Относительно # 2: Очевидно, этот тип проблемыэто полная причина , что графические процессоры существуют в первую очередь.Очевидно, что GPU идеально подходит для решения подобных проблем.Мой вопрос больше "трудно ли это сделать из Хаскелла?"