#pragma omp parallel for schedule(static) default(none)
for(int row = 0; row < m_height; row++)
{
for(int col = 0; col < m_width; col++)
{
int RySqr, RxSqr;
SettingSigmaN(eta, m_RxInitial + col, m_RyInitial + row , RxSqr, RySqr);
FunctionUsing(RySqr,RxSqr);
}
}
void CImagePro::SettingSigmaN(int Eta, int x, int y, int &RxSqr, int &RySqr, int &returnValue)
{
int rSqr = GetRadius(x,y,RxSqr,RySqr);
returnValue = GetNumberFromTable(rsqr);
}
int CImagePro::GetRadius(int x, int y, int &RxSqr, int &RySqr)
{
if (x == m_RxInitial)
{
RxSqr = m_RxSqrInitial;
if (y == m_RyInitial)
{
RySqr = m_RySqrInitial;
}
else if (abs(y) % 2 == abs(m_RyInitial) % 2)
{
RySqr = RySqr + (y<<2) + 4; //(y+2)^2
}
}
else
{
RxSqr = RxSqr + (x << 1) + 1; //(x+1)^2
}
return clamp(((RxSqr+RySqr)>>RAD_RES_REDUCTION),0,(1<<(RAD_RES-RAD_RES_REDUCTION))-1);
}
ok 여기 내 코드가 있으며 내 문제는 GetRadius 함수 안에 있습니다. 나는 많은 스레드가 각 스레드가 x, y의 다른 위치에서 시작하기 때문에. 그러나 나는 정말로 GetRadius() 내부의 버그가 어디인지 이해하지 못한다.방사형 계산을 사용하는 openmp 버그
아마도 RySqr 계산이라고 생각했습니다. 디버깅 할 수있는 방법을 제안 해 주시겠습니까? 또는 내 문제를 볼 수 있습니까?
업데이트 :이 다른 스레드 사이의 점프가 왜 난 아직도 정말 이해가 안 :
이 내 코드의 대부분을 고정했다.
int CImagePro::GetRadius(int x, int y, int &RxSqr, int &RySqr)
{
if (x == m_RxInitial)
{
RxSqr = m_RxSqrInitial;
}
else
{
RxSqr = x * x;
}
if (y == m_RyInitial)
{
RySqr = m_RySqrInitial;
}
else if (abs(y) % 2 == abs(m_RyInitial) % 2)
{
RySqr = y * y;
}
return clamp(((RxSqr + RySqr) >> RAD_RES_REDUCTION), 0, (1 << (RAD_RES - RAD_RES_REDUCTION)) - 1);
}
단순히 병렬 처리하지 마십시오? 정말? 이것은 받아 들일 수있는 대답이 아닙니다. – Gilad