У меня есть путаница или, возможно, неправильное понимание поведения parallel for
с расписанием static
и размером блока по умолчанию.
Например, на картинке ниже. Что я исключаю, так это то, что да, главный поток выполнит дополнительную итерацию, но я исключил, что это будет индекс 8, а не 2!
Алгоритм статического расписания с размером фрагмента по умолчанию применяет циклический перебор к (#iterations / #threads) с двумя случаями.
Если #iterations делится на #threads, например N=8 и #threads=4, каждый поток будет выполнять равное количество итераций в циклическом режиме (прямой случай)
Если #iterations не делится на #threads. Он рассчитает ближайшее целое число итераций, деленное на #threads, и сделает то же самое, что и выше.
случай N=9 --> 8 разделит 2 2 2 2 и 1
в случае N=11 --> 12 он будет разделен на 3 3 3 и 2
темы 0 1 2 3