Я не могу ответить на вторую половину вашего вопроса относительно других реализаций, но я могу дать некоторое представление о проблемах. Для справки, я лично использовал ViennaCL на nVidia GTX 560 Ti с 2 ГБ памяти для моих тестов.
По сравнению с последовательным кодом на i5 среднего уровня, я видел ускорения для плотного умножения матриц примерно в 40 раз. Для таких операций, как векторное скалярное умножение, я видел увеличение до 1000x. Однако 800-килограммовая горилла в комнате - это пропускная способность памяти. Для большинства коммерческих графических процессоров вы будете использовать что-то вроде PCIe, что ограничивает пропускную способность до 6 ГБ / с. В моем случае, хотя вычисления были в 40 раз быстрее, каждая из трех копий матрицы (две на графический процессор и одна задняя) занимала примерно столько же времени, сколько просто выполняла вычисления на процессоре.
Тогда проблема с любой общей библиотекой для линейной алгебры GPU состоит в том, что они не могут по-настоящему повторно использовать объекты в GPU, потому что они не знают, что вы собираетесь с ними делать. Таким образом, каждый вызов вычислительного ядра, вероятно, потребует копирования в графический процессор, а затем копирования результата обратно. Это съест большую часть прибыли.
Если вы можете повторно использовать объекты, такие как матрицы, то вы могли бы написать алгоритмы более высокого уровня, чтобы избежать как можно большего управления памятью, но библиотеке будет трудно сделать это эффективно.
Я надеюсь, что это поможет, и я уверен, что здесь есть другие люди, которые гораздо более опытны в этом, но это те впечатления и впечатления, которые я получил во время своего короткого знакомства с вычислениями на GPU.