разделяемая память против распределенной памяти и многопоточность против многопроцессорности
-
06-07-2019 - |
Вопрос
Я изучаю параллельное программирование самостоятельно. Интересно, распределенная память всегда многопроцессная, а многопоточность всегда разделяемая память? если многопроцессорность может быть как для распределенной памяти, так и для разделяемой памяти? Спасибо и всего наилучшего!
Решение
Да, да, и "да, в некотором смысле"
В распределенной системе памяти разные процессорные модули имеют свои собственные системы памяти. Доступ из другого процессора, скорее всего, будет медленнее или с более ограниченной моделью когерентности, если это вообще возможно. Это будет более типично для мультипроцессора с передачей сообщений.
Использование нескольких потоков для параллельного программирования - это скорее программная парадигма, чем аппаратная проблема, но вы правы, использование термина thread по существу указывает, что используется одна общая память, и это может включать или не включать фактические несколько процессоров. Он может даже не включать несколько потоков ядра, и в этом случае потоки не будут выполняться параллельно. Р>
Мне не совсем понятно значение последнего вопроса. Конечно, говоря «распределенная память»; или «разделяемая память»; это подразумевает «распределено по процессорам»; и «разделяемый процессорами», поэтому я полагаю, что термины применимы только к многопроцессорным или потенциально многопроцессорным системам. Если мы говорим о нескольких процессах в программном смысле, я думаю, что это в значительной степени требование для систем с распределенной памятью и, по сути, требование (они могут быть называемыми потоками) для системы с общей памятью. р>
Я должен добавить, что когерентные системы с распределенной памятью, но с кешем существуют, и являются типом многопроцессорной конструкции с общей памятью, называемой NUMA. Всего несколько лет назад эти машины были сумасшедшей границей параллельных вычислений, но теперь процессоры Intel Core i7 имеют принес NUMA в мейнстрим.