Оказывается, все это время я работал со старой версией SDK, выпущенной аж в 2017 году (OpenCL 2.1 или 2.2). Конечно же, я немедленно обновился до свежайшей версии 2023 года (OpenCL 3.0) и перезапустил все тесты и был очень сильно удивлен результатами. При тестировании на прежней версии SDK результаты для матрицы 4094*4096 были следующими:
naive: 849 ms
submatrix: 193 ms
submatrix+WPT: 132 ms
Теперь же, при новом SDK результаты получапются вот такие:naive: 61 ms
submatrix: 60 ms
submatrix+WPT: 64 ms
Я подумал, что может я смогу увидеть разницу на больших обьемах данных и проверил на матрице 8192*8192 и получил вот такие результаты:
naive: 241 ms
submatrix: 237 ms
submatrix+WPT: 236 ms
То есть практически одианковые. Получается, с одной стороны, новая версия SDK увеличила скорость работы так, что перемножение работает в два раза быстрее, чем в самом быстром способе в предыдущем SDK, а с другой стороны - все остальные способы работают так же быстро, как самый быстрый! То есть теперь нет никакого смысла что-то оптимизировать, а все мои предыдущие изыскания носят скорее академический интерес в данном случае. Я не знаю, что именно они там поменяли, но результаты просто фантастические.
Комментариев нет:
Отправить комментарий