Я использую MPI-программу, которая будет равномерно разделять огромное пространство выборки на рабочие потоки и выполнять работу параллельно. Я использую следующий скрипт для отправки своей работы.
#!/bin/bash
#PBS -l nodes=NNODES
mpirun -np NPROC ./run >log
Я обнаружил на своей веб-странице кластера, что у нас есть 10 ядер на узел. Я наивно предполагаю, что если мне нужно 100 рабочих потоков (NPROC), мне просто нужно запросить 10 узлов (NNODES). Однако я обнаружил, что время работы программы продолжало уменьшаться, когда я увеличивал NNODES.
Я предполагаю, что это связано с меньшей конкуренцией ресурсов при выделении 1 вместо нескольких рабочих потоков на узел. Если это правда, я думал, что время стены будет выравниваться, когда NNODES==100(NPROC) также, потому что теперь у нас будет 1 рабочий поток на узел, и это не уменьшит время стены, если у нас будет больше узлов. чем запрошенные рабочие потоки.
Однако я снова ошибаюсь, потому что дальнейшее увеличение NNODES выше 100 (NPROC) почти линейно еще больше сокращает время стены. Это действительно смутило меня, потому что исходный код действительно считывает NPROC из приведенного выше сценария и разбивает на них образцы, и я не могу понять, почему запрос большего количества узлов, чем рабочих потоков, ускорит работу.