Я собираюсь опустить здесь много «не относящихся к делу» деталей, чтобы помочь людям сконцентрироваться на актуальном вопросе.
У меня есть проект Swift, который включает в себя множество вычислений (численная интеграция и многопараметрические параметры).лучше всего подходит и т. д.).Чтобы ускорить процесс, я намереваюсь использовать параллельную обработку.
Используя классы XCTest, я обнаружил, что с моим замыканием, вызывающим функцию, определенную в моем модуле, если я использую DispatchQueue.concurrentPerform с одной итерацией, требуетсявремя т.Когда повторяется с 5 итерациями, он работает примерно на 5% медленнее (я доволен этим).
Примечание: функция является статической функцией для структуры (моя коллекция процедур исчисления).
Однако, если я помещу функцию в отдельный модуль и импортирую ее, повторение теста с 1 итерацией займет аналогичное время t.Но теперь, когда я пытаюсь сделать это с 5 итерациями, вызов занимает в два раза больше времени (на 105% медленнее).
Swift версия: 4.2.1 ОС: macOS 10.14.3 Xcode 10.1 Процессор: 6-ядерный Core i7(Mac mini 2018)
Все «объекты» - это структуры и типы значений, используемые повсеместно, кроме ссылки на функцию.
Еще раз краткая сводка: с использованием DispatchQueue.concurrentPerform () , по сравнению с базовым временем для 1 итерации определенной функции тот же модуль , 5 итераций на 5% медленнее .Однако при выполнении того же процесса с использованием функции, которая была определена в импортированном модуле , базовое время остается неизменным в течение 1 итерации, но 5 итераций на 105% медленнее .
Кто-нибудь может объяснить, почему это происходит, и, надеюсь, предложить способ избежать этого замедления, сохраняя мою коллекцию в импортируемом модуле?
Не стесняйтесь задавать вопросы, если вам нужна дополнительная информация.