OpenCL VS Performance OpenMP [Закрыто]

29
задан nbro 31 July 2017 в 14:57
поделиться

1 ответ

Тесты, которые я видел, показывают, что OpenCL и OpenMP, работающие на одном и том же оборудовании, обычно сопоставимы по производительности, или OpenMP имеет немного лучшую производительность. Тем не менее, я не видел каких-либо критериев, которые я бы посчитал убедительными, потому что им в основном не хватало подробных объяснений их методологии. Тем не менее, есть несколько полезных вещей для рассмотрения:

  • OpenCL всегда будет иметь некоторые дополнительные издержки при компиляции ядра во время выполнения. Любой бенчмарк должен либо перечислять это время отдельно, использовать предварительно скомпилированные собственные ядра, либо выполняться достаточно долго, чтобы компиляция ядра была незначительной.

  • Реализация OpenCL будет отличаться. Производители графических процессоров, такие как NVidia, не заинтересованы в том, чтобы их реализация OpenCL на базе процессоров была максимально быстрой. Ни одна из реализаций OpenCL, вероятно, не будет настолько зрелой, как хорошая реализация OpenMP.

  • Спецификация OpenCL в основном ничего не говорит о том, как реализации на базе ЦП используют многопоточность, поэтому любое обсуждение того, является ли многопоточность относительно легкой или тяжелой, обязательно будет зависеть от конкретной реализации.

  • Когда вы запускаете код OpenCL на CPU, ваши рабочие элементы не должны быть крошечными и многочисленными. Вы можете разбить проблему так же, как и в OpenMP.

Даже если OpenCL имеет немного больше накладных расходов, могут быть другие причины, чтобы предпочесть его.

  • Очевидно, что если ваш код может эффективно использовать графический процессор, вам понадобится реализация OpenCL. Производительность OpenCL на процессоре может быть достаточно хорошей, так что не стоит также поддерживать путь отката кода OpenMP для пользователей, у которых нет мощных графических процессоров.

  • Хорошая реализация OpenCL на основе ЦП означает, что вы автоматически получите преимущество от любых расширений набора команд, поддерживаемых ЦП и реализацией OpenCL. С OpenMP вы должны проделать дополнительную работу, чтобы убедиться, что ваш исполняемый файл содержит пути к кодам SSEx и AVX.

  • Векторные примитивы OpenCL могут помочь вам выразить некоторый явный параллелизм без ущерба для переносимости и читаемости, которые вы получаете от использования встроенных функций SSE.

26
ответ дан 28 November 2019 в 01:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: