Тонкости вычисления компутером

12
LH
На сайте с 26.09.2013
Offline
89
870

берем этот код:


var total = 0, count = 1;
while (count <= 10) {
total += count;
count += 1;
}
console.log(total);
// → 55

и

этот:


let fn = n => n * ( n + 1 ) / 2;

alert( fn( 10 )); // 55

в обоих случаях число надо сложить n-ное кол-во раз

получается и там и тут сумма вычисляется циклично и нагрузка на процессор одинаковая ? ))

_
На сайте с 24.03.2008
Offline
381
#1

Точный ответ на этот вопрос даст только профайлер. Либо натурные испытания.

Я не знаток внутренней кухни php, но сомневаюсь что пример с делением окажется быстрым.

Из опыта с С++. Вполне невинные исправления (и вполне очевидные) в состоянии ускорить выполнение раз в 10.

Однако узкие места лучше искать софтом, а не вручную.

Samail
На сайте с 10.05.2007
Offline
361
#2
_SP_:
Я не знаток внутренней кухни php

А разве это не JavaScript?

Оптимизайка
На сайте с 11.03.2012
Offline
396
#3
Leonid H:
получается и там и тут сумма вычисляется циклично и нагрузка на процессор одинаковая ? ))

Нет. Во втором варианте (это не PHP код) выполняется одна операция, как вы видите (10×11÷2). Т.е. разные вычисления.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
S
На сайте с 30.09.2016
Offline
469
#4

Оптимизайка, ТС, по видимому, имеет ввиду механизм вычисления на уровне процессора. То есть в первом случае некая ячейка памяти (условно-приближенно) "total" 10 раз пополняется из ячейки памяти "count", а во втором случае эта ячейка 10 раз пополняется значением "11". Счётчик "count" отслеживается и в первом и во втором случаях. Лично я не стал бы тут гадать, потому что я не знаком с механизмами оптимизации на уровне процессора.

Но чисто интуитивно - второй случай проще.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
_
На сайте с 24.03.2008
Offline
381
#5
Samail:
А разве это не JavaScript?

Меня тоже удивляет синтаксис, но над ним написано "php код", не доверять ТСу яб не стал.

---------- Добавлено 15.06.2018 в 15:21 ----------

Sitealert:

Но чисто интуитивно - второй случай проще.

Это еще не факт, что 10 сложений будут дороже 1 деления....

Оптимизайка
На сайте с 11.03.2012
Offline
396
#6
Sitealert:
Счётчик "count" отслеживается и в первом и во втором случаях

Какой ещё счетчик во втором случае? Его там нет. Видно же, что тут разные алгоритмы, в первом есть цикл и 2 переменных, а во втором одна переменная и алгоритм вычисления другой.

LH
На сайте с 26.09.2013
Offline
89
#7
Sitealert:
Оптимизайка, ТС, по видимому, имеет ввиду механизм вычисления на уровне процессора. То есть в первом случае некая ячейка памяти (условно-приближенно) "total" 10 раз пополняется из ячейки памяти "count", а во втором случае эта ячейка 10 раз пополняется значением "11". Счётчик "count" отслеживается и в первом и во втором случаях. Лично я не стал бы тут гадать, потому что я не знаком с механизмами оптимизации на уровне процессора.
Но чисто интуитивно - второй случай проще.

на уровне транзисторов и проводников.

Посылаются положительные/отрицательные импульсы, расчет производится в двоичной системе счисления ( 0 и 1 ) путем сдвигов регистров

0001 - 1

0010 - 2

0011 - 3

0100 - 4

0101 - 5

0110 - 6

...

S
На сайте с 30.09.2016
Offline
469
#8
Оптимизайка:
Какой ещё счетчик во втором случае? Его там нет.

У процессора же умножение в конечном счёте сводится к сложению. Там и счётчики появляются, и флаги всякие. И лично я не знаю, в каком случае больше операций на уровне ячеек памяти.

_SP_:
Это еще не факт, что 10 сложений будут дороже 1 деления....
Тоже интересный вопрос.

---------- Добавлено 15.06.2018 в 20:36 ----------

Leonid H, А Вы проверьте. Проделайте по 10000 раз то и другое, и сравните время выполнения.
Оптимизайка
На сайте с 11.03.2012
Offline
396
#9
Sitealert:
У процессора же умножение в конечном счёте сводится к сложению.

Да ладно?

https://web.itu.edu.tr/kesgin/mul06/intel/instr/mul.html

S
На сайте с 30.09.2016
Offline
469
#10
Оптимизайка:
Да ладно?

Да наверняка идёт поразрядное умножение с последующим сложением.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий