Немного удивлен :) Решил поделиться и задать НЕ риторический вопрос. - страница 24

 
TheXpert:
На ЕМАшке проверить -- самое то будет.

Гхм.. Мне кажется в этом уже нет необходимости. Ситуация прояснилась. Как в этой ветке и принято -  немного удивлён и решил поделиться... :)

Вот отрывок теста, полный текст теста в прицепе, там же библиотечка:

..........
....................
    IntRational ira={2345,3456};
    IntRational irb={67,93};
    IntRational irc={93,67};
    t = GetTickCount();
    for(int i=0;i<Count;i++)
      {
       ira.Div(irb); ira.Div(irc);
       ira.Mul(irb); ira.Mul(irc);
       ira.Add(irb); ira.Add(irc);
       ira.Sub(irb); ira.Sub(irc);
       ira.Norm();
      }
    Print("Common time IntRational test = ", GetTickCount()-t, " ms; // ",Count," calls");
    double da=2345.0/3456.0;
    double db=67.0/93.0;
    double dc=93.0/67.0;
    t = GetTickCount();
     for(int i=0;i<Count;i++)
      {
       da/=db; da/=dc;
       da*=db; da*=dc;
       da+=db; da+=dc;
       da-=db; da-=dc;
      }
    Print("Common time double test = ", GetTickCount()-t, " ms; // ",Count," calls");
..................
......

Результаты:

2011.04.04 20:29:15    RationalSpeedTest (EURUSD,M20)    Common time int test = 62 ms; // 1000000 calls
2011.04.04 20:29:15    RationalSpeedTest (EURUSD,M20)    Common time long test = 141 ms; // 1000000 calls
2011.04.04 20:29:15    RationalSpeedTest (EURUSD,M20)    Common time double test = 62 ms; // 1000000 calls
2011.04.04 20:29:15    RationalSpeedTest (EURUSD,M20)    Common time IntRational test = 1032 ms; // 1000000 calls
2011.04.04 20:29:14    RationalSpeedTest (EURUSD,M20)    Common time LongRational test = 921 ms; // 1000000 calls

Сильно озадачен - double и int абсолютно совпали по скорости выполнения арифметических операций и притом самые быстрые, long вдвое отстал, Rational в полной попе.

В свете этих кспериментов заниматься построением целочисленного тестера несколько расхотелось .. :-))

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

Интересно, что когда-то в незапамятные 90 годы я тестил разницу целых и плавающих операций, различия были вполне ощутимы (мягко выражаясь).

Резюме - 90-е годы прошли и канули, арифметика с плавающей точкой нынче работает очень быстро.

Даже менять её на целочисленную арифметику не разумно (в контексте трейдинга) - выигрыш ничтожен если не иллюзорен вообще.

Окончательное резюме - ежли Интел срочно не сделает поддержку рациональной арифметики на уровне железа, об ей можно больше не париться... по крайней мере в смысле быстродействия. :)

Аминь.

// Повторюсь. Тесты проводились на отдельно взятом компе-камне, потому, дабы не впадать в лишние иллюзии, прошу желающих прогнать тест у себя на компах и выложить результы с указанием параметров железа.

// Мой комп: 2 гига оперативки, проц Sempron 3100+ 2.2 гигагерца, 32 бита, операционка WinXP

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Основы языка / Операции и выражения / Арифметические операции - Документация по MQL5
Файлы:
 
MetaDriver:

Гхм.. Мне кажется в этом уже нет необходимости. Ситуация прояснилась. Как в этой ветке и принято -  немного удивлён и решил поделиться... :)



99% процентов вычсилений не потребует приведения к общему знаменателю.  Так что тестирование не совсем корректно. Надо брать реальняе расчеты и делать их правильно. Инты по моим сегодняшним прикидкам быстрее ( и за счет того что все в памяти и в кеше процессора помещается ) раз - в 1000000 :) Просто ошеломляющие результаты. Типа 2000 прогонов за 1 секунду. :)

 
MetaDriver:

Резюме - 90-е годы прошли и канули, арифметика с плавающей точкой нынче работает очень быстро.

Даже менять её на целочисленную арифметику не разумно (в контексте трейдинга) - выигрыш ничтожен если не иллюзорен вообще.

Кто последние ...надцать лет программирует, тот это давно знает.

Кроме того, мы не зря перешли на SSE2, ибо без нее общего повышения быстродействия не видать.

 
Renat:

