Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Оптимизация кода и шаблоны.(резкое падение скорорости работы в шаблоне)  (Прочитано 7089 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« : 25-08-2006 05:01 » 

Добрый день!

Компилировали мы(я и напарник по парному программированию это на то случай вдруг кого-то интересует мнение участника) в паре один проект.
И решили перевести функцию из вида
Код:
performanceTest(long n1, long n2, long n3)
в вид
Код:
template<long n1, long n2, long n3> performanceTest()
сделали
провели скорость выполнения упала в 10 раз  А черт его знает... хотя по логике должна была поднятся, компилятору же проше опитимизировать код циклов под константные значения
поправили обратно скорость востановилась

сам код представляет из себя 3 вложенных цикла(это тест производительности одного функционала).

прикрепил дизассеблерные листинги. Файл 2.txt это шаблонная функция.
я так думаю причина в том что в регистры передаётся значение из памяти(есть там несколько мест), а как в коде для обычной функции из другого регистра

компилятор VC 7.1(ну или какой он там в студии 2003)

* 1.txt (2.63 Кб - загружено 766 раз.)
* 2.txt (2.05 Кб - загружено 753 раз.)
Записан

Странно всё это....
nop
Гость
« Ответ #1 : 26-08-2006 04:46 » 

Какаие использовались ключи компиляции? Оптимизация использовалась ?
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #2 : 28-08-2006 05:29 » 

опитимизация на скорость(/O2)

вот полный набор ключей, за вычетом /I /L /D /Fo /Fd /Fp

/O2 /FD /EHsc /MD /GS /Yu"stdafx.h" /W3 /nologo /c /Wp64 /Zi /TP
Записан

Странно всё это....
nop
Гость
« Ответ #3 : 30-08-2006 00:32 » 

Посмотрел ассемблерные листинги. Функция, которая во втором файле... При вызове аргумента шаблона такие <1000,5,100> ?
Так действительно получается более медленный код. Можно на определение функции глянуть? Может получится ее в compile-time шаблонами немного развернуть...

Кстати, оптимизатор иногда может и сам понять какие значения не изменяются(при этом это может быть и не константа). Так же сильно влияют на оптимизацию side-эффекты. Кажется vc7.1 умеет менять 'strlen("asd")' на константу(здесь он точно знает что никаких побочных эффектов фугкция не имеет).
« Последнее редактирование: 17-12-2007 17:41 от Алексей1153++ » Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #4 : 30-08-2006 04:40 » 

Вот и код:
Код:
void performanceTest(long accCount, long connectionsCount, long quantCount)
{
objT& obj = GetObj(); // синглтон
long tBegin = my::get_tick_count();
for (long acc = 0;acc != accCount;++acc)
for (long cnn = 0;cnn != connectionsCount;++cnn)
{
long cnnN = acc*connectionsCount + cnn;
obj.func(cnnN,acc,cnn+acc,0,false);
for (long qnt = 0;qnt != quantCount;++qnt)
obj.func(cnnN,acc,qnt+cnn,0,false);
}

long tEnd = my::get_tick_count();
PrintMessage(
boost::str(boost::format("Performance test: Performance is %1% secs per %2% connections, %3% accounts and %4% AddNewQuant calls")
% (((double)(tEnd-tBegin))/1000)
% connectionsCount
% accCount
% quantCount));
PrintMessage(_T("Performance test: done."));
}

Развернуть конечно можно всё, что угодно тем более эту штуку, просто я ожидал, что как мне оптимизатор на оптимизирует, а тут раз мокрой тряпкой по морде. Кстати повторить, в мелких проектах, мне такое же резкое падение скорости не удалось, да и после, завершения разработки функции obj.func, странная оптимизация шаблона стала играть очень не значительную роль.
т.е. снижение скорости составило около 1-го процента
правда я не смотрел, может оптимизатор, уже, как-то по другому формирует код.
поробую напишу что получилось
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 30-08-2006 14:59 » 

Цитата: LogRus
да и после, завершения разработки функции obj.func, странная оптимизация шаблона стала играть очень не значительную роль.
т.е. снижение скорости составило около 1-го процента
Наверно, к вопросу о преждевременной "микрооптимизации"?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #6 : 31-08-2006 04:41 » 

насамом деле я не хотел оптимизировать функцию шаблоном, напарник настоял Улыбаюсь он был очень удивлён результатом эксперемента Улыбаюсь
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines