Одинаковые результаты на одних и тех же машинах - разные результаты на разных машинах / в ОС с использованием параллельной среды 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 не гарантирует, что бит-за-битом идентичные ответы в разных операционных системах из-за разных оптимизаций, которые системные и сторонние библиотеки используют в разных ОС. Более того, если две системы имеют разную архитектуру процессора, еще менее вероятно, что вы получите битовые идентичные ответы, потому что будут разные оптимизации для наборов команд каждого процессора.

Другие вопросы по тегам