Я пытался использовать параллелизацию для запуска некоторых симуляций с помощью программного обеспечения моделирования MEEP немного быстрее. По умолчанию программное обеспечение использует только один процессор, а симуляции FDTD легко ускоряются путем распараллеливания. В конце концов я обнаружил, что нет никакой разницы между запуском 1 или 4 ядер, время моделирования было одинаковым.Непрерывное параллельное выполнение, без ускорения (MEEP, openMPI)
Я тогда решил, что вместо этого я буду запускать отдельные симуляции на каждом ядре, чтобы увеличить общую пропускную способность моделирования (например, одновременно запустить 4 разных моделирования).
Удивительно то, что когда я начинаю новую симуляцию, уже начатые имитации замедлятся, хотя они работают на отдельных ядрах. Например, если я запускаю только 1 симуляцию на 1 ядро, каждый временной шаг моделирования FDTD занимает около 0,01 секунды. Если я начну другой процесс на другом ядре, каждая симуляция теперь будет тратить 0,02 секунды на шаг времени и так далее, что означает, что даже когда я запускаю разные симуляции, которые не имеют ничего общего друг с другом на отдельных ядрах, все они замедляются, чистое увеличение скорости.
Я не обязательно ищу помощь в решении этой проблемы, так как я ищу ее, чтобы понять ее, потому что она достигла своего любопытства. Каждый экземпляр моделирования требует менее 1% от моей общей памяти, поэтому это не проблема памяти. Единственное, о чем я могу думать, это то, что ядра, использующие кеш-память, или насыщенность полосы пропускания памяти, есть ли способ проверить, так ли это?
Моделирование довольно простое, и я запускал программы, которые намного больше голода, чем этот, и имели большое ускорение с распараллеливанием.
Любые советы, которые помогут мне понять это явление?
Вы должны использовать соответствующий инструмент для чтения счетчиков производительности оборудования, которые могут указывать на общие ресурсы как узкое место.Существует много [параллельных] (https://stackoverflow.com/questions/10607750/tools-to-measure-mpi-communication-costs/10608276) [tools] (https://stackoverflow.com/questions/18191635/good -profiler-для-Fortran-и-MPI/18205748). Но если вы просто запускаете приложения отдельно, вы можете использовать что-то простое, например [perf] (https://perf.wiki.kernel.org/index.php/Tutorial#Sampling_with_perf_record). – Zulan
Ваш анализ - хороший старт, но есть и другие возможные проблемы: уменьшенная частота турбонаддува, гиперпотоки/модули bulldozer AMD, но без более конкретной информации о системе и приложении невозможно сообщить – Zulan
, какая длина данных? 100 МБ? попытайтесь заставить все ядра работать только с частью 1 Мб, а затем, когда закончите, продолжайте в другой части. Таким образом, когда ядро доступа к ячейке, другое ядро может обращаться к нему как к соседству с другой ячейкой. –