MPI для многоядерного?

Ах, у вас есть немного нового материала в качестве другой альтернативы. Это местное хранилище, и работает там, где угловые работы. Пожалуйста. (Но действительно, спасибо парню)

https://github.com/gsklee/ngStorage

Определите свои значения по умолчанию:

$scope.$storage = $localStorage.$default({
    prop1: 'First',
    prop2: 'Second'
});

Доступ к значениям:

$scope.prop1 = $localStorage.prop1;
$scope.prop2 = $localStorage.prop2;

Сохранение значений

$localStorage.prop1 = $scope.prop1;
$localStorage.prop2 = $scope.prop2;

Не забудьте ввести ngStorage в ваше приложение и $ localStorage в вашем контроллере.

24
задан Todd Gamblin 6 April 2009 в 22:28
поделиться

6 ответов

Я использовал MPI экстенсивно на больших кластерах с многоядерными узлами. Я не уверен, является ли это правильная вещь для единственного многоядерного поля, но если Вы ожидаете, что Ваш код может однажды масштабироваться больше, чем однокристальная схема, Вы могли бы рассмотреть реализацию его в MPI. Прямо сейчас ничто не масштабируется больше, чем MPI. Я не уверен, куда плакаты, кто упоминает недопустимые издержки, прибывают из, но я попытался дать обзор соответствующих компромиссов ниже. Продолжайте читать для больше.

MPI является фактическим стандартом для крупномасштабных научных расчетов, и это уже находится в широком употреблении на многоядерных машинах. Это очень быстро. Смотрите на новые Лучшие 500 списков . Лучшие машины в том списке имеют, в некоторых случаях, сотни тысяч процессоров, с двойным мультисокетом - и четырехъядерные узлы. Многие из этих машин имеют очень быстро пользовательские сети (Торус, Сетка, Дерево, и т.д.) и оптимизированные реализации MPI, которые знают об аппаратных средствах.

, Если Вы хотите использовать MPI с однокристальной многоядерной машиной, он будет хорошо работать. На самом деле последние версии Mac OS X идут OpenMPI, предварительно установленный, и можно загрузить установку OpenMPI довольно безболезненно на обычной многоядерной машине Linux. OpenMPI используется в Лос-Аламос в большинстве их систем. Ливермор использование mvapich на их кластерах Linux. То, что необходимо иметь в виду прежде, чем погрузиться в, - то, что MPI был разработан для решения крупномасштабных научных проблем на распределенная память системы. Многоядерные поля, с которыми Вы имеете дело, вероятно, имеют общая память .

OpenMPI и другие реализации используют общую память для локальной передачи сообщений по умолчанию, таким образом, Вы не должны волноваться о сети наверху при передаче сообщений локальным процессам. Это довольно прозрачно, и я не уверен, где другие плакаты получают свои опасения по поводу высоких издержек. Протест состоит в том, что MPI не самым легким вещь, которую Вы могли использовать для получения параллелизма на единственном многоядерном поле. В MPI вся передача сообщений является явной. Это назвали "ассемблером" параллельного программирования поэтому. Явная коммуникация между процессами не легка, если Вы не опытное человек HPC , и существуют другие парадигмы, более подходящие для общей памяти ( UPC, OpenMP и хорошие языки как Erlang для именования некоторых), что Вы могли бы попробовать сначала.

Мой совет состоит в том, чтобы пойти с MPI, если Вы ожидаете писать параллельное приложение, которому, возможно, понадобятся больше, чем единственная машина для решения. Вы будете в состоянии протестировать и хорошо работать с регулярным многоядерным полем, и мигрирующий на кластер будет довольно безболезненным, как только Вы получаете его работающий там. Если Вы пишете приложение, для которого будет только когда-либо нужна единственная машина, попробовать что-то еще. Существуют более легкие способы использовать такой параллелизм.

Наконец, если Вы чувствуете себя действительно предприимчивыми, MPI попытки в сочетании с потоками, OpenMP или некоторой другой локальной парадигмой общей памяти. Можно использовать MPI для распределенной передачи сообщений и что-то еще для параллелизма на узле. Это - то, куда большие машины идут; будущие машины с сотнями тысяч процессоров или больше, как ожидают, будет иметь реализации MPI, которые масштабируются ко всему узлы , но не все ядра, и люди HPC будут вынуждены создать гибридные приложения. Это не для слабонервных, и существует большая работа, которая будет сделана, прежде чем будет принятая парадигма в этом пространстве.

65
ответ дан Todd Gamblin 28 November 2019 в 22:18
поделиться

Нет, по-моему, это является неподходящим для большей части обработки, Вы сделали бы в многоядерной системе. Издержки слишком высоки, объекты, которые Вы раздаете, должны быть глубоко клонированы, и раздающий графики больших объектов, чтобы тогда выполнить очень маленькое вычисление очень неэффективно. Это действительно предназначено для обмена данными между отдельными процессами, чаще всего выполнением в отдельных пространствах памяти и чаще всего выполнением долгих вычислений.
многоядерный процессор А является машиной общей памяти, таким образом, существуют намного более эффективные способы сделать параллельную обработку, которые не включают копирование объектов и где большинство потоков, выполненных в течение очень маленького времени. Например, думайте о многопоточном Quicksort. Издержки выделения памяти и копирования данных к потоку, прежде чем это сможет быть partioned, будут намного медленнее с MPI и неограниченный количество процессоров, чем Quicksort, работающий на единственном процессоре.
Как пример, в Java, я использовал бы BlockingQueue (конструкция общей памяти), для передачи объекта ссылки между потоками, с очень мало служебным.
Не то, чтобы это не имеет своего места, посмотрите, например, кластер поиска Google, который использует передачу сообщений. Но это - вероятно, не проблема, которую Вы пытаетесь решить.

3
ответ дан Tony BenBrahim 28 November 2019 в 22:18
поделиться

Я бы согласился с Тгамблином. Вероятно, вам придется засучить рукава и по-настоящему копаться в коде, чтобы использовать MPI, явно обрабатывая организацию передачи сообщений самостоятельно. Если это то, что вам нравится или не против, я думаю, что MPI будет работать так же хорошо на многоядерных машинах, как и на распределенном кластере.

Если говорить из личного опыта ... Я написал код C в аспирантуре, чтобы провести крупномасштабное моделирование электрофизиологических моделей в кластере, где каждый узел сам был многоядерной машиной. Поэтому для решения этой проблемы я подумал о нескольких различных параллельных методах.

1) Я мог бы использовать только MPI, рассматривая каждый процессор как свой собственный «узел», даже если некоторые из них сгруппированы на одной машине.

2) Я мог бы использовать MPI для обработки данных, перемещающихся между многоядерными узлами, а затем использовать многопоточность (потоки POSIX) внутри каждой многоядерной машины, где процессоры разделяют память.

Для конкретной математической задачи, над которой я работал, я протестировал две формулировки сначала на одной многоядерной машине: одну с использованием MPI и одну с использованием потоков POSIX. Как оказалось, реализация MPI была намного более эффективной, что дало ускорение, близкое к 2, для двухъядерной машины, а не 1,3-1,4 для многопоточной реализации. Для кода MPI я смог организовать операции так, чтобы процессоры редко находились в режиме ожидания, оставаясь занятыми, пока между ними передавались сообщения, и маскировали большую часть задержки при передаче данных. Благодаря многопоточному коду я столкнулся с множеством узких мест в мьютексах, которые заставляли потоки часто сидеть и ждать, пока другие потоки завершат свои вычисления. Сохранение вычислительной нагрузки между потоками не помогло этому факту.

Это могло быть характерно только для моделей, над которыми я работал, и эффективность многопоточности в сравнении с MPI, вероятно, сильно различалась бы для других типов параллельных задач. Тем не менее, я бы не согласился с тем, что MPI имеет громоздкие накладные расходы.

11
ответ дан gnovice 28 November 2019 в 22:18
поделиться

MPI не является неэффективным. Вам нужно разбить проблему на куски, передать их и реорганизовать, когда результат будет завершен для каждого чанка. Никто из здравомыслящих людей не будет обходить весь объект через MPI, когда над каждым потоком работает только часть проблемы. Это не неэффективность интерфейса или шаблона проектирования, что неэффективность знаний программистов о том, как решить проблему.

Когда вы используете механизм блокировки, накладные расходы на мьютекс плохо масштабируются. это связано с тем, что подчеркивающая очередь выполнения не знает, когда вы собираетесь заблокировать поток следующим. Используя мьютекс, вы будете выполнять больше действий на уровне ядра, чем шаблон проектирования передачи сообщений.

3
ответ дан Signal9 28 November 2019 в 22:18
поделиться

MPI имеет очень большую сумму издержек, прежде всего, для обработки межпроцессного взаимодействия и неоднородных систем. Я использовал его в случаях, куда небольшое количество данных раздается, и где отношение вычисления к данным является большим. Это не типичный сценарий использования для большей части потребителя или бизнес-задач, и в любом случае, как предыдущий ответ упомянул на архитектуре общей памяти как многоядерная машина, существуют значительно более быстрые способы обработать его, такие как указатели памяти.

, Если у Вас была своего рода проблема со свойствами, описывают выше, и Вы хотите быть в состоянии распространить задание вокруг к другим машинам, которые должны быть в той же высокоскоростной сети как сами, тогда возможно, MPI мог иметь смысл. Мне нелегко воображать такой сценарий все же.

1
ответ дан Jan 28 November 2019 в 22:18
поделиться

Я лично принимал Эрланга (и мне нравится до сих пор). Подход, основанный на сообщениях, кажется, соответствует большей части проблемы, и я думаю, что это будет одним из ключевых моментов для многоядерного программирования. Я никогда не знал о накладных расходах MPI и спасибо за указание на это

1
ответ дан Bharani 28 November 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: