У меня вопрос относительно измерений времени выполнения в параллельных программах (я использовал C++, но я думаю, что вопрос более общий).Измерение времени параллельного вычисления для взаимозависимых потоков
Некоторые короткие пояснения: 3 потока работают параллельно (pthread), решая одну и ту же проблему по-разному. Каждый поток может передавать информацию другому потоку (например, частичные решения, полученные одним потоком, но не другим) для ускорения других потоков, в зависимости от его собственного состояния/доступной информации в его собственных расчетах. Весь процесс останавливается, как только первый поток готов. Теперь я хотел бы иметь уникальное измерение времени для оценки времени выполнения от начала до устранения проблемы. (В конце концов, я хочу определить, будет ли использование синергетических эффектов параллельным вычислением быстрее, чем вычисление на одном потоке).
На мой взгляд, проблема в том, что (из-за того, что операционная система приостанавливает/приостанавливает отдельные потоки), точка, когда информация передается в процессе, не детерминирована в каждом состоянии процесса. Это означает, что некоторая информация получена после xxx единиц времени процессора в потоке 1, но она не может контролироваться, независимо от того, получает ли поток 2 эту информацию после yyy или zzz единиц времени процессора, затраченного на его вычисления. Предполагается, что эта информация в любом случае завершила бы расчет потока 2, время выполнения потока 2 было либо yyy, либо zzz, в зависимости от действия операционной системы.
Что я могу сделать для получения детерминированного поведения для сравнения времени выполнения? Могу ли я заказать операционную систему для запуска каждого потока «без помех» (на многоядерном компьютере)? Есть ли что-то, что я могу сделать для реализации (C++) - основы?
Или существуют другие понятия для оценки времени выполнения (времени) таких реализаций?
С наилучшими пожеланиями Мартин
Вы проверяли производительность установки путем сопоставления каждого потока с конкретным ядром? –
Нет, я не знал об этой возможности (попробуем это сейчас). Хотя я не уверен, может ли ОС по-прежнему вмешиваться в нее, либо загружая разные задачи на эти ядра, либо обмениваясь данными между этими ядрами недетерминированным образом. – Martin
для номинальной рабочей нагрузки, я не подозреваю, что переключение контекста и сопоставление других потоков могут вызвать проблемы с производительностью для вашего потока. Однако загрязнение кэша из-за ОС и других приложений может привести к большому ухудшению производительности. Я не слишком уверен в точных цифрах. –