Что происходит на оборудовании при запуске параллельной программы

Например, машина имеет два процессора, и каждый процессор имеет два ядра. Я пишу параллельную программу с помощью OpenMP и запускаю ее в 3 потока. Что происходит на оборудовании? Я думаю, что с программой будет работать только один процессор (правильно?), но я не могу представить, как три потока распределяются по двум ядрам. Пожалуйста помоги. Спасибо.


person Juneyee    schedule 04.08.2013    source источник


Ответы (1)


Почти невозможно ответить на ваш вопрос в рамках «ответа» SO - вам нужно будет прочитать о реализации параллельной обработки для конкретной архитектуры вашей машины, если вы хотите получить «настоящий» ответ. Короткий ответ: «это зависит». Но ваша программа может работать на обоих процессорах, на любом из четырех ядер или на всех; Ключ к пониманию здесь заключается в том, что вы можете в какой-то степени контролировать это с помощью структуры вашей программы, но прелесть OMP заключается в том, что обычно «вам должно быть все равно». Если потоки работают одновременно, каждый из них обычно получает ядро; но если им нужен доступ к тому же пространству памяти, это может замедлить вас, поскольку «краткосрочные данные» любят жить в кеше процессора (ядра), а это означает, что происходит много перетасовки данных. Вы получите наибольший прирост производительности, если разные потоки НЕ должны совместно использовать память.

person Floris    schedule 04.08.2013
comment
Меня немного смущает, как оба процессора могут иметь копии программы. Не могли бы вы порекомендовать мне какие-нибудь статьи или книги? Спасибо! - person Juneyee; 05.08.2013
comment
Большинство инструкций живут в памяти. В многопоточной программе диспетчер дает указание ядру 2 процессора 3 выполнить инструкции, хранящиеся в памяти, начиная с 0x00123400. Через миллисекунду он может сказать, что пока достаточно, сохраните свое состояние и займитесь другими делами. Извините, на ум не приходят немедленные рекомендации книг. - person Floris; 05.08.2013
comment
Привет @Floris, насколько я понимаю, если есть связь между процессорами (здесь не ядра, давайте предположим, что ядра находятся внутри процессоров), программа должна быть написана с помощью MPI. Что, если я использую только OpenMP для написания программы? Система распределяет задание только на один процессор или на несколько разных процессоров? Я думаю, что у каждого процессора есть своя собственная память, и у них также есть общая память, и я не думаю, что процессоры должны использовать общую память для работы ТОЛЬКО с программой OpenMP. Я в любом случае не совсем в этом уверен... - person Juneyee; 05.08.2013
comment
Программы, написанные с помощью OMP, могут использовать все ядра на всех процессорах. - person Floris; 05.08.2013