Вызов функции в параллельном цикле for

Я пытаюсь вызвать функцию внутри параллельного цикла for в Cilk plus. Если я объявлю массив в вызываемой функции, будут ли у него проблемы с расой? После некоторых запусков цикла я получаю сообщение об ошибке сегментации или прерванных (сброшенных ядрах) ошибках.

PScan()
{
    // Would working on w create race issues?
    double *w = calloc(num,sizeof(double));
}

1 ответ

Решение

Если PScan() вызывается из цикла cilk_for, использование массива w не будет гонкой. Все параллельные нити будут иметь собственную выделенную копию w. Обязательно освободите эту память, когда закончите.

Однако следует помнить, что вызов процедур выделения памяти, таких как calloc, может включать блокировки, которые могут ограничивать производительность. Альтернативные распределители памяти, такие как tbbmalloc, могут смягчить это.

Вы можете использовать инструмент Cilkscreen для поиска рас. Инструменты Cilk (детектор расы Cilkscreen и анализатор масштабируемости Cilkview) доступны бесплатно по http://cilkplus.org/download

- Barry Tannenbaum
  Intel Cilk Plus Runtime Development
Другие вопросы по тегам