Кто последние ...надцать лет программирует, тот это давно знает.

Мы не зря перешли на SSE2, ибо без нее общего повышения быстродействия не видать.

 Я запихал тик в 32 бита ( аск, бид и время ) . И получил - быстродействие которое уже можно использовать.

:) Плюс еще и по памяти как МТ5 не бегаю - все варианты перебора кручу вокруг бара, а не на оборот. :) Летает !!! :)

**

Вы кстати , прогоните на МТ ,если не трудно - я там написал выше.

 
Academic:
 Я запихал тик в 32 бита ( аск, бид и время ) . И получил - быстродействие которое уже можно использовать.

Во сне и не такое можно запихать... Только практика будит и все портит.

Но ничего, сегодня ночью будет новый полет фантазий!

 
Renat:

Во сне и не такое можно запихать... Только практика будит и все портит.

Но ничего, сегодня ночью будет новый полет фантазий!

Вы не боитесь опростовалоситься. Я ведь не вру. :) Запихивается  - легко, только подумать надо. Нда... во сне - поражаюсь самоуверенности. :)
 
Academic:
Вы не боитесь опростовалоситься. Я ведь не вру. :) Запихивается  - легко, только подумать надо. Нда... во сне - поражаюсь самоуверенности. :)

Я не зря постоянно повторяю "практика".

Экстремальной побитовой упаковкой котировок при передаче по сети мы давно и успешно занимается. В среднем сжатие 1:13, когда 10 лет минутной истории ужимается в 10-12 мб.

Но практика такова, что расжатие (не говоря уж об математических операциях с ними) этого безобразия занимает настолько много времени, что ни о какой скорости речи не может быть.

 
Renat:

Я не зря постоянно повторяю "практика".

Экстремальной побитовой упаковкой котировок при передаче по сети мы давно и успешно занимается. В среднем сжатие 1:13, когда 10 лет минутной истории ужимается в 10-12 мб.

Но практика такова, что расжатие (не говоря уж об математических операциях с ними) этого безобразия занимает настолько много времени, что ни о какой скорости речи не может быть.

Я же говорю - надо иметь опыт программирования высокопроизводительных приложений. А не теорией заниматься - не будет медленее вынимание данных их этих 32 битов это пяток машинных команд.
 
MetaDriver:
...

Аминь.

// Повторюсь. Тесты проводились на отдельно взятом компе-камне, потому, дабы не впадать в лишние иллюзии, прошу желающих прогнать тест у себя на компах и выложить результы с указанием параметров железа.

// Мой комп: 2 гига оперативки, проц Sempron 3100+ 2.2 гигагерца, 32 бита, операционка WinXP

То то же сказали суровые сибирские лесорубы :о)

2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time int test = 78 ms; // 1000000 calls
2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time long test = 125 ms; // 1000000 calls
2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time double test = 94 ms; // 1000000 calls
2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time IntRational test = 1391 ms; // 1000000 calls
2011.04.04 20:30:58     RationalSpeedTest (USDCHF,M1)   Common time LongRational test = 1015 ms; // 1000000 calls
P4 3Гц [32 бита] 1Гб оперативы, ОС: Windows XP SP 3 версия 5.1 сборка 2600  

Давабил ещё нолик  в Count для полной ясности

2011.04.04 20:39:22     RationalSpeedTest (USDCHF,M1)   Common time int test = 718 ms; // 10000000 calls
2011.04.04 20:39:22     RationalSpeedTest (USDCHF,M1)   Common time long test = 1266 ms; // 10000000 calls
2011.04.04 20:39:20     RationalSpeedTest (USDCHF,M1)   Common time double test = 1000 ms; // 10000000 calls
2011.04.04 20:39:19     RationalSpeedTest (USDCHF,M1)   Common time IntRational test = 13156 ms; // 10000000 calls
2011.04.04 20:39:06     RationalSpeedTest (USDCHF,M1)   Common time LongRational test = 9282 ms; // 10000000 calls
 
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time int test = 63 ms; // 1000000 calls
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time long test = 94 ms; // 1000000 calls
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time double test = 47 ms; // 1000000 calls
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time IntRational test = 734 ms; // 1000000 calls
2011.04.04 22:36:00    RationalSpeedTest (EURUSD,H1)    Common time LongRational test = 594 ms; // 1000000 calls
AMD Phenom 9850 Quad-Core (2,5Ггц), 2Gb, WinXP SP3 32