Показаны сообщения с ярлыком nvidia. Показать все сообщения
Показаны сообщения с ярлыком nvidia. Показать все сообщения

вторник, 5 декабря 2023 г.

OpenCL. Обновление OpenCL/CUDA SDK и неожиданные результаты повторных тестов.

Оказывается, все это время я работал со старой версией 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, а с другой стороны - все остальные способы работают так же быстро, как самый быстрый! То есть теперь нет никакого смысла что-то оптимизировать, а все мои предыдущие изыскания носят скорее академический интерес в данном случае. Я не знаю, что именно они там поменяли, но результаты просто фантастические. 



понедельник, 13 ноября 2023 г.

Настроить окружение для работы с OpenCL не просто, а очень просто

Самое сложное - это было установить собственно сам SDK, который у каждого производителя видеокарт свой (у меня NVidia). У меня это получилось, когда я скачал 2-гиговый standalone-инсталлятор и убрал там пару пунктов (кажется это были NSight Visual Studio Edition и еще CUDA Integration to Visual Studio, но тут каждый должен сам экспериментировать). После того, как это получилось, будет установлена переменная окружения CUDA_PATH, которая указывает на корень папки с необходимыми бинарными файлами и заголовками, например что-то типа "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0":


Теперь создаем простой консольный проект в Visual Studio и настраиваем его. Сначала добавляем папку с библиотеками (не забываем, что для x64 и Win32 сборок это разные папки):


Потом указываем библиотеку OpenCL.lib:


И добавляем папку с заголовочными файлами:


Вот и все, настройка завершена! Теперь можно собрать какое-то OpenCL-приложение, например такое: