Ответ 1
Спасибо за сообщение. Рад услышать, что начальные результаты дали некоторое ускорение. Я работаю над ArrayFire и могу прослушивать здесь свои вопросы.
В первую очередь, код действительно нужен здесь, чтобы кто-нибудь мог помочь с определенностью. Можете ли вы поделиться кодом, который вы написали?
Во-вторых, вы должны думать о CUDA и ArrayFire следующим образом: CUDA - это способ программирования графического процессора, который предоставляет вам возможность писать любой желаемый графический процессор. Но существует огромная разница между наивным кодом CUDA (часто медленнее, чем у процессора) и экспертом, с учетом времени, с ручным оптимизированным кодом CUDA. ArrayFire (и некоторые другие библиотеки графического процессора, такие как CUBLAS) имеют много человеко-лет оптимизаций, вливаемых в них, и, как правило, будут давать лучшие результаты, чем большинство обычных людей успеют достичь самостоятельно. Тем не менее, существует также изменчивость в том, насколько хорошо кто-то использует ArrayFire (или другие библиотеки). Существуют переменные, которые можно и нужно настраивать при использовании вызовов библиотеки ArrayFire, чтобы получить максимальную производительность. Если вы разместите свой код, мы можем помочь вам поделиться некоторыми из них.
В-третьих, ArrayFire использует CUBLAS в функциях, которые полагаются на BLAS, поэтому вы вряд ли увидите большую разницу, используя CUBLAS напрямую.
В-четвертых, да, ArrayFire использует все оптимизации, доступные в Руководстве по программированию NVIDIA CUDA (например, более быстрая передача данных и уменьшение конфликтов банка памяти, как вы упомянули). То, где основная часть развития ArrayFire сосредоточена, на оптимизацию такого рода вещей.
Наконец, несоответствия данных, которые вы заметили, скорее всего, вызваны тем, что компьютерные вычисления против GPU. Поскольку они разные устройства, вы часто увидите несколько разные результаты. Это не то, что процессор дает лучшие результаты, чем графический процессор, а скорее то, что они работают с конечным количеством точности несколькими разными способами. Если вы используете одноточную, а не двойную, вы можете подумать об этом. Проводка кода также поможет нам в этом.
Счастливый, чтобы развернуть мой ответ после публикации кода.