2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Скорость вычислений в Mathematica
Сообщение03.09.2018, 12:47 


02/12/16
60
Выполнив следующий код

Код:
f1[n_] := Block[{m = 1, i}, For[i = 1, i <= n, i++, m = m*i]; m]
f2[n_] := Apply[Times, Range[n]]
f3[n_] := Product[i, {i, 1, n}]

Timing[f1[50000];]
Timing[f2[50000];]
Timing[f3[50000];]
Timing[Factorial[50000];]

Получим
Код:
{3.3125, Null}
{0.125, Null}
{0.140625, Null}
{0.03125, Null}


Как видно, скорость выполнения отличается. Если еще и можно предположить, что для команды Factorial имеются заготовленные значения, то почему в остальных случаях время выполнения команды отличается? По сути, нам же надо выполнить умножение $n$ раз.

А если программировать на другом языке программирования, как добиться такой хорошей скорости вычисления факториала?

 Профиль  
                  
 
 Re: Скорость вычислений в Mathematica
Сообщение03.09.2018, 13:26 
Заслуженный участник


20/08/14
11764
Россия, Москва
Различия между 2 и 3 - вероятно погрешности измерения. Увеличьте времена измерений на порядок-два (до десятков секунд), вот тогда погрешность станет намного менее измеряемой величины и можно будет о чём-то говорить.
1 вариант считается дольше потому что там не только $n$ умножений, а ещё и куча обрамляющего кода, который не оптимизировался при компиляции, которой не было, а обрабатывается каждый раз заново, вот он и тормозит. Да ещё наверняка и выделение памяти под всё увеличивающуюся переменную постоянно вмешивается, тоже весьма не быстрое.
Факториал не обязательно вычислять как произведение всех чисел, есть другие формулы и методы, ищите, это известная информация. Хотя бы в вики посмотрите про формулу Стирлинга и разложение по простым числам.

 Профиль  
                  
 
 Re: Скорость вычислений в Mathematica
Сообщение03.09.2018, 17:20 
Заслуженный участник


27/04/09
28128
Ещё не надо забывать, что вычисление одной штуки может повлиять на скорость вычисления другой штуки после, потому что там что-то может кэшироваться и т. п..

 Профиль  
                  
 
 Re: Скорость вычислений в Mathematica
Сообщение03.09.2018, 17:41 
Заслуженный участник


20/08/14
11764
Россия, Москва
arseniiv
На временах порядка долей секунды и более (т.е. заметно больше тика переключений задач) это уже не влияет т.к. размеры кэшей маленькие и нужная инфа будет быстро вытеснена из них после переключения задач, фоновых процессов обычно довольно много выполняется. Это первая причина. Вторая: время заполнения кэша пренебрежимо мало (меньше процента) по сравнению с длительностью тика переключения задач, потому вытеснено (при переключении задач, не при самом вычислении!) или сохранилось - на общее время почти не влияет, уж точно меньше погрешностей измерения времени и других факторов.
Разумеется подразумеваю что на диск инфа не свопится и остаётся хотя бы в ОЗУ, иначе всё совсем грустно и сравнивать скорости вычислений бесполезно.

 Профиль  
                  
 
 Re: Скорость вычислений в Mathematica
Сообщение03.09.2018, 18:27 
Заслуженный участник


27/04/09
28128
Dmitriy40
Я не про кэш процессора. :-) Внутреннее устройство Mathematica (и других СКА наверняка) довольно хитрое (хотя я знаю только намёки).

 Профиль  
                  
 
 Re: Скорость вычислений в Mathematica
Сообщение03.09.2018, 20:06 
Заслуженный участник


20/08/14
11764
Россия, Москва
Это легко проверить: сравнить времена сразу после запуска СКА и при повторе вычислений. Или сразу после запуска и после вычисления по другому алгоритму. Думаю все времена совпадут с точностью до погрешностей.

 Профиль  
                  
 
 Re: Скорость вычислений в Mathematica
Сообщение07.09.2018, 20:20 


02/12/16
60
Кстати, некоторые запрограммированные алгоритмы в Mathematica при первом запуске выполняются медленно, но при последующем выполнении выполняются быстрее. Mathematica запоминает все промежуточные вычисления?
Как отключить это, чтобы можно было более точно узнать время выполнения алгоритма?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

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



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

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


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

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