doParallel: ядра против сокетов и другие вопросы - PullRequest
0 голосов
/ 17 декабря 2018

Я новичок в параллельной обработке и у меня есть несколько вопросов.Я работаю на удаленном виртуальном рабочем столе Windows 10, поэтому я использую сокеты, а не вилки.Удаленный рабочий стол имеет 12 ядер и 64 Гбайт доступной памяти.

a.Мой первый вопрос касается того, что создается, когда запускается RegisterDoParallel (cores = 4)?Параметр «cores» подразумевает, что фактически создается кластер из ядер.Но я прочитал, что можно предусмотреть больше ядер, чем имеется в кластере настольных компьютеров.Поэтому я подозреваю, что на самом деле создаются 4 новых процесса, каждый из которых может быть назначен системным планировщиком для выполнения на отдельном ядре, а не для непосредственного использования четырех ядер.Это актуально по нескольким причинам.Если, когда я создаю кластер, он на самом деле кооптирует ядра, то я бы неохотно настраивал кластер из 10 «ядер», чтобы я не кооптировал их использование другими пользователями на других виртуальных рабочих столах на том же хост-компьютере.кластер.С другой стороны, если я создаю только 10 процессов, которые могут быть назначены системным планировщиком, то не возникает проблем с "включением" ядер.Я буду использовать только 10 ядер, если системный планировщик имеет 10 свободных ядер, чтобы назначить мои процессы для выполнения.В том же духе, если я на самом деле претендую на 10 ядер, важно, чтобы я освободил кластер, как только моя функция вернется.Однако, если все, что я делаю, - это создаю 10 процессов, это не замедляет другие, если, когда моя функция возвращается, я просто оставляю процессы открытыми, но без работы и поэтому игнорируется системным планировщиком.В общем, я прав, что RegisterDoParallel (cores = 4) только создает процессы для системного планировщика, чтобы назначить ядру, а не назначать работу фактическому ядру?

b.stopImplicitCluster () останавливает неявный кластер.Но документация не объясняет, что такое неявный кластер.Верно ли, что это неназванный кластер, созданный RegisterDoParallel (cores = 4), а не именованный кластер, созданный RegisterDoParallel (cl), где cl <- makeCluster (4)? </p>

c.Когда я наблюдаю за выполнением функции «doeach» с помощью диспетчера задач, оказывается, что когда я использую RegisterDoParallel (cores = 4) для создания кластера, когда процесс завершает свою работу, он довольно скоро уничтожается системой (илиболее вероятно, что сам завершает работу), так что запуск stopImplicitCluster () не кажется необходимым.Правильно ли я по этому поводу?

d.Если я запускаю RegisterDoParallel (cores = 4), запускаю функцию и запускаю stopImplicitCluster (), а затем запускаю getDoParWorkers (), мне все равно сообщают, что доступны 4 «рабочих».Я знаю, что могу сбросить это до 1, запустив registerDoSEQ ().Код для getDoParWorkers () просто читает что-то в списке вариантов где-то.Не должны ли stopImplicitCluster () и stopCluster () сбросить эту опцию на 1?

Заранее спасибо всем, кто сможет ответить на поставленные выше вопросы авторитетно.Мне нравится понимать, что я прошу, чтобы мой компьютер делал, когда я что-то кодирую.Ларри Хунсикер

...