Сравнительное тестирование: Когда я могу прекратить делать измерения?

CurrentCulture представление.NET пользовательской локали по умолчанию системы. Это управляет числом по умолчанию и форматированием даты и т.п..

CurrentUICulture относится к языку пользовательского интерфейса по умолчанию, установка, представленная в Windows 2000. Это, прежде всего, расценивает часть локализации/перевода UI Вашего приложения.

Безотносительно региональных опций система настроена для имения, будут "Текущие" значения в приложении.NET.

Часто времена они - оба то же. Но в моей системе они отличались бы: Я предпочитаю свои числа и даты в немецком формате, таким образом, эти CurrentCulture было бы немецким, но я также предпочитаю все свои приложения на английском языке, таким образом, эти CurrentUICulture было бы английским.

существует хорошая статья о теме: Улаживание всего этого: Почему у нас есть и CurrentCulture и CurrentUICulture

9
задан mmr 7 September 2009 в 16:15
поделиться

5 ответов

Вы задаете два вопроса:

  1. Как вы выполняете проверку статистической значимости того, что среднее время функции A больше среднего времени функции B ?
  2. Если вы хотите получить определенную уверенность в своем ответе, сколько образцов вы должны взять?

Самый распространенный ответ на первый вопрос - это то, что вы либо хотите вычислить достоверность интервал или выполнить t-тест . Это не отличается от любого другого научного эксперимента со случайными вариациями. Чтобы вычислить 95% доверительный интервал среднего времени отклика для функции A, просто возьмите среднее значение и добавьте стандартную ошибку в 1,96 раза в каждую сторону. Стандартная ошибка - это квадратный корень из дисперсии, деленной на N. То есть

95% CI = mean +/- 1.96 * sqrt(sigma2/N))

где сигма2 - это дисперсия скорости для функции A, а N - количество прогонов, которые вы использовали для вычисления среднего и дисперсии.

Ваш второй вопрос относится к статистическому анализу мощности ] и дизайн экспериментов. Вы описываете последовательную настройку, когда спрашиваете, продолжать ли отбор проб. Планирование последовательных экспериментов на самом деле представляет собой очень сложную проблему в статистике, поскольку, как правило, вам не разрешается вычислять доверительные интервалы или p-значения, а затем рисовать дополнительные образцы, если не достигнете желаемой значимости. Если вы хотите это сделать, было бы разумнее создать байесовскую модель и вычислить апостериорную вероятность того, что скорость A больше скорости B. Это, однако, является огромным перебором.

В вычислительной среде, как правило, довольно тривиально достичь очень малого доверительного интервала как потому, что рисовать большие N легко, так и потому, что дисперсия, как правило, мала - одна функция явно выигрывает.

Учитывая, что Википедия и большинство онлайн-источников все еще ужасны, когда дело доходит до статистики, я рекомендую покупать Вводную статистику с R . Вы узнаете как статистику, так и инструменты, которые позволят применить полученные знания.

4
ответ дан 4 December 2019 в 21:10
поделиться

Я бы не стал использовать статистические принципы для оценки результатов. В общем, термин «статистическая значимость» относится к вероятности того, что ваши результаты были достигнуты случайно, и не представляют собой точную оценку истинных значений. В статистике из-за простой вероятности вероятность случайного достижения результата уменьшается по мере увеличения количества измерений. При тестировании компьютерного кода нетривиально увеличить количество попыток («n» в статистике), чтобы вероятность случайного результата была ниже любого произвольного порога, который вы хотите определить («альфа» или уровень статистической значимости).

Для упрощения: эталонный тест, выполняя ваш код огромное количество раз, и не Не беспокойтесь о статистических измерениях .

Примечание для потенциальных противников этого ответа: этот ответ является своего рода упрощением вопроса, разработанным, чтобы проиллюстрировать концепции доступным способом. Комментарии типа «вы явно не понимаете статистику» приведут к жестокому избиению. Не забывайте быть вежливым.

4
ответ дан 4 December 2019 в 21:10
поделиться

Исследование, которое вы размещаете, больше похоже на строго контролируемую среду. Это чисто практический ответ, который снова и снова доказывал свою эффективность для тестирования производительности.

Если вы проводите тестирование кода в современной многозадачной многоядерной вычислительной среде, количество итераций, необходимых для достижения полезный эталонный тест увеличивается по мере уменьшения продолжительности измеряемой операции.

Итак, если у вас есть операция, которая занимает ~ 5 секунд, вам, как правило, потребуется от 10 до 20 итераций. Пока отклонение между итерациями остается довольно постоянным, ваших данных достаточно, чтобы делать выводы. Вы часто захотите выбросить первую или две итерации, потому что система обычно нагревает кеши и т. Д.

Если вы тестируете что-то в диапазоне миллисекунд, вам понадобятся десятки тысяч итераций. Это устранит шум, вызванный срабатыванием других процессов и т. Д.

Как только вы достигнете субмиллисекундного диапазона - 10 наносекунд - вам понадобятся миллионы итераций.

Не совсем научный, но и не тестирование «в реальном мире» на современной вычислительной системе.

При сравнении результатов учитывайте разницу в скорости выполнения в процентах, а не в абсолютных величинах. Разница менее 5% довольно близка к шуму.

При сравнении результатов учитывайте разницу в скорости выполнения в процентах, а не абсолютных. Разница менее 5% довольно близка к шуму.

