Архитектура программирования GPGPU для HSA на C ++ для Matrix Math

Программисты вычислений на GPU,

У меня есть программа на C ++, которая в настоящее время использует ACML (LAPACK) для инвертирования и создания множества довольно больших матриц значений fp одинарной точности (например, 4000 x 4000). Эти матрицы очень редки, хотя они не всегда хорошо вписываются в диагональную матрицу, поэтому в настоящее время я не могу их уменьшить. Еще одна вещь об этой программе, я должен сделать это инвертировать и умножить несколько раз (последовательно) как часть Ньютон Рэпсон. Тем не менее, у меня есть несколько тысяч перестановок, которые можно сделать параллельно, с небольшими изменениями в матрице, прежде чем снова вычислять и инвертировать якобиан. Это все fp с одинарной точностью, и, кажется, идеально подходит для графического процессора. У меня вопрос такой …

Я подозреваю, что мне понадобится использовать математические библиотеки ускоренной параллельной обработки AMD (APPML) для OpenGL, поскольку это единственное (без CUDA, я хочу быть независимым от GPU), которое я знаю, которое доступно с функциональностью BLAS. Моя проблема в том, что я не вижу функций LAPACK dgetrf и dgetri, включенных в APPML (да, это fp64, но мне не нужна такая точность). Будет ли C ++ AMP лучшей альтернативой? Меня очень интересуют функции HSA, заключающиеся в передаче указателей, а не в копировании данных, так как здесь много данных в полете, и некоторые вычисления все еще выполняются на CPU. Я верю, что копирование заголовка убило бы меня в противном случае. В конечном счете, производительность — это ключ, и я хочу принять правильные архитектурные решения, чтобы настроить себя на максимальную производительность, которую я смогу извлечь из графических процессоров HSA, которые появятся в ближайшие 6 месяцев.

Я использую VS 2013 Ultimate Preview и смогу воспользоваться преимуществами C ++ AMP для этих возможностей HSA. Я просто хочу убедиться, что я принимаю правильное долгосрочное архитектурное решение сейчас, когда моя программа находится в зачаточном состоянии. Вот ссылка и фрагмент некоторых интересных данных, которые я нашел на Anandtech:

http://anandtech.com/show/7118/windows-81-and-vs2013-bring-gpu-computing-updates-to-direct3d-and-c-amp-

C ++ AMP, расширение C ++ от Microsoft для вычислений на GPU, также было обновлено с выходом VS2013. Я думаю, что самое большое обновление функции состоит в том, что программы на C ++ AMP также получат функцию совместной памяти на APU / SoC, где компилятор и среда выполнения смогут исключать дополнительные копии данных между CPU и GPU. Эта функция также будет доступна только в Windows 8.1 и, вероятно, построена поверх «буфера карты по умолчанию», поскольку реализация Microsoft AMP использует Direct3D под капотом. В C ++ AMP также есть и другие приятные дополнения, включая расширенную поддержку текстур и улучшенные возможности отладки.

Любые мысли, дополнительные вопросы или обсуждения будут с благодарностью!

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]