2013-10-13 3 views
0

Скажем, у меня есть циклКак OpenMP разделяет цикл на потоки?

for(int i = 0; i < 1000; i++){ 
    sum += i; 
} 

И если я использую OpenMP, чтобы ускорить его, как это цикл отображается на 4-х различных ядер?

Я знаю, что он использует вилку и соединяется, я имею в виду, что это i = 0 для ядра 0, i = 1 для ядра 1 и т. Д. Или i = 0 для ядра 0, i = 249 для ядра 1, i = 499 для сердечника 2 и т.д.

Спасибо,

Боба

+0

Просто проверьте вики http://en.wikipedia.org/wiki/OpenMP. Он использует модель объединения вил – pyCthon

+0

@pyCthon Я знаю, что она использует fork и join, я имею в виду, что это как i = 0 для ядра 0, i = 1 для ядра 1 и т. Д. Или i = 0 для ядра 1, i = 249 для ядра 2, i = 499 для ядра 3 и т. Д. – dorafmon

+0

@dorafmon см. [Разделение OpenMP для циклов над ядрами] (http://stackoverflow.com/questions/8312563/openmp-divide-for-loop-over-corees) – Gangadhar

ответ

1

по this presentation это зависит от реализации компилятора, а не OpenMP спецификации, но компилятор будет, вероятно, использовать я = 0 для ядра 0, я = 249 для сердечника 1 и т. Д.

enter image description here

Также убедитесь, что вы являетесь переменной уменьшения для sum, иначе у вас есть условие гонки в вашем примере.

Смежные вопросы