2014 dxdy logo

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

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




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

 
 
 
 Re: Время выполнения программы
Сообщение28.11.2009, 11:06 
Цитата:
Не может быть так, что какой-нибудь кэш в игру вступает?

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

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

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

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

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

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

 
 
 
 Re: Время выполнения программы
Сообщение28.11.2009, 12:39 
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 
Цитата:
1. А как это можно просто вот так, в одном месте алгоритма, заменить деление умножением? Весь алгоритм при этом должен давать неправильный результат! Очевидно, где-то Вы сделали уже операцию деления, а потом используете этот результат в приведенном цикле?

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

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

 
 
 [ Сообщений: 19 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group