Я распараллелил программу, которая использует довольно большие матрицы. Программа изображает модель Изинга из статистической механики. На моем ноутбуке все работает нормально - даже визуализация показывает поведение, которое я ожидаю. Теперь я хотел посмотреть, как он масштабируется с использованием многих процессоров, поэтому я использовал кластерный компьютер, который у меня под рукой. Ну, я получаю супер линейное ускорение. Сначала я подумал, что это не имеет большого значения, поскольку возможно, что при использовании нескольких процессов размер проблемы уменьшается и, следовательно, может помещаться в кэш. Таким образом, копирование из кэша в оперативную память и обратно не замедлит работу. Тем не менее, я даже получаю супер линейное ускорение для одного процессора. Я бы не ожидал этого. Если вся система (матрица) не помещается в кэш для последовательной версии, то она также не должна вписываться в нее, используя параллельную версию только с одним процессором, верно?
Я проверил свой ноутбук. В среднем за 5 запусков параллельная версия с одним ЦП чуть медленнее, чем последовательная. Я думаю, это нормально, поскольку в параллельной версии есть некоторые утверждения, которых нет в последовательной.
Есть идеи, о чем это может быть? Разумно ли супер линейное ускорение?
Примечание: я программирую на python, используя numpy и для параллельной версии, процессов и shmarray.