Практические эксперименты на скорость(тесты, исходники, ссылки), на разных языках программирования выкладываем, сравниваем, делаем выводы
И какова цель этих экспериментов?
Если уж замерять,то надо замерять по правилам, сколько то таких операций, сколько то таких. А чего перебор чисел замерять. Да и точность до микросекунд поднять.
// на "c++ vs2010" 125 ms #include "stdafx.h" #include <time.h> static double a, b, c, d, x, y; static void Test1() { for(int i = 0; i< 10; i++) { clock_t start = clock(); for(int n = 0; n < 100000000; n++) { y += n; a = x + y; b = x - y; c = x * y; d = x / y; } clock_t finish = clock(); long rez = (long)finish - (long)start; printf("%d\n",rez); } } static void Test22(float n) { y += n; a = x + y; b = x - y; c = x * y; d = x / y; } static void Test2() { for(int i = 0; i< 10; i++) { clock_t start = clock(); for(int n = 0; n < 100000000; n++) { Test22((float)n); } clock_t finish = clock(); long rez = (long)finish - (long)start; printf("%d ms\n",rez); } } static int _tmain(int argc, _TCHAR* argv[]) { x = 3.0f; y = 2.0f; printf("---c++ test1 start---\n"); Test1(); printf("---c++ test1 end ---\n\n"); printf("---c++ test2 start---\n"); Test2(); printf("---c++ test2 end ---\n\n"); return 0; }
// на "c# vs2010" 622ms И 827ms using System; using System.Diagnostics; namespace csharpTest { class Program { static float a, b, c, d, x, y; static void Main(string[] args) { x = 3.0f; y = 2.0f; Console.WriteLine("--- c# test1 start---"); Test1(); Console.WriteLine("--- c# test1 end ---\n"); Console.WriteLine("--- c# test2 start---"); Test2(); Console.WriteLine("--- c# test2 end ---"); } static void Test1() { Stopwatch time; for (int i = 0; i < 10; i++) { time = Stopwatch.StartNew(); time.Start(); for (int n = 0; n < 100000000; n++) { y += n; a = x + y; b = x - y; c = x * y; d = x / y; } time.Stop(); Console.WriteLine(time.ElapsedMilliseconds); } } static void Test2() { Stopwatch time; for (int i = 0; i < 10; i++) { time = Stopwatch.StartNew(); time.Start(); for (int n = 0; n < 100000000; n++) { Test22((float)n); } time.Stop(); Console.WriteLine(time.ElapsedMilliseconds); } } static void Test22(float n) { y += n; a = x + y; b = x - y; c = x * y; d = x / y; } } }
И какова цель этих экспериментов?
Если уж замерять,то надо замерять по правилам, сколько то таких операций, сколько то таких. А чего перебор чисел замерять. Да и точность до микросекунд поднять.
Пожалуйста добавляйте свои варианты.
Гдето читал что в windows можно измерить только милисекунды да и то не точно.
// на "c# vs2010" 843ms И 867ms using System; using System.Diagnostics; namespace csharpTest { class Program { static double a, b, c, d, x, y; //меняем на double static void Main(string[] args) { x = 3.0f; y = 2.0f; Console.WriteLine("--- c# test1 start---"); Test1(); Console.WriteLine("--- c# test1 end ---\n"); Console.WriteLine("--- c# test2 start---"); Test2(); Console.WriteLine("--- c# test2 end ---"); } static void Test1() { Stopwatch time; for (int i = 0; i < 10; i++) { time = Stopwatch.StartNew(); time.Start(); for (int n = 0; n < 100000000; n++) { y += n; a = x + y; b = x - y; c = x * y; d = x / y; } time.Stop(); Console.WriteLine(time.ElapsedMilliseconds); } } static void Test2() { Stopwatch time; for (int i = 0; i < 10; i++) { time = Stopwatch.StartNew(); time.Start(); for (int n = 0; n < 100000000; n++) { Test22((float)n); } time.Stop(); Console.WriteLine(time.ElapsedMilliseconds); } } static void Test22(float n) { y += n; a = x + y; b = x - y; c = x * y; d = x / y; } } }
// на "c++ vs2010" 360 ms и 360 ms #include "stdafx.h" #include <time.h> static float a, b, c, d, x, y; //меняем на float static void Test1() { for(int i = 0; i< 10; i++) { clock_t start = clock(); for(int n = 0; n < 100000000; n++) { y += n; a = x + y; b = x - y; c = x * y; d = x / y; } clock_t finish = clock(); long rez = (long)finish - (long)start; printf("%d\n",rez); } } static void Test22(float n) { y += n; a = x + y; b = x - y; c = x * y; d = x / y; } static void Test2() { for(int i = 0; i< 10; i++) { clock_t start = clock(); for(int n = 0; n < 100000000; n++) { Test22((float)n); } clock_t finish = clock(); long rez = (long)finish - (long)start; printf("%d ms\n",rez); } } static int _tmain(int argc, _TCHAR* argv[]) { x = 3.0f; y = 2.0f; printf("---c++ test1 start---\n"); Test1(); printf("---c++ test1 end ---\n\n"); printf("---c++ test2 start---\n"); Test2(); printf("---c++ test2 end ---\n\n"); return 0; }
http://www.xnadev.ru/forum/viewthread.php?thread_id=391&rowstart=20
(делая невинные глаза) Предлагаю замерять скорость залива бабла.
Вот тока проги подходящей под рукой нет...
Гдето читал что в windows можно измерить только милисекунды да и то не точно.
Смертельная схватка:Ассемблер vs. Компилятор СТР 441
Хронология оптимизации парольного переборщика СТР 91
Книга: Техника оптимизации программ. Эффективное использование памяти
Автор: Касперски К.
Страниц: 464
Год издания: 2003
Формат: djvu
Размер: 7 Мб + 5 Мб (исходный код)
http://progbook.ru/technologiya-programmirovaniya/617-kasperski-tehnika-optimizatsii-programm.html
Компиляторы C и C++
В этом разделе будет тоже два участника — Microsoft Visual C++ 6.0 SP5 и Intel C/C++ Compiler 5.01. При появлении других интересных компиляторов мы постараемся обновить эти результаты. Кстати, если учесть, что Visual C++ является самым популярным компилятором C/C++ сегодня, то становится интересно, стоит ли доверять знаменитому качеству Microsoft...
https://www.mql5.com/go?link=http://www.ixbt.com/cpu/insidespeccpu2000-compilers.shtml
Самый быстрый исполняемый код
Как вы думаете/знаете на каком в данный момент языке/компиляторе получается самый производительный код.
Зависит ли это от задач которые выполняет данный код.
Правда ли что современные компиляторы с++ оптимизируют код так, что он получается быстрее чем, если бы писать код на ассемблере.
MQL5 :
// 1422 ms..1700 ms - test1 // 1969 ms..2375 ms - test2 указаны диапазоны, на разных проходах результат разный //+------------------------------------------------------------------+ //| SpeedTest.mq5 | //| (c) 2010.03.22, Vladimir Gomonov | //| MetaDriver@rambler.ru | //+------------------------------------------------------------------+ #property copyright "(c) 2010.03.22, Vladimir Gomonov" #property link "MetaDriver@rambler.ru" #property version "1.00" static double a, b, c, d, x, y; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { x = 3.0f; y = 2.0f; printf("---mql5 test1 start---\n"); Test1(); printf("---mql5 test1 end ---\n"); printf("---mql5 test2 start---\n"); Test2(); printf("---mql5 test2 end ---\n"); return; } //+------------------------------------------------------------------+ static void Test1() { for(int i = 0; i< 10; i++) { datetime start = GetTickCount(); for(int n = 0; n < 100000000; n++) { y += n; a = x + y; b = x - y; c = x * y; d = x / y; } datetime finish = GetTickCount(); long rez = (long)finish - (long)start; printf("%d\n",rez); } } static void Test22(float n) { y += n; a = x + y; b = x - y; c = x * y; d = x / y; } static void Test2() { for(int i = 0; i< 10; i++) { datetime start = GetTickCount(); for(int n = 0; n < 100000000; n++) { Test22((float)n); } datetime finish = GetTickCount(); long rez = (long)finish - (long)start; printf("%d ms\n",rez); } }
Но у меня процессор тормозной - Sempron 3100+ PR40 32x
На нормальном проце скорее всего будет скорость примерно как на C#
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Покопавшись в интернете нашёл очень мало по этой теме, т.к. тут форум программистов(в основном), интересуют их взгляды по теме желательно чтоб были исходники или ссылки (где есть исходники).
Проверять имеет смысл на маленьких программах( т.к.относительно большие слишком долго сравнивать на адекватность алгоритма).
Интересуют все языки, особенно такие: c++, c, c#, Java, mq4, mq5, assembler.
Все тесты с указанием параметров компьютера операционки и компиляторов(например intel, microsoft) с максимальной оптимизацией по скорости(relise).
На компьютере core winXP PRO SP3 intel core 2 quad 9400 2.67Ghz 3,5 ГБ ОЗУ тест от Рената http://www.metatrader4.com/ru/forum/7551 (с небольшими изменениями)
компилятор vs6,vs2010 - microsoft
// на "c vs6" 15 ms или 31
// на "mq4" 234 ms (229 build)
// на "c++ vs2010" 15 ms или 31ms
// на "mq5" 62 ms или 78 ms (412 build)
// на "c# vs2010" 67ms или 68ms
TEST1.txt
Конвертеры между VB, C#, C++ & Java (Instant C#, Instant C++, Instant VB, C++ to C#/VB/Java, Java to VB & C#, VB & C# to Java) не всё правильно, но может кому пригодятся https://www.mql5.com/go?link=http://rutracker.org/forum/viewtopic.php?t=1734855