Другие языки программирования и технологии

Почему в матлабе операции + - * и / производятся за одинаковое время?

Ведь каждая из эти операции делается за свое определенное число таков ЦП. Та же операция деления самая затратная
И вообще, я не понимаю если честно
У меня частота процессора 3.8 ГГц. Я в матлаб ввел цикл с 3 800 000 000 операций a=a+1. По логике, он должен за секунду управляться. Но, нет, tic toc показывает 3 сек. Почему?
Это 1 такт, но операции сами длиной и много тактов бывают
https://habr.com/ru/company/otus/blog/343566/
Да, а если множество ядер, то может и распараллеливается что-то
Руслан Ахылов
Руслан Ахылов
90 175
Лучший ответ
Алексей Митрофанов Нет, матлаб это одноядерная прога. Одна вкладка - одно ядро
>По логике, он должен за секунду управляться.
А что с загрузкой данных в регистры и выгрузкой результата в память после каждой операции? Добавь еще 2 mov'а - вот и получишь свои 3 секунды.
Игорь Литвин
Игорь Литвин
87 802
Во первых, тактовая частота не имеет однозначной связи со скоростью выполнения команд: каждая команда выполняется несколько тактов, но при этом на одном ядре процессора одновременно могут выполняться несколько команд (конвейер).

Во вторых, Матлаб - не компилятор, генерирующий машинный код. И выполнение в нём каждой команды - это достаточно большой блок программного кода, в котором собственно сложение или умножение занимает очень незначительную часть времени выполнения. Потому ты разницу и не видишь.

Во третьих, a=a+1 - это не одна операция, а три: прочитать значение из a, увеличить его на 1, записать значение в a.
Aleksej Ott a=a+1 компилятор должен суметь соптимизировать до инкремента и регистров (если бы речь шла не о матлабе), а вот отдельно нужно еще просчитать затраты на обслуживание цикла
Тут много факторов.
Как уже сказали - не факт, что команда будет выполнятся один такт. Надо ещё число в регистр положить, выполнить с ним операцию сложения, может обратно в память положить.
Во вторых, по идее может выполнится и быстрее, код может распараллелится на несколько потоков + другие оптимизации.
В третьих процессор не обязан выполнять исключительно твою программу, он может прерваться на другие задачи. Тут как операционная система решит.
Матлаб - не лучший язык для подобных проверок. Он рассчитан на работу с матрицами (MATLAB - Matrix Laboratory), что может оказать влияние на расчёты + интерпретируемый. Лучше подобное в Си такое проворачивать.