Круто завернул, товарисч. И не поспоришь и не буду.
Отмечу, что pinc — это всего лишь инструмент. Если есть идеи как сделать «правильный» на ваш взгляд тест — добро пожаловать. Новый тест легко добавить.
Хватит критиканствовать! Как правильно?
Еще раз по пункту два: «собираем результаты N запусков, формируем выборки, вычисляем характеристики распределений и доверительные интервалы, если угодно»
Вот жеж взъелись :). По второму пункту: берете тест запускаете его N раз, формируете выборки, выбираете критерии — вычисляете доверительные интервалы. Получите статистическое исследование.
Факториал ста слишком велик. Поэтому приходится обходится малым и надеяться, что погрешность не будет слишком велика.
Пробовал находить наименьшее общее кратное всех n меньше N, но все равно получается почти факториал по скорости возрастания.
Раскрутка цикла имеет значение только для последовательной версии. Для параллельных версий, в цикле блокировки стоят или последовательно, значение не имеет.
Также и с кэшем. Замечание правильно, только для последовательной последовательного случая и случая, когда несколько нитей выполняются на одном процессоре. Для нескольких нитей, работающих на нескольких процессорах кэш влиять не будет т.к. каждая операция с переменной потребует обращения к глобальной памяти.
Ну а вообще, влияние кэша тоже входит в измеряемы числа.
Изначально не было цели запускать пучки с количеством нитей большее чем число процессоров. Факториал остался с тех пор.
Далее:
1. Про графики спорить не стану. Мне так больше нравится.
1а. При измерений кол-ва операций в секунду слишком большие числа получаются, да и переносимого средства нет, чтобы эти операции считать(знаю только rdtsc) поэтому миллисекунды.
2. В каждой точке — один замер. Про доверительные интервалы — интересная идея, однако полноценный эксперимент занял бы слишком много времени.
3а. Время измерения каждой точки, указано на оси ординат. Влияние шедулера не исключается.
3б. Возможно, с какой-то точки зрения, правильнее, твердо утверждать не могу, но в этой версии сделано так.
4. 100 тредов т.к. вспомнил про 80 ядерные серверы. Ну ещё, на большом количестве нитей могла нарушаться линейность. Теперь, ясно, что до ста нитей все более-менее линейно, кроме спинлоков.
5аб. Чтобы избежать влияния асинхронности старта выбирается достаточно большое «большое число». Условие достаточности — интуиция. Да, не научно :). Где-то читал, что старт нити занимает десять микросекунд, т.к. максимальная рассинхронизация при ста нитях — 1мсек. Примерно 1 тысячная среднего замера. С процессами финализаци аналогично. Возможно вам известны другие способы борьбы с переходными процессами, рад буду узнать.
На мой взгляд, Вашим единственным серьезным доводом против теста является отсутствие статистической обработки результатов. Однако, спасибо за потраченное время.
Отмечу, что pinc — это всего лишь инструмент. Если есть идеи как сделать «правильный» на ваш взгляд тест — добро пожаловать. Новый тест легко добавить.
Хватит критиканствовать! Как правильно?
Еще раз по пункту два: «собираем результаты N запусков, формируем выборки, вычисляем характеристики распределений и доверительные интервалы, если угодно»
И спасибо за звание бенчмарка. Звучит. :)
Пробовал находить наименьшее общее кратное всех n меньше N, но все равно получается почти факториал по скорости возрастания.
Также и с кэшем. Замечание правильно, только для последовательной последовательного случая и случая, когда несколько нитей выполняются на одном процессоре. Для нескольких нитей, работающих на нескольких процессорах кэш влиять не будет т.к. каждая операция с переменной потребует обращения к глобальной памяти.
Ну а вообще, влияние кэша тоже входит в измеряемы числа.
Далее:
1. Про графики спорить не стану. Мне так больше нравится.
1а. При измерений кол-ва операций в секунду слишком большие числа получаются, да и переносимого средства нет, чтобы эти операции считать(знаю только rdtsc) поэтому миллисекунды.
2. В каждой точке — один замер. Про доверительные интервалы — интересная идея, однако полноценный эксперимент занял бы слишком много времени.
3а. Время измерения каждой точки, указано на оси ординат. Влияние шедулера не исключается.
3б. Возможно, с какой-то точки зрения, правильнее, твердо утверждать не могу, но в этой версии сделано так.
4. 100 тредов т.к. вспомнил про 80 ядерные серверы. Ну ещё, на большом количестве нитей могла нарушаться линейность. Теперь, ясно, что до ста нитей все более-менее линейно, кроме спинлоков.
5аб. Чтобы избежать влияния асинхронности старта выбирается достаточно большое «большое число». Условие достаточности — интуиция. Да, не научно :). Где-то читал, что старт нити занимает десять микросекунд, т.к. максимальная рассинхронизация при ста нитях — 1мсек. Примерно 1 тысячная среднего замера. С процессами финализаци аналогично. Возможно вам известны другие способы борьбы с переходными процессами, рад буду узнать.
На мой взгляд, Вашим единственным серьезным доводом против теста является отсутствие статистической обработки результатов. Однако, спасибо за потраченное время.
Сделал небольшой стековерфло :). В тексте тоже подправлю.