Нотация массива в Cilk работает параллельно?

То есть. за

int A[100]
A[:] = 1;

это пытается создать 100 потоков? или это тоже самое, что делать цикл for?

Я думал, что это было распараллелено, но я только что проверил это, и это не похоже на это.

Есть ли способ заставить его использовать несколько потоков, или это нотация Array?

1 ответ

Нет. Cilk Plus поддерживает два вида параллелизма; параллелизм данных и параллелизм задач.

Параллелизм данных выполняет одну и ту же операцию с несколькими значениями одновременно. Иногда его называют SIMD - одна инструкция, несколько данных. Обозначение массива является "подсказкой" компилятору о том, что это параллельная операция с данными и должна выполняться с использованием векторных модулей ЦП. Когда в векторном блоке больше элементов, чем уместится, компилятор сгенерирует цикл вокруг операции. Если компилятор может обнаружить, что несколько строк работают с одними и теми же наборами данных, он поместит цикл вокруг всего вычисления.

Параллелизм задач выполняет несколько задач одновременно, где каждая задача выполняет свой собственный поток инструкций. Если вы также хотите выполнять вычисления параллельно, вам нужно использовать цикл cilk_for вокруг ваших расчетов. Вы также можете использовать TBB или OpenMP, если вы предпочитаете их.

  • Барри
Другие вопросы по тегам