Предложение «private» применяется к самому низкому расписанию (банда, рабочий, вектор), используемому для примененного l oop.
Таким образом, «l oop частная банда (обр.») Будет иметь личный массив для каждой банды, который распределяется между рабочими и векторами в этой банде.
A "l oop gang worker private (arr .. "будет иметь личный массив для каждого работника, который будет использоваться среди векторов этого работника.
" l oop gang worker vector private (arr .. "будет иметь личный массив для каждого вектора, который не является общим.
Для случая # 1 число созданных частных массивов будет зависеть от расписания l oop, применяемого компилятором. Если вы используете PGI компилятор, посмотрите на сообщения обратной связи компилятора (-Minfo = accel), чтобы увидеть, как планировалось l oop. Если бы это была опечатка, и вы намеревались включить сюда «банду», то число частных массивов будет равно количество банд.
Для # 2 у вас есть расписание "рабочий банды", поэтому число частных массивов будет произведено на количество банд и количество рабочих.
Для # 3, у вас есть «вектор рабочего банды» Таким образом, число частных массивов будет произведено на число банд, количество рабочих и длину вектора.
Обратите внимание, что в целом я не рекомендую использовать «num_workers» или «vector_length», за исключением более продвинутой настройки производительности, когда известно, что размер внутренних циклов меньше размера по умолчанию или при настройке для использования реестра. В противном случае вы ограничиваете параллельность кода.
Я также использую "num_gangs" очень редко. Это имеет смысл использовать только тогда, когда у вас очень большое количество (или размер) частных массивов, а ограничение количества банд позволяет частным массивам помещаться в память графического процессора. Кроме того, в очень редких случаях, когда количество банд необходимо фиксировать для алгоритма (например, для ГСЧ).