У меня возникла проблема, когда я играл с функцией автоматического распараллеливания Oracle Solaris Compiler. Скажем, у меня есть следующий код:автоматическая распараллеливание небезопасных вызовов
int var = -1;
int i;
for (i = 0; i < 3; i++){
bool flag = false;
// do operations to set the flag
if (flag == true)
var = i;
}
// do other operations with var
, когда я запускаю этот код, компилятор жалуется, что не может быть распараллелены из-за опасных зависимостей.
Кто-нибудь знает, что может быть неправильным здесь? Есть ли способ избежать этого, но сохранить исходную функциональность кода?
Любая помощь будет оценена, спасибо!
Я не работал с этим компилятором, но вы можете попробовать '#pragma MP taskloop storeback (var)' before for loop –
Очень маловероятно, что ветвь if вызвала зависимость. Я предполагаю, что существует больше зависимостей между циклами, которые предотвращают запуск следующего цикла до завершения текущего. Обычно это сглаживание указателей, попробуйте добавить ограниченные ключевые слова к вашим указателям, где это безопасно. – user3528438