О скорости выполнения операций - страница 2

 
YuraZ:

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

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

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


увидеть и понять - что выполнялось на том же железе
 
скажите, пожалуйста, в каких единицах измеряется время выполнения? В пикосекундах?
 

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

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

 

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

 

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

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



 

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 рассчитывается как два машинных слова). О сотнях наносекунд речи не идёт, т.к. переменные, к которым обращаются миллиард раз, всяко будут кэшированы.

 
А что не так?