diff --git a/cxx/isce3/geometry/RTC.cpp b/cxx/isce3/geometry/RTC.cpp index 5a65e7e9e..6005b5d4b 100644 --- a/cxx/isce3/geometry/RTC.cpp +++ b/cxx/isce3/geometry/RTC.cpp @@ -270,18 +270,16 @@ void _normalizeRtcArea(isce3::core::Matrix& numerator_array, pyre::journal::info_t& info) { info << "normalizing gamma-naught area..." << pyre::journal::endl; - _Pragma("omp parallel for schedule(dynamic) collapse(2)") - for (int i = 0; i < numerator_array.length(); ++i) + // Each (i, j) is read and written by exactly one iteration, so no + // atomics are required. Row-wise static scheduling avoids per-pixel + // dynamic dispatch overhead. + _Pragma("omp parallel for") + for (int i = 0; i < numerator_array.length(); ++i) for (int j = 0; j < numerator_array.width(); ++j) { const float denominator_value = denominator_array(i, j); - if (denominator_value == 0) { - _Pragma("omp atomic write") - numerator_array(i, j) = - std::numeric_limits::quiet_NaN(); - continue; - } - _Pragma("omp atomic update") - numerator_array(i, j) /= denominator_value; + numerator_array(i, j) = denominator_value == 0 + ? std::numeric_limits::quiet_NaN() + : numerator_array(i, j) / denominator_value; } }