Можно ли использовать оперативную память с других компьютеров для поддержки параллельных вычислений Mathematica Light Grid Server 7? Если так, то как?
1 ответ
Mathematica реализует параллельные вычисления, используя несколько ядер (несколько процессов), которые могут даже работать на разных машинах. Существует одно основное ядро, с которым вы взаимодействуете напрямую, и несколько подядер (управляемых основным ядром), которые выполняют эту работу.
Итак, короче говоря: у вас не может быть прямого доступа к памяти других машин, но вы можете полностью использовать его, запустив на каждом компьютере свое ядро.
Вы не упомянули конкретную проблему, которую пытаетесь решить, но если вам нужно обработать большой набор данных, который не помещается в память одной машины параллельно, вы можете сделать это:
- Сначала разбейте данные на управляемые куски.
Пусть каждое из подъядеров загрузит чанк и обработает его, получив результат, который не занимает много памяти.
Есть несколько способов управления подъядерами от полностью ручного до полностью автоматического.
ParallelEvaluate[]
предоставит вам детальный контроль над каждым ядром. Вы также можете использовать переменную$KernelID$
чтобы решить, какая часть набора данных должна быть загружена в каждое ядро. Пожалуйста, смотрите документацию для деталей.Наконец, результаты либо будут собраны в основное ядро (если результат не занимает много памяти), либо будут записаны на диск из каждого подядра (если результат такой же большой, как входные данные)
Один важный момент: чтобы явно запретить автоматическое распределение некоторых переменных между ядрами (и захватить ценную память), вам нужно поместить их в отдельный контекст, как описано здесь и в ссылках в нем.