2011-09-05 26 views
6

Me gustaría llevar un algoritmo de simulación de física a la GPU utilizando OpenCL para el rendimiento; No tengo experiencia con OpenCL, y estoy buscando. Los cálculos son en su mayoría pequeños productos de matriz densa (3x3) y vectores, productos cruzados, etc.biblioteca de matriz opencl

  1. ¿Hay alguna biblioteca "estándar"/recomendada para tales operaciones básicas? Desde luego, no quiero codificar multiplicaciones de matrices e inversiones a mí mismo (no el tiempo, y sería inefficent)

  2. Como OpenCL no tiene clases, la sobrecarga de operadores, etc., tengo que escribir mmul(a,mtrans(b)) en lugar de, por ejemplo, a*b.transpose() ?

  3. ¿Existen algunas extensiones (planificadas)/evolución de OpenCL (o pre-procesador, para el caso) para hacer que la notación sea más matemática? Tengo la impresión de regresar a Fortran años. (Sé que hay CUDA, pero es independiente del proveedor ligada)

Respuesta

4

Si sabe con certeza que está limitado a objetos tridimensionales, entonces podría considerar usar el tipo double3 (o float3 si su gpu no es compatible con doble precisión).

Hasta ahora, solo se admiten los vectores, por lo que tendrá que hacer algunos códigos sobre cualquier uso de la multiplicación o inversión de matrices. Sin embargo, es posible que le interese el siguiente geometric functions integrado. En particular, se definen los productos dot y cross.

Usted también puede estar interesado en saber que hay reserved data types para futuros implentations de matrices: véase por ejemplo el doble n x m . En su caso, si está disponible en el futuro, podrá usar tipos double3x3 para sus matrices.

5

para responder a sus preguntas:

  1. No es que yo soy consciente de
  2. Sí, OpenCL se limita estrictamente a la sintaxis C99 , por lo que no hay clases, no hay sobrecarga de operadores, y llamadas estrictamente de procedimiento para el tipo de operaciones que tiene en mente. OpenCL admite operaciones basadas en elementos en sus tipos de vectores nativos, pero nada más sofisticado que eso. La multiplicación de la matriz, el determinante, la transposición, etc. tendrán que implementarse.
  3. Una vez más, no es que yo sepa. [Como comentario aparte, no me burlaría de Fortran en este contexto, F90 y versiones posteriores tienen operaciones intrínsecas de matrices y vectores que hacen que el tipo de operaciones sobre las que preguntas sea mucho más fácil de escribir que C99 o C++].
+0

Disculpa, tuve en mente a Fortran en los días previos a la presentación (no es que estuviera programando en ese momento), es decir, antes de que alguien hiciera una buena implementación en lugar de que todos la escribieran por sí mismos. Por analogía, creo que una razón por la cual Python es un lenguaje tan popular: "baterías incluidas". – eudoxos