RISC?
В теории можно сделать 1 такт, но не уверен, что на практике где-то так работает. Скорее будет около 3 тактов.
Насчёт RISC не знаю, но в комментариях на хабре писали о 2-3 тактах на Интеле. У меня в замере 1.8, если не напортачил
Отключали бусты на время замера?
Нет. Руководствуюсь таким принципом: для однопоточности мне заявляют максимальную тактовую частоту. Я вижу, что под нагрузкой она быстро достигается и сохраняется на моих процессорах (не наблюдал троттлинга). Поэтому все расчёты беру по этой частоте. Ну и по опыту разброса, замер не меньше секунды, остальное нерепрезентативно на x86.
Так вы же хотите такты посчитать, а они должно быть на базовой частоте тикают.
В теории можно вообще сделать как говорит молодежь "тупо и решительно": прямо после команды перехода (условного или нет) вставлять ШК по адресу перехода. Тогда и команды подготовки перехода можно вообще избавиться сразу. Работать должно так: декодер считывает ШК с командой перехода и сразу считывает ШК за ней (это ШК по адресу перехода) и собственно сам адрес перехода. Эта ШК сразу направляется на дополнительный конвейер. Решение простое и эффективное )
Почему? Например, тест отработал 1 секунду и сделал n итераций. Процессор i7-7560U, частота базовая 2.4 ГГц, макс 3.8. Под нагрузкой быстро поднимается до макс и работает на ней. То есть за секунду выполняется около 3.8e9 тактов. Значит, на одну итерацию цикла уходит 3.8e9/n тактов.
Лучше всё же без бустов, так будет надёжнее. И желательно зафиксировать частоту на базовой. 1.8 / 3.0 = 0.6 3.8 * 0.6 = 2.28 Ghz
Мне пока было лень заниматься фиксацией частоты, в расчётах не подводило. Можете кинуть в меня инструкцией, тогда придётся учитывать в будущем :) но я подозреваю, что это через биос ставится. А что за тройка?
Я пытался как-то зафиксировать частоту в БИОСе, но у меня ничего не получилось. Все равно частота произвольно повышалась под нагрузкой.
throttlestop ом можно зафиксировать частоту
У вас 1.8 такта, а я предполагаю, что там должно быть 3 такта. Но я не истина в последней инстанции, лучше повторить без бустов. Я обычно делаю так: sudo cpupower frequency-set -g performance -u 2.4GHz Это ограничит потолок в 2.4GHz и зафиксирует. Можно поиграться с другими -g. Например -g userspace -f 2.4GHz. Но я обычно вместо performance ставлю ondemand, это позволяет сбрасывать частоту, но не поднимать выше выставленной.
Вместо 2.4GHz выставляете базовую для CPU.
В БИОСе нужно отключать ТУРБО-буст и некоторые другие фичи.
У меня буст можно отключать и программно.
Хм, но если предположить 3 такта на тело цикло, то всего должно выполниться 3n тактов. И это должно произойти за секунду. Тогда процессор должен работать на частоте 6.3 ГГц, что вроде как невозможно. Я посмотрю [вечером, наверное, осталось на ноутбуке дома], что я вообще замерял и пришлю, на всякий случай. Меня тоже очень сильно удивил результат в 1.8.
Для такого простого случая он, по крайней мере, должен быть приближен к целому числу. Так лучше повторить в контролируемой среде, чтобы не гадать на кофейной гуще.
Согласен, но придётся немного подождать :)
Обсуждают сегодня