матричная библиотека opencl - PullRequest
       8

матричная библиотека opencl

6 голосов
/ 05 сентября 2011

Я бы хотел перенести алгоритм физического моделирования на графический процессор, используя OpenCL для повышения производительности; У меня нет опыта работы с OpenCL, и я смотрю вокруг. Расчеты в основном представляют собой небольшие плотные матрицы (3х3) и векторные произведения, перекрестные произведения и т. Д.

  1. Существует ли какая-либо "стандартная" / рекомендуемая библиотека для таких основных операций? Я, конечно, не хочу сам кодировать матричные умножения и инверсии (не время, и это было бы неэффективно)

  2. Поскольку в OpenCL нет классов, перегрузки операторов и т. Д., Нужно ли, например, писать mmul(a,mtrans(b)) вместо a*b.transpose()?

  3. Существуют ли (запланированные) расширения / эволюции OpenCL (или препроцессора, если на то пошло), чтобы сделать запись более похожей на математику? У меня сложилось впечатление, что я возвращаюсь в Фортран. (Я знаю, что есть CUDA, но она привязана к поставщику)

Ответы [ 2 ]

5 голосов
/ 05 сентября 2011

Чтобы ответить на ваши вопросы:

  1. Не то, чтобы я знал о
  2. Да, OpenCL строго ограничен синтаксисом C99, поэтому нет классов, нет перегрузки операторов и строго процедурныйпризывает к видам операций, которые вы имеете в виду.OpenCL поддерживает поэлементные операции над собственными векторными типами, но ничего более сложного, чем это.Матричное умножение, детерминант, транспонирование и т. Д. Все должны быть реализованы самим собой.
  3. Опять не то, о чем я знаю.[В качестве отступления, я бы не стал высмеивать Фортран в этом контексте, F90 и более поздние версии имеют встроенные матричные и векторные операции, которые делают виды операций, о которых вы просите, гораздо проще писать, чем C99 или C ++].
4 голосов
/ 05 сентября 2011

Если вам точно известно, что вы ограничены трехмерными объектами, то вы можете рассмотреть возможность использования типа double3 (или float3, если ваш графический процессор не поддерживает двойную точность).

Пока что поддерживаются только векторы, так что вам придется самостоятельно создавать код для любого умножения или инверсии матриц. Однако вас могут заинтересовать следующие встроенные геометрические функции . В частности, определены точка продуктов и крест продуктов.

Вам также может быть интересно узнать, что существует зарезервированных типов данных для реализации матриц на будущее: см., Например, double n x m . В вашем случае, если он будет доступен в будущем, вы сможете использовать типы double3x3 для своих матриц.

...