Saya tidak bisa menjawab bagian kedua dari pertanyaan Anda sejauh implementasi lain di luar sana tapi saya bisa memberikan beberapa wawasan tentang tantangan. Untuk referensi, saya pribadi menggunakan ViennaCL pada nVidia GTX 560 Ti dengan memori 2GB untuk tolok ukur saya.
Lebih dari kode serial pada i5 mid-range, saya melihat percepatan untuk perkalian matriks padat sekitar 40x. Untuk operasi seperti vektor-skalar, saya melihat kecepatan 1000x lebih tinggi. Namun, gorila 800 pon di ruangan itu adalah bandwidth memori. Untuk sebagian besar GPU komersial, Anda akan menggunakan sesuatu seperti PCIe yang membatasi Anda untuk sekitar 6GB / s dari throughput. Dalam kasus saya, sementara perhitungannya 40x lebih cepat, tiga salinan matriks (dua untuk GPU, dan satu kembali) masing-masing menghabiskan waktu sebanyak hanya melakukan perhitungan pada CPU.
Masalahnya dengan perpustakaan umum untuk aljabar linear GPU adalah bahwa mereka tidak dapat benar-benar menggunakan kembali objek pada GPU, karena mereka tidak tahu apa yang akan Anda lakukan dengan mereka. Jadi setiap panggilan ke kernel komputasi kemungkinan akan membutuhkan penyalinan ke GPU, kemudian menyalin hasilnya kembali. Ini akan memakan sebagian besar keuntungan.
Jika Anda dapat menggunakan kembali objek seperti matriks, maka Anda dapat menulis algoritma level yang lebih tinggi untuk menghindari manajemen memori sebanyak mungkin, tetapi perpustakaan akan sulit sekali melakukannya secara efisien.
Saya harap ini membantu, dan saya yakin ada orang lain di sini yang jauh lebih berpengalaman dalam hal ini, tetapi ini adalah pengalaman dan kesan yang saya dapatkan selama terjun singkat dalam komputasi GPU.