Статистика: Добавлено alexey38 — 16.12.2013 18:56:20


Статистика: Добавлено debi12345 — 16.12.2013 12:52:46
Статистика: Добавлено Лекс Айрин — 03.12.2013 00:45:59
Лекс Айрин писал(а):Так прототипирование это не более чем черновые наброски.
Лекс Айрин писал(а):И, кстати, я не пишу прототипов. Они мне не нужны.
Статистика: Добавлено kazalex — 02.12.2013 23:43:19
kazalex писал(а):На этапе прототипирования скорость получения результата очень важна.
Статистика: Добавлено Лекс Айрин — 02.12.2013 20:56:36
Лекс Айрин писал(а):Знаешь, разница между 1 и 2-3 минутами для меня не принципиальна.
Лекс Айрин писал(а):Форум-то для паскалевских программистов.
Статистика: Добавлено kazalex — 02.12.2013 20:27:17
Статистика: Добавлено Лекс Айрин — 02.12.2013 19:43:06
Тем не менее, компилирует он значительно дольше чем та же Delphi.
Статистика: Добавлено debi12345 — 02.12.2013 18:31:30
kazalex писал(а):Тем не менее, компилирует он значительно дольше чем та же Delphi.
kazalex писал(а):Но речь скорее об общем подходе, не все же pascal-only разработчики.
Статистика: Добавлено Лекс Айрин — 02.12.2013 17:51:11
Лекс Айрин писал(а):Лучше оптимизировать неработоспособную программу?
Лекс Айрин писал(а):FPC не Си с плюсами
Статистика: Добавлено kazalex — 02.12.2013 16:53:27
kazalex писал(а):то на этапе прототипирования они, вероятнее всего, будут лишь увеличивать время компиляции.
Статистика: Добавлено Лекс Айрин — 02.12.2013 16:08:37
Лекс Айрин писал(а):А опции компилятора (жонглирование) выставляются сразу и сразу же, по идее, влияют на производительность и/или размер программы.
Статистика: Добавлено kazalex — 02.12.2013 15:02:54
Статистика: Добавлено Лекс Айрин — 02.12.2013 08:43:38
Лекс Айрин писал(а):А разве 4 минуты не видны на глаз?
Статистика: Добавлено kazalex — 02.12.2013 01:47:53
kazalex писал(а):и отставание в четверть секунды превратится в четыре минуты.
Статистика: Добавлено Лекс Айрин — 01.12.2013 23:23:00
Лекс Айрин писал(а):Следовательно, никакая синтетика не нужна
Лекс Айрин писал(а):Да и оптимизация должна быть очень качественной
Лекс Айрин писал(а):Просто непонятна позиция некоторый к синтетике
Статистика: Добавлено kazalex — 01.12.2013 22:37:26
Статистика: Добавлено Лекс Айрин — 01.12.2013 20:42:05
Статистика: Добавлено debi12345 — 01.12.2013 19:53:18
kazalex писал(а):становится ясно какие части являются критичными для общей производительности.
Статистика: Добавлено Лекс Айрин — 01.12.2013 18:27:52
Лекс Айрин писал(а):ТРот же код может быть так размазан по программе, что его и не выцепишь сразу.
Статистика: Добавлено kazalex — 01.12.2013 18:08:40
Статистика: Добавлено Mirage — 01.12.2013 17:43:11
kazalex писал(а): Если за основу бенчмарка берется ресурсоемкий код реального приложения, то такой тест будет реально отражать положение дел.
Статистика: Добавлено Лекс Айрин — 01.12.2013 15:52:20
Программирование*, Алгоритмы*, C++*
По мотивам одного вчерашнего поста про оптимизацию условных переходов при расчете x=sign(a,b)*min(abs(a), abs(b)) якобы в 10 раз. Краткая сводка:
оптимизация налицо, но размер мнимый: не в 10 раз, а 2.5 раза;
бенчмарки надо делать правильно: не надо мерить CPU stalls, RAM bandwidth итп вместо исследуемой функции;
бенчмарки надо делать правильно: иначе могут дико дрожать;
выставлять только приоритет прикольно, но на коротких бенчмарках зря: +0.5% скорости, -15% дрожания;
нужно мерить исследуемую функцию и только ее, только так получаешь корректные данные;
нужно греть проц, нужно считать минимум из N прогонов/секунд, только так побеждаешь дрожание;
нужно пользовать SSE, с ним получилось 8.6 раз, причем код… читается.
В общем, опять пачка классических методологических ошибок при бенчмарке. Кому интересно, как такие ошибки НЕ делать, подробности, детальный разбор полетов, оптимизация в еще несколько раз и, главное, исходники под катом.
Прочитал вчера исходный пост, очень удивился ускорению в 10 раз за счет ликвидации переходов, даром, что на синтетике. Это слишком много, переходы дорогие, но не настолько. Попробовал повторить результаты, посмотрел внимательнее, и натурально: опять детсадовские ошибки в методике бенчмарка! Что же, пора их опять разобрать, пример хороший.
На помощь приходит SSE. У меня на десктопе неновый Core2Duo E8500, но даже он умеет SSE4. Разворачиваем цикл в 4 раза, считаем по 4 пары зараз. Прямо в лоб пользуемся специнструкциями для вычисления sign, abs.
1.073 sec, llr() baseline
0.438 sec, llr2() optimized, 2.5x
0.125 sec, llr4() sse + 4x unroll, 8.6x
Статистика: Добавлено debi12345 — 01.12.2013 15:07:49
Лекс Айрин писал(а):бейчмарки, как ни пиши, все равно не будут соответствовать реальным приложениям.
Лекс Айрин писал(а):А как быть в тех случаях, когда нет принципиальной разницы между лучшим и худшим кодом? Ловить микросекунды из принципа?
Статистика: Добавлено kazalex — 01.12.2013 11:15:48
Статистика: Добавлено Лекс Айрин — 01.12.2013 10:53:54
Код:
A := (((P1 + P2) * P1) / P2) - P1;Код:
for (i=0; i <= 99999999; i++ ) {
B = B + A + i;
}
Код:
**** for (i=0; i <= 99999999; i++ ) {
**** // A = FasmAdd(P1, P2);
**** B = B + A + i;
cvtsi2sd xmm0, rax # tmp100, i
**** for (i=0; i <= 99999999; i++ ) {
add rax, 1 # i,
cmp rax, 100000000 # i,
addsd xmm6, xmm0 # B, tmp100
.LVL8:
**** for (i=0; i <= 99999999; i++ ) {
jne .L4 #,
**** }
Код:
.Lj21:
incl -32(%ebp)
fldt U_P$SSETEST_A
fldt U_P$SSETEST_B
faddp %st,%st(1)
movl -32(%ebp),%eax
movl %eax,-4(%ebp)
movl %eax,-16(%ebp)
movl $0,-12(%ebp)
fildq -16(%ebp)
faddp %st,%st(1)
fstpt U_P$SSETEST_B
cmpl $99999999,-32(%ebp)
jb .Lj21
попасть на холодное ядро"
Статистика: Добавлено debi12345 — 01.12.2013 10:50:05
Статистика: Добавлено kazalex — 01.12.2013 10:36:58
Статистика: Добавлено alexey38 — 01.12.2013 10:19:48
Статистика: Добавлено Лекс Айрин — 01.12.2013 10:00:05
pda писал(а): GetTickCount, вроде тоже может странные показания выдавать, если поток к одному ядру не привязан.
Статистика: Добавлено kazalex — 01.12.2013 00:29:05