У меня есть рандомизированная программа с последовательными и параллельными вариантами. Природа этой программы такова, что время ее выполнения сильно зависит от ее "удачи". Он регулярно принимает значения от 1 секунды до 2 минут в, казалось бы, геометрическом шаблоне распределения. Параллельные варианты показывают аналогичное поведение с разными номерами.
Каким же «хорошим» способом измерить параллельное ускорение в этом случае? У меня есть возможность просто использовать среднее / медианное значение измеренных значений как репрезентативное для «времени выполнения».
Как бы я объяснил такой подход и есть ли (статистически / математически) лучший способ рассчитать ускорение?
РЕДАКТИРОВАТЬ: Спасибо user3666197, который отметил некоторые очень важные технические детали, необходимые для получения хороших данных. Я сделал домашнее задание и хочу уточнить свой вопрос.
Я сделал свой тестовый процесс максимально надежным:
- тесты выполняются с семенами, с которыми можно воспроизводить результаты.
- каждая конфигурация повторяется несколько раз (~ 400 раз) с разными начальными числами внутри скрипта
У меня остается вопрос: Как подойти к расчету ускорения для этой программы.
Что я сделал:
Среднее время последовательной работы составляет около 8,38, медиана - 4,8, что является большой разницей. Для 2 потоков среднее время выполнения составляет 4,36, а среднее время выполнения - 2,42. Если я разделю последовательное на параллельное, я получу ускорение на 1,92 (среднее значение) и 1,992 (среднее значение). Для 4 потоков аналогично: означает: время выполнения 2,25 и 3,72 ускорения, медианы: 1,12 медиана и 4,3 ускорения (суперлинейная). Аналогичные числа существуют для 8 потоков.
Я пытаюсь визуализировать данные по-разному. Графики
Гистограмма показывает распределение времени выполнения с использованием различных потоков, как и прямоугольная диаграмма справа. Видно, что видно некоторое ускорение.
Если я объединю измерения на основе семян, я получу пары времен: последовательное и параллельное. Одна из моих первых идей заключалась в том, чтобы вычислить ускорение путем вычисления наклона линии регрессии, однако кажется, что линия регрессии не «суммирует» данные должным образом и имеет ограниченную ценность. На нижнем правом графике показаны только точки для 4 потоков.
/usr/bin/time
. Однако использование любой другой метрики мало что изменит: программе может повезти быстро добраться до решения или может потребоваться больше времени для выполнения своей задачи на основе раздачи. - person Samuel Pilz   schedule 01.03.2018