LINUX.ORG.RU
Форум — Development

Проблема с распараллеливанием


0

1
#pragma omp parallel for

for(int y=0; y<imgHeight; y++){
    for(int x=0; x<imgWidth;x++){
        pix = line+stride*y+4*x;


        if(pix[2]<128){pix[2] += 10;}else{pix[2] -= 10;}
        if(pix[1]<128){pix[1] += 10;}else{pix[1] -= 10;}
        if(pix[0]<128){pix[0] += 10;}else{pix[0] -= 10;}

    }
}

Дает странные шумы, в чем дело?


Вероятно распараллеленные форы конкуретно пишут/читают в соседние пиксели.

pix = line+stride*y+4*x;

Почему на 4 умножаешь? 4 канала, чтоли?

yoghurt ★★★★★
()

Наверняка читает/пишет сразу широким регистром, а не побайтно. Атомарно копируй пиксель во временную переменную, работай с ней, потом атомарно же пиши обратно.

Давай более полный кусок кода, с декларациями типа. Желательно, чтобы компилировался и воспроизводил проблему.

mv ★★★★★
()
Последнее исправление: mv (всего исправлений: 1)
Ответ на: комментарий от Kosyak

pix вне циклов определен, да?

Пасиба, бро! Думал что ошибка в этом, а как исправлять не знал.

knotri
() автор топика
Ответ на: комментарий от int13h

что за игрушка будет?

Я не говорил что это игра, алгоритм размытия картинки(знаю что плохой, потом сделаю гаусовое размытие).

Та игра о которой я говорил это совместный проект, и пока другие участники заняты...

knotri
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.