Тесты на вычисление числа Pi для mql4, mql5, MSVC, Intel compilators

 

Открыл отдельную ветку, чтобы у Сан Саныча ветку по R не засорять.

Итак, первый тест - сравнение с C#. МТ5 билд  1495 x64, C# версия-кандидат 2017, проект скомпилирован под x64. OS Windows 10 x64 версия 1607.

В пределах погрешности MQL быстрее на 2-3%. У меня под рукой старый Core 2 Duo, прогоните на новых процах, у кого есть и выложите результаты плз. Исходники и скомпилированный тест C# приаттачены внизу поста.

Скомпилированный файл находится в архиве по пути ParallelPi\ParallelPi_Ccharp\bin\x64\Release x64\ParallelPi_Ccharp.exe

MQL5

2017.01.07 21:46:54.582 TestPi (EURUSD,M1)      The value of PI is 3.141592653589971
2017.01.07 21:46:54.605 TestPi (EURUSD,M1)      The time to calculate PI was seconds 11.15166600
2017.01.07 21:47:16.334 TestPi (EURUSD,M1)      The value of PI is 3.141592653589971
2017.01.07 21:47:16.334 TestPi (EURUSD,M1)      The time to calculate PI was seconds 11.17415100
2017.01.07 22:04:09.092 TestPi (EURUSD,M1)      The value of PI is 3.141592653589971
2017.01.07 22:04:09.092 TestPi (EURUSD,M1)      The time to calculate PI was seconds 11.31343800
2017.01.07 22:04:22.977 TestPi (EURUSD,M1)      The value of PI is 3.141592653589971
2017.01.07 22:04:22.977 TestPi (EURUSD,M1)      The time to calculate PI was seconds 11.26320100

C#, запускался из командной строки, команда cmd, в окне запуск файла 

C:\MyP\AvForex\trunk\ParallelPi\ParallelPi_Ccharp\bin\x64\Release x64>ParallelPi_Ccharp.exe
The value of PI is 3,14159265358997
The time to calculate PI was 00:00:11.4754661 seconds

C:\MyP\AvForex\trunk\ParallelPi\ParallelPi_Ccharp\bin\x64\Release x64>ParallelPi_Ccharp.exe
The value of PI is 3,14159265358997
The time to calculate PI was 00:00:11.4764660 seconds

C:\MyP\AvForex\trunk\ParallelPi\ParallelPi_Ccharp\bin\x64\Release x64>ParallelPi_Ccharp.exe
The value of PI is 3,14159265358997
The time to calculate PI was 00:00:11.5689777 seconds

C:\MyP\AvForex\trunk\ParallelPi\ParallelPi_Ccharp\bin\x64\Release x64>ParallelPi_Ccharp.exe
The value of PI is 3,14159265358997
The time to calculate PI was 00:00:11.4949686 seconds

***
 

Файлы:
 

И старичок МТ4 билд 1031. В два раза медленнее МТ5.

2017.01.07 22:40:46.174 TestPi EURUSD.e,H4: The time to calculate PI was seconds 22.78320400
2017.01.07 22:40:46.174 TestPi EURUSD.e,H4: The value of PI is 3.1416
2017.01.07 22:40:23.390 TestPi EURUSD.e,H4: initialized
2017.01.07 22:40:23.374 Script Tests\TestPi EURUSD.e,H4: loaded successfully
2017.01.07 22:40:20.566 Script TestPi EURUSD.e,H4: removed
2017.01.07 22:40:20.564 TestPi EURUSD.e,H4: uninit reason 0
2017.01.07 22:40:20.564 TestPi EURUSD.e,H4: The time to calculate PI was seconds 22.45552700
2017.01.07 22:40:20.564 TestPi EURUSD.e,H4: The value of PI is 3.1416


 *****

Файлы:
TestPi.mq4  1 kb
 

процессор очень старый  год выпуска 2008 


2017.01.08 01:49:47.141    Terminal    MetaTrader 5 x64 build 1502 started (MetaQuotes Software Corp.)

2017.01.08 01:49:47.142    Terminal    Windows 7 Ultimate (x64 based PC), IE 10.00, Intel Core i7  920 @ 2.67GHz, RAM: 6819 / 12279 Mb ...


 ParallelPi_Ccharp.exe

The value of PI is 3.14159265358997
The time to calculate PI was 00:00:16.9809713 seconds

 ParallelPi_Ccharp.exe
The value of PI is 3.14159265358997

The time to calculate PI was 00:00:16.9689706 seconds


MT5

2017.01.08 01:44:32.909    TestPi (EURUSD_i,M30)    The value of PI is 3.141592653589971
2017.01.08 01:44:32.910    TestPi (EURUSD_i,M30)    The time to calculate PI was seconds 6.33245500
2017.01.08 01:44:45.791    TestPi (EURUSD_i,M30)    The value of PI is 3.141592653589971
2017.01.08 01:44:45.791    TestPi (EURUSD_i,M30)    The time to calculate PI was seconds 6.32952600


MT4

2017.01.08 01:48:14.178    Script TestPi EURUSD,H4: removed
2017.01.08 01:48:14.177    TestPi EURUSD,H4: uninit reason 0
2017.01.08 01:48:14.177    TestPi EURUSD,H4: The time to calculate PI was seconds 12.94560400
2017.01.08 01:48:14.177    TestPi EURUSD,H4: The value of PI is 3.1416
2017.01.08 01:48:01.231    TestPi EURUSD,H4: initialized
2017.01.08 01:48:01.223    Script TestPi EURUSD,H4: loaded successfully
2017.01.08 01:47:09.767    Script TestPi EURUSD,H4: removed
2017.01.08 01:47:09.765    TestPi EURUSD,H4: uninit reason 0
2017.01.08 01:47:09.765    TestPi EURUSD,H4: The time to calculate PI was seconds 12.94924300
2017.01.08 01:47:09.765    TestPi EURUSD,H4: The value of PI is 3.1416
2017.01.08 01:46:56.815    TestPi EURUSD,H4: initialized



 
Yuriy Zaytsev:

процессор очень старый  год выпуска 2008 


2017.01.08 01:49:47.141    Terminal    MetaTrader 5 x64 build 1502 started (MetaQuotes Software Corp.)

2017.01.08 01:49:47.142    Terminal    Windows 7 Ultimate (x64 based PC), IE 10.00, Intel Core i7  920 @ 2.67GHz, RAM: 6819 / 12279 Mb ...


 ParallelPi_Ccharp.exe

The value of PI is 3.14159265358997
The time to calculate PI was 00:00:16.9809713 seconds

 ParallelPi_Ccharp.exe
The value of PI is 3.14159265358997

The time to calculate PI was 00:00:16.9689706 seconds


MT5

2017.01.08 01:44:32.909    TestPi (EURUSD_i,M30)    The value of PI is 3.141592653589971
2017.01.08 01:44:32.910    TestPi (EURUSD_i,M30)    The time to calculate PI was seconds 6.33245500
2017.01.08 01:44:45.791    TestPi (EURUSD_i,M30)    The value of PI is 3.141592653589971
2017.01.08 01:44:45.791    TestPi (EURUSD_i,M30)    The time to calculate PI was seconds 6.32952600


MT4

2017.01.08 01:48:14.178    Script TestPi EURUSD,H4: removed
2017.01.08 01:48:14.177    TestPi EURUSD,H4: uninit reason 0
2017.01.08 01:48:14.177    TestPi EURUSD,H4: The time to calculate PI was seconds 12.94560400
2017.01.08 01:48:14.177    TestPi EURUSD,H4: The value of PI is 3.1416
2017.01.08 01:48:01.231    TestPi EURUSD,H4: initialized
2017.01.08 01:48:01.223    Script TestPi EURUSD,H4: loaded successfully
2017.01.08 01:47:09.767    Script TestPi EURUSD,H4: removed
2017.01.08 01:47:09.765    TestPi EURUSD,H4: uninit reason 0
2017.01.08 01:47:09.765    TestPi EURUSD,H4: The time to calculate PI was seconds 12.94924300
2017.01.08 01:47:09.765    TestPi EURUSD,H4: The value of PI is 3.1416
2017.01.08 01:46:56.815    TestPi EURUSD,H4: initialized



Как C# тормозит! МТ4 и МТ5 быстрее, чем на моем старичке 2 два раза, а шарп в полтора раза медленнее. А какая версия .NET стоит, можете посмотреть?
Со студией ставится программка clrver.exe, я приаттачил, если студии нет. У меня вот такая

Microsoft Windows [Version 10.0.14393]
(c) Корпорация Майкрософт (Microsoft Corporation), 2016. Все права защищены.

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools>clrver.exe

Microsoft (R) .NET CLR Version Tool  Version 4.6.1590.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Versions installed on the machine:
v2.0.50727
v4.0.30319

***
 

Файлы:
clrver.zip  58 kb
 

Вот повторил расчеты из ветки: Ускоряемся - использование пакета IPP для увеличения скорости работы советника

Показано наименьшее время из 10 запусков на свободном компьютере:

Windows 10 Pro, Intel Xeon E5-2690 v3 @ 2.60GHz, 24 cores, RAM 32 Gb

у всех floating point model = precise, x64 (у MQL4 - 32 bit)

The value of PI is  3.141592653590 in 12438 msec     MQL4 build 1031
The value of PI is  3.141592653590 in  4266 msec     MQL5 build 1502

The value of PI is  3.141592653590 in  4188 msec     MSVC 2015
The value of PI is  3.141592653590 in   375 msec     MSVC 2015 + OMP (24 cores)

The value of PI is  3.141592653590 in  4188 msec     Intel XE 2016
The value of PI is  3.141592653590 in   375 msec     Intel XE 2016 + OMP (24 cores)

В чистой математике MQL5 x64 по скорости равен MSVC 2015.

В архивах чистый проект на MSVC 2015, включая собранные бинарники под MSVC 2015 и Intel XE 2016 вместе с OMP версиями.

Файлы:
 

Обратите внимание, как ускорился MQL5 с прошлых тестов https://www.mql5.com/ru/forum/136971#comment_3470173:

  • в 2011 году MSVC 2010 сработал за 7.91 сек, а MQL5 за 27.05 сек с отставанием от MSVC в 3.41 раз
  • в 2016 году MSVC 2015 сработал за 4.18 сек, а MQL5 за 4.26 сек с отставанием от MSVC всего в 2%, что можно считать погрешностью

Фактически на чистых вычислениях MQL5 имеет качество С++ компиляторов. Конечно, при работе с массивами и чистыми объектами у MQL5 будет закономерное отставание за счет полного контроля ссылок и границ, так как это защищенный managed язык.

В комменте #4 я также показал, что преимуществ у Intel C++ компиляторов уже нет.

 
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
1049
v2.0.50727
v3.0
v3.5
v4.0.30319

C:\Windows\Microsoft.NET\Framework
1049
v1.0.3705
v1.1.4322
v2.0.50727
v3.0
v3.5
v4.0.30319
 
Renat Fatkhullin:
Производительность - это круто. Что-то существенное (акромя производительности, математики и маркетинговых вещей) появится в MT5 точно за зима-весна 2017?
 
fxsaber:
Производительность - это круто. Что-то существенное (акромя производительности, математики и маркетинговых вещей) появится в MT5 точно за зима-весна 2017?

сервисы обещают!

 
Yuriy Zaytsev:

сервисы обещают!

Кастомные фиды обещали, как несколько лет. Внести существенные изменения в тестер и т.д. Речь про
fxsaber:
появится в MT5 точно за зима-весна 2017?
 
fxsaber:
Производительность - это круто. Что-то существенное (акромя производительности, математики и маркетинговых вещей) появится в MT5 точно за зима-весна 2017?

Да, появится из важного:

  1. Расширенный OpenCL со штатной расчетной математической библиотекой на OpenCL. Конечно, с ограниченным набором функций, который поддается распараллеливанию.
  2. Новый тип программ в виде постоянных сервисов и функций взаимодействия между программами
  3. Кастомные датафиды и синтетические инструменты

Ну и конечно десятки других вещей, которые будут описаны в релизах.

Причина обращения: