Выявление причины может быть затруднено, равно как и выявление возникновения проблемы такого типа.
Я подозреваю, что кеширование кода может повысить производительность, так что если связанные подпрограммы будут распределены по всей памяти, то "может быть "наказание за производительность.Выявить задержки, связанные с кэшем, трудно.
Если это объяснение, то изменение порядка подпрограмм, добавляемых при связывании, может показать некоторые изменения.Примерами этого возможного подхода являются включение ddotp вблизи сокращения уравнения и может быть эффективной обратная замена daxpy вблизи уравнения.
По сути, этот подход заключается в связывании подпрограмм внутреннего цикла рядом с вызывающей подпрограммой.При разработке кода это часто имеет место.Вы не указали свой подход к оформлению заказа;алфавитный будет плохим подходом, основанным на этом предположении.Код FEM лучше описать как полилитический, поэтому этот подход должен быть доступен.Я экспериментировал с несколькими версиями служебных подпрограмм с высоким уровнем использования, помещая их в код, такие как решатели дубликатов уравнений для итерации Eigen подпространства или решения прямой интеграции, где внутренние циклы составляют большую долю времени решения.
Эксперименты с процессорами с разной скоростью памяти / пропускной способностью или размером кэша могут дать интересное сравнение.Однако стратегии кеширования для управления памятью в массивах разделов должны быть более продуктивными, чем экспериментирование с порядком компоновки.
Другая проблема связана с тем, оптимизирует ли компилятор рутинные вызовы или включает в себя некоторые тривиальные подпрограммы.Вы не указали свои параметры компиляции или компилятор, чтобы определить, возможна ли такая возможность.
Я надеюсь, что этот ответ предоставит некоторые возможные области для дальнейшего исследования, но не предоставит четкого объяснения вашей проблемы.