Pull to refresh

Comments 7

А можно ещё добавить чисто С-вариант? По моему опыту, параллелизация приводит к хорошей утилизации ресурсов всех ядер CPU, но добавление новых слоев абстракции зачастую съедает часть выгоды.
В моем случае отказ от STL/OpenMP в пользу С-массивов/Thread позволил отказаться от 60-ядерного сервера в пользу i5 с сохранением производительности.

Parallel STL — часть С++ стандарта. Теоретически эти алгоритмы можно использовать и с С-массивами. Например,


int* in;
int* out;
// Выделить память, заполнить in
std::copy(pstl::execution::unseq, in, in+n, out);

Такой пример должен отработать. Изначально в качестве параллельного движка мы использовали TBB, но теоретически дизайн позволяет и другие "бэкенды" использовать.
OpenMP здесь используется только для векторизации, не для многопоточности.

Нет, к сожалению, под рукой компилятора с поддержкой pstl, но на том, который есть (gcc 4.8.5), однопоточный вариант std::copy медленнее memcpy на треть. Потому и было интересно сравнение с классическим С.
Однопоточный вариант std::copy с политиками или обычный, без политик, из стандартной библиотеки?
Да, такое возможно. Таких чистых С-вариантов алгоритмов Parallel STL не предоставляет
Sign up to leave a comment.