Говоря только об OpenMP: стандарт ничего не говорит о порядке, в котором применяются операции сокращения, и, действительно, он может даже различаться при каждом выполнении кода.(Некоторые среды выполнения OpenMP, такие как LLVM / Intel, реализуют детерминированное сокращение *, но гарантируют только детерминизм между запусками с одинаковым количеством потоков).
Если вы хотите отсортировать или выполнить сокращение другими способами, вам нужно будет реализовать это самостоятельно ...