Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаете ли вы, что в MQL5 появились структуры?
Alexey Viktorov
5519
Alexey Viktorov 2014.03.11 07:43  
YuraZ:

при чему тут компьютер...

Если выполняется на том же железе... при равных условиях - а результат вычислений разный https://www.mql5.com/ru/forum/123371

А заменой железа у Vinin`a занимаетесь Вы??? И что надо было увидеть по Вашей ссылке??? Там есть оговорка о том, что железо не менялось???
Victor Nikolaev
Модератор
14205
Victor Nikolaev 2014.03.11 10:53  
Тактовая частота та же. Был 2-ядерник, сейчас 4-ядерник. Меня не абсолютные цифры интересовали, а относительные. Что дольше считает. Для оптимальности скорости вычислений.
Yuriy Zaytsev
11992
Yuriy Zaytsev 2014.03.11 21:54  
AlexeyVik:
А заменой железа у Vinin`a занимаетесь Вы??? И что надо было увидеть по Вашей ссылке??? Там есть оговорка о том, что железо не менялось???


увидеть и понять - что выполнялось на том же железе
Awl Writer
514
Awl Writer 2014.03.12 20:01  
скажите, пожалуйста, в каких единицах измеряется время выполнения? В пикосекундах?
Vitalie Postolache
11587
Vitalie Postolache 2014.03.12 23:06  

ага, в фемто...

процессор террагерцовый чтоли?

Awl Writer
514
Awl Writer 2014.03.13 16:04  

Почему терагерцевый? При частоте 1 ГГц один такт по определению длится 1 нс, т.е. результат автора (сложение - 7687) указан в пикосекундах (к тому же в самом скрипте время в миллисекундах делится на 1е9). Ради любопытства написал подобный скрипт и запустил на старом и новом MT - слева версия 509, справа 610, процессор Athlon 1,9 двухъядерный. Те же операции над типом double в новой версии выполняются в 5 раз быстрее.

Vitalie Postolache
11587
Vitalie Postolache 2014.03.13 16:18  

Да при чём тут такты? Хотя и с тактами ошибочка, современные процессоры за 1 такт не одну опперацию успевают сделать. Но что поделать с временем загрузки данных в память, потом в кэш процессора, потом в регистры? На это всё сотни наносекунд надо, да и логарифмирование или производство в степень весьма трудоёмки, а ведь результат ещё обратно по цепочке в терминал передать надо...

Так что микросекунды, батенька, микросекунды...



Awl Writer
514
Awl Writer 2014.03.13 16:55  

void OnStart()
{
double e=2.7182818284590452353602874713527;
double pi=3.1415926535897932384626433832795;
double tmp;
uint n=1000000000;
uint i, t1, t2;
t1=GetTickCount();
for (i=0;i<n;i++) tmp=e+pi;
t2=GetTickCount();
Alert("Миллиард сложений (вместе с циклом) выполняются за "+IntegerToString(t2-t1)+" мс");
}

1e9 циклов - 4134 мс. What's wrong?

Одна итерация - 4.134 нс, это примерно 7 тактов для данного процессора (программа, естественно, работает на одном ядре), что в принципе неплохой результат (тем более для 32-битного процесса, в котором тип double рассчитывается как два машинных слова). О сотнях наносекунд речи не идёт, т.к. переменные, к которым обращаются миллиард раз, всяко будут кэшированы.

Vitalie Postolache
11587
Vitalie Postolache 2014.03.13 17:04  
А что не так?
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий