OpenCL, TBB, OpenMP - PullRequest
       45

OpenCL, TBB, OpenMP

0 голосов
/ 19 августа 2011

Я реализовал несколько обычных зацикленных приложений в OpenMP, TBB и OpenCL. Во всех этих приложениях OpeCL дает гораздо лучшую производительность, чем другие, когда я запускаю его только на процессоре без особых оптимизаций в ядрах. OpenMP и TBB также дают хорошую производительность, но намного меньше, чем OpenCL, что может быть причиной для этого, поскольку они оба являются специализированными средами ЦП и должны обеспечивать производительность, равную, по крайней мере, OpenMP / TBB.

Мое второе беспокойство заключается в том, что когда речь идет об OpenMP и TBB, OpenMP всегда лучше по производительности, чем TBB в моих реализациях, в которых я не настроил его для очень хороших оптимизаций, так как я не настолько опытен. Есть ли причина, по которой OpenMP обычно лучше по производительности, чем TBB? Потому что я думаю, что они оба или даже OpenCL тоже используют один и тот же вид пула потоков на низком уровне .... Любое мнение экспертов? Спасибо

Ответы [ 3 ]

3 голосов
/ 20 августа 2011

Одним из преимуществ OpenCL по сравнению с TBB и OpenMP является то, что он может лучше использовать SIMD-параллелизм в вашем оборудовании. Некоторые реализации OpenCL будут запускать ваш код таким образом, чтобы каждый рабочий элемент выполнялся на векторной дорожке SIMD машины, а также на отдельных ядрах. В зависимости от алгоритма это может обеспечить много преимуществ в производительности.

Компиляторы C также могут использовать некоторые преимущества SIMD-параллелизма, используя автоматическую векторизацию, но правила псевдонимов памяти в C затрудняют это в некоторых случаях. Поскольку OpenCL требует от программистов явного вызова рабочих элементов и ограничения доступа к памяти, компилятор OpenCL может быть более агрессивным.

В конце концов, это зависит от вашего кода. Можно найти алгоритм, для которого лучше использовать любой из OpenCL, OpenMP или TBB.

1 голос
/ 30 сентября 2014

Среда выполнения OpenCL для CPU и MIC, предоставляемая Intel, использует TBB под капотом.Это далеко не просто «пул потоков на низком уровне», поскольку он использует преимущества сложных алгоритмов планирования и разделения, предоставляемых TBB, для лучшего распределения нагрузки и, таким образом, лучшего использования процессоров.

Что касается TBB против OpenMP.Обычно все сводится к неправильным измерениям.Например, TBB не имеет неявного барьера, как в OpenMP, поэтому цикла прогрева недостаточно.Вы должны убедиться, что все потоки созданы, и эти накладные расходы не включены в ваши измерения.Другой пример: иногда компиляторы не могут векторизовать один и тот же код с TBB, который векторизован с помощью OpenMP.

0 голосов
/ 20 августа 2011

Ядра OpenCL скомпилированы для данного оборудования. Потенциал для оптимизации конкретного поставщика / оборудования огромен.

...