Grafika jest jednym z tych "żenująco równoległych" problemów. Haskell ma być naprawdę, bardzo dobry do przetwarzania równoległego. Więc moje pytanie brzmi:Równoległe przetwarzanie grafiki w Haskell
Jaki jest najlepszy sposób na wyrzucenie jak największej liczby rdzeni procesora przy problemie z renderowaniem?
Czy można zamiast tego wykonać procesor GPU?
Przez „renderowania problemu”, mam na myśli problemy, takie jak:
kolor każdego piksela jest czysta funkcja jego współrzędnych.
Zaczynamy od istniejącego "obrazu wejściowego", a każdy kolor "wyjściowego" piksela jest czystą funkcją odpowiedniego piksela wejściowego, lub może małej okolicy takich pikseli.
Odnośnie # 1: To wygląda na to trywialne, ale w rzeczywistości tak nie jest. Istnieje kilka możliwych opcji struktury danych, w których przechowywane są obliczone piksele (co wpływa na sposób, w jaki można uzyskać do niego dostęp i jak łatwo można zrzucić wynik na dysk lub ekran). Istnieje kilka sposobów wykonania na wielu rdzeniach. I tak dalej.
Wydaje mi się, że Data Parallel Haskell byłby idealnym wyborem dla tego typu rzeczy. Jednak ostatnio sprawdziłem, DPH jeszcze nie działa. To wszystko. Nawet zakładając, że to działało, prawdopodobnie tworzysz równoległą tablicę do przechowywania pikseli, a potem będziesz musiał/musiała kopiować piksele, aby wyświetlić je na ekranie lub zapisać na dysku.
Chciałbym spróbować iskrzyć każdy pojedynczy piksel, ale to chyba zbyt drobnoziarniste. Mogłem uczynić piksele listą i użyć jednej z równoległych strategii list. Czy mógłbym uczynić z niego niezamkniętą tablicę (unboxed?) I napisać jakiś ręczny kod, by rozpocząć iskry. Mogę też iść z jawnymi wątkami i zmiennymi tablicami. Mogę też mieć kilka wątków roboczych, które przesyłają wartości pikseli przez kanał do głównego wątku, który umieszcza wyniki we właściwym miejscu. Lub ...
Podsumowując, istnieje tu zaskakująca liczba możliwości i nie jestem pewien, który jest najlepszy.
Odnośnie # 2: Oczywiście tego typu problemu jest cała przyczyna że istnieją GPU w pierwszej kolejności. Oczywiście GPU idealnie nadaje się do atakowania tego rodzaju problemów. Moje pytanie brzmi bardziej "czy trudno jest to zrobić z Haskell?"
Nie sądzę, że może on jeszcze kierować procesory graficzne, ale celem usługi Data Parallel Haskell jest umożliwienie wykonywania tego typu zadań. –