Los gráficos son uno de esos problemas "embarazosamente paralelos". Se supone que Haskell es realmente, realmente bueno para el procesamiento paralelo. Así que mi pregunta es:Procesamiento de gráficos paralelos en Haskell
¿Cuál es la mejor manera de tirar tantos núcleos de CPU como sea posible a un problema de representación?
¿Es posible hacer que la GPU realice la tarea?
Por "renderizado problema", me refiero a problemas tales como:
color de cada píxel es una pura función de sus coordenadas.
Comenzamos con una imagen de "entrada" existente, y cada color de "salida" del píxel es una función pura del píxel de entrada correspondiente, o tal vez un pequeño vecindario de dichos píxeles.
Respecto # 1: Esto parece que es trivial, pero en realidad no lo es. Hay varias opciones posibles de estructura de datos para almacenar los píxeles calculados (lo que influye en cómo puede acceder a él, y con qué facilidad puede volcar el resultado en un disco o pantalla). Hay varias formas de ejecutar en múltiples núcleos. Y así.
Me parece que Data Parallel Haskell sería una opción ideal para este tipo de cosas. Sin embargo, la última vez que revisé, DPH aún no funciona. Entonces eso es eso Incluso suponiendo que funcionó, es de suponer que crearía una matriz paralela para contener los píxeles, y luego tendría que copiar los píxeles para mostrarlos en la pantalla o escribirlos en el disco.
Intentaré encender cada píxel, pero probablemente sea demasiado refinado. Podría hacer que los píxeles sean una lista y usar una de las estrategias de listas paralelas. ¿O podría convertirlo en una matriz inmutable (¿sin caja?) Y escribir un código manual para iniciar las chispas. O podría ir con hilos explícitos y matrices mutables. O podría hacer que un grupo de subprocesos de trabajo transmitan valores de píxel a través de un canal a un hilo maestro que coloque los resultados en el lugar correcto. O ...
En resumen, hay un sorprendente número de posibilidades aquí, y no estoy seguro de cuál es la mejor.
Respecto # 2: Es evidente que este tipo de problema es la única razón de que existen GPU en el primer lugar. Claramente, la GPU es ideal para atacar este tipo de problemas. Mi pregunta es más "¿es difícil hacerlo de Haskell?"
No creo que pueda apuntar a GPU todavía, pero el objetivo de Data Parallel Haskell es poder hacer este tipo de cosas. –