При сравнении результатов учитывайте разницу в скорости выполнения в процентах, а не абсолютных. Разница менее 5% довольно близка к шуму.

1
ответ дан 4 December 2019 в 21:10
поделиться

Основной вопрос, на который вы пытаетесь ответить, заключается в том, насколько вероятно, что то, что вы наблюдаете, могло произойти случайно? Эта монета справедлива? Бросьте один раз: ГОЛОВЫ. Нет, это нечестно, это всегда сходит с ума. Плохой вывод! Бросьте его 10 раз и получите 7 голов, что вы теперь делаете? 1000 раз и 700 голов?

Для простых случаев мы можем представить, как вычислить, когда прекратить тестирование. Но у вас несколько иная ситуация - вы действительно проводите статистический анализ?

Насколько вы контролируете свои тесты? Добавляет ли их повторение какую-либо ценность? Ваш компьютер детерминирован (возможно). Эйстейн определяет безумие: нужно что-то повторять и ожидать другого результата. Итак, когда вы запускаете тесты, получаете ли вы повторяющиеся ответы? Я не уверен, что статистический анализ поможет, если вы делаете достаточно хорошие тесты.

Что касается того, что вы делаете, я бы сказал, что первое, что вам нужно сделать, это убедиться, что вы действительно измеряете то, что думаете. Выполняйте каждый тест достаточно долго, чтобы скрыть любые эффекты запуска или выключения. По этой причине полезные тесты производительности, как правило, выполняются в течение довольно продолжительных периодов времени. Убедитесь, что вы на самом деле измеряете не время в тестовой программе, а время в коде.

У вас есть две основные переменные: сколько итераций вашего метода выполнить в одном тесте? Сколько тестов запустить?

Википедия говорит об этом

В дополнение к выражению

Что касается того, что вы делаете, я бы сказал, что первое, что вам нужно сделать, это убедиться, что вы действительно измеряете то, что думаете. Выполняйте каждый тест достаточно долго, чтобы скрыть любые эффекты запуска или выключения. По этой причине полезные тесты производительности, как правило, выполняются в течение довольно продолжительных периодов времени. Убедитесь, что вы на самом деле измеряете не время в тестовой программе, а время в коде.

У вас есть две основные переменные: сколько итераций вашего метода выполнить в одном тесте? Сколько тестов запустить?

Википедия говорит об этом

В дополнение к выражению

Что касается того, что вы делаете, я бы сказал, что первое, что вам нужно сделать, это убедиться, что вы действительно измеряете то, что думаете. Выполняйте каждый тест достаточно долго, чтобы скрыть любые эффекты запуска или выключения. По этой причине полезные тесты производительности, как правило, выполняются в течение довольно продолжительных периодов времени. Убедитесь, что вы на самом деле измеряете не время в тестовой программе, а время в коде.

У вас есть две основные переменные: сколько итераций вашего метода выполнить в одном тесте? Сколько тестов запустить?

Википедия говорит об этом

В дополнение к выражению Убедитесь, что вы на самом деле измеряете не время в тестовой программе, а время в коде.

У вас есть две основные переменные: сколько итераций вашего метода выполнить в одном тесте? Сколько тестов запустить?

Википедия говорит об этом

В дополнение к выражению Убедитесь, что вы на самом деле не измеряете время в своей тестовой системе, а не в своем коде.

У вас есть две основные переменные: сколько итераций вашего метода выполнить в одном тесте? Сколько тестов запустить?

Википедия говорит об этом

В дополнение к выражению изменчивость популяции, стандартная отклонение обычно используется для измерения уверенность в статистических выводах. Например, предел погрешности в данные опроса определяются расчет ожидаемого стандарта отклонение результатов, если то же самое опрос должны были проводиться многократно раз. Сообщаемая погрешность составляет обычно примерно в два раза больше стандарта отклонение.

Следовательно, если ваша цель - убедиться, что одна функция быстрее другой, вы можете запустить несколько тестов каждой, вычислить средние и стандартные отклонения. Я ожидаю, что если ваше количество итераций в любом одном тесте велико, то стандартное отклонение будет низким.

Если мы примем это определение погрешности, вы сможете увидеть, находятся ли два средних значения дальше друг от друга, чем их общая погрешность.

0
ответ дан 4 December 2019 в 21:10
поделиться

Вы действительно заботитесь о статистической значимости или старой доброй значимости? В конечном итоге вам, вероятно, придется составить суждение о удобочитаемости и производительности - и статистическая значимость в этом вам не поможет.

Я использую пару практических правил:

  • Где возможно, проверяйте достаточность пора убедить вас, что небольшие всплески (например, что-то еще, прерывающее ваш тест на короткое время) не будут иметь большого значения. Обычно я считаю, что для этого достаточно 30 секунд, хотя это зависит от вашего приложения. Чем дольше вы проводите тестирование, тем надежнее будет тест - но очевидно, что ваши результаты будут задержаны :)

  • Выполнение теста несколько раз может быть полезным, но если вы рассчитываете достаточно долго тогда это не так важно ИМО. Это уменьшило бы другие формы ошибок, из-за которых весь тест занимал больше времени, чем следовало бы. Если результат теста выглядит подозрительно, обязательно запустите его снова. Если вы видите существенно разные результаты для разных прогонов, запустите его еще несколько раз и попытайтесь определить закономерность.

1
ответ дан 4 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: