Comments 4
Подробно узнать о них можно в курсе Николая Полярного
Ну вот зря давать такие ссылки) может сложиться впечатление что курс только оффлайн в питере. Тем не менее на ютубе есть видео(правда только за 2018 год)
Эту задачу ещё называют редукцией
С openCL не сталкивался, но знаю что для CUDA есть готовые примитивы редукции
А так же другого параллельного алгоритма scan. Не уж то для opencl нет готовой библиотеки? Или это пример с образовательной целью?
Ещё я заметил, что есть смысл в каждом треде выделить свой контекст. Не знаю, чем это обусловлено, но почему-то производительность при таком подходе возрастает.
А на какой карте вы это заметили?
Недавно наткнулся на такое обсуждение(CUDA)
Там высказали противоположное мнение, что контексты не так эффективны и влекут много накладных расходов. Использование стримов больше профита дает
У CUDA MPS (Multi-Process Service) к тому же есть не на всех картах только вроде начиная Pascal+
Спасибо за ценные замечания!
Ну вот зря давать такие ссылки
Согласен, без веб-ссылки выглядит не очень, добавим.
С openCL не сталкивался, но знаю что для CUDA есть готовые примитивы редукции
Прям примитивов наколько я знаю нет, но есть много библиотек. Как ни удивительно, но редукцию часто реализуют сами.
Но да, пример конечно учебный. Показывает, что даже такая простая операция как сумма имеет массу нюансов.
А на какой карте вы это заметили?
На разных. Везде результаты примерно одинаковые, но касаются это не всех задач. Поэтому я высказал предположение, что это зависит от того, насколько вы хорошо нагружаете видеокарту. Если нагружаете хорошо (что сложно), то вполне возможно накладные расходы победят.
По поводу обработки границ у Гаусса, отмечу, что в OpenCL есть images, они же текстуры из 3D API. При выборке из текстуры края обрезаются автоматически, также есть трюки, позволяющие сократить число выборок за счёт бесплатной билинейной интерполяции.
Конечно, images не будут ничего ускорять, если запускать кернел на CPU - там будет работать софтверная имитация.
Вычисляем на видеокартах. Технология OpenCL. Часть 2. Алгоритмы в условиях массового параллелизма