2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Время выполнения программы
Сообщение27.11.2009, 17:36 
Заслуженный участник


09/08/09
3438
С.Петербург
venco в сообщении #265735 писал(а):
Во первых, ваша программа заходит за границы массивов в первом операторе цикла по m.
Согласен.
venco в сообщении #265735 писал(а):
Если массивы сделать на один больше, то вариант с умножением станет быстрее, чем с делением.
У меня не станет. Вернее, не стал.
venco в сообщении #265735 писал(а):
Ещё у вас во внутреннем цикле есть зависимость от значения, вычисляемого в предыдущей итерации.
Я-то здесь причём?
covax в сообщении #265734 писал(а):
При умножении возникает переполнение, из-за этого, скорее всего.
А вот это действительно очень похоже на причину. По крайней мере, после исключения переполнения умножение заработало быстрее деления. Скорее всего, и у топикстартера та же проблема.

 Профиль  
                  
 
 Re: Время выполнения программы
Сообщение28.11.2009, 11:06 


08/09/08
40
Цитата:
Не может быть так, что какой-нибудь кэш в игру вступает?

Не должен - массивы все там помещаются (и огромный запас остается).

Цитата:
Согласен. Вычисление с особыми значениями, типа бесконечности или NaN, могут работать медленнее.

Провел эксперименты с данными в используемых массивах.

Если в массиве b1 -- еденицы, то время выплнения деления на где-то на 10% быстрее, чем умножения.
В эксперименте, где время отличалось в разы были NaNы. :oops: -- При умножении d возрастало до NaN.

Честно говоря, склоняюсь к выводу: Время выполнения операций сложения и умножения существенно зависит от значений операндов.
Экспериментировал с разными b1 -- время может отличаться в разы. Если в b1 степени 2, то деление работает гораздо быстрее.
-- Сб ноя 28, 2009 12:09:07 --

Спасибо за помощь!

 Профиль  
                  
 
 Re: Время выполнения программы
Сообщение28.11.2009, 12:39 


22/09/09
275
sasha-parazit в сообщении #265888 писал(а):
Цитата:
Не может быть так, что какой-нибудь кэш в игру вступает?

Не должен - массивы все там помещаются (и огромный запас остается).

Цитата:
Согласен. Вычисление с особыми значениями, типа бесконечности или NaN, могут работать медленнее.

Провел эксперименты с данными в используемых массивах.

Если в массиве b1 -- еденицы, то время выплнения деления на где-то на 10% быстрее, чем умножения.
В эксперименте, где время отличалось в разы были NaNы. :oops: -- При умножении d возрастало до NaN.

Честно говоря, склоняюсь к выводу: Время выполнения операций сложения и умножения существенно зависит от значений операндов.
Экспериментировал с разными b1 -- время может отличаться в разы. Если в b1 степени 2, то деление работает гораздо быстрее.
-- Сб ноя 28, 2009 12:09:07 --

Спасибо за помощь!

Возникает несколько вопросов.
1. А как это можно просто вот так, в одном месте алгоритма, заменить деление умножением? Весь алгоритм при этом должен давать неправильный результат! Очевидно, где-то Вы сделали уже операцию деления, а потом используете этот результат в приведенном цикле?
2. Как и чем Вы определяете время вычислений? Специальными встроенными функциями-таймерами, или "на глазок"? В каждом компиляторе есть свои таймеры (несколько).

 Профиль  
                  
 
 Re: Время выполнения программы
Сообщение28.11.2009, 14:02 


08/09/08
40
Цитата:
1. А как это можно просто вот так, в одном месте алгоритма, заменить деление умножением? Весь алгоритм при этом должен давать неправильный результат! Очевидно, где-то Вы сделали уже операцию деления, а потом используете этот результат в приведенном цикле?

Нет, я пытался оптимизировать программу. Этот цикл был "горячей точкой". Рассматривая вариант, я набрел на то, что написал в топике.
Цитата:
2. Как и чем Вы определяете время вычислений? Специальными встроенными функциями-таймерами, или "на глазок"? В каждом компиляторе есть свои таймеры (несколько).

Время я измеряю, используя функцию clock(). Для этого цикл в примере топика приходится прогонять 1000 000 раз.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group