Одинаковые результаты на одних и тех же машинах - разные результаты на разных машинах / в ОС с использованием параллельной среды MATLAB
Я уверен, что правильно управляю генератором случайных чисел при анализе моих данных на моем ПК. Но когда я запускаю скрипт на другом сервере, я получаю другие результаты. И причина, по которой я считаю мой код правильным, заключается в том, что у меня есть полная воспроизводимость в машине. Одинаковые результаты в тех же машинах, всегда! Различные результаты при использовании сервера...
- Мой компьютер имеет Windows и один Intel i7 (4 ядра), в то время как сервер имеет Linux и один Intel XEON (8 ядер).
Я очень внимательно прочитал документацию, касающуюся parfor, и я делаю, чтобы назначать определенный номер Substream в каждой итерации, в соответствии с номером итерации, а не идентификатором работника.
Даже при попытке создать пул с одинаковым количеством рабочих (4) на 8-ядерном компьютере все равно получаю разные результаты...
Вот основной используемый код без лишних деталей.
myCluster = parcluster('local'); myCluster.NumWorkers = 4;
saveProfile(myCluster); parcluster('local')
parpool('local', 4)
spmd
rng(0,'combRecursive');
end
parfor iter = 1:10
stream = RandStream.getGlobalStream();
stream.Substream = (iter);
...
...
end
1 ответ
Вы уверены, что это уникально для анализа и параллельного выполнения кода? В общем, MATLAB не гарантирует, что бит-за-битом идентичные ответы в разных операционных системах из-за разных оптимизаций, которые системные и сторонние библиотеки используют в разных ОС. Более того, если две системы имеют разную архитектуру процессора, еще менее вероятно, что вы получите битовые идентичные ответы, потому что будут разные оптимизации для наборов команд каждого процессора.