2016-03-01 2 views
1

Я столкнулся с проблемой вычисления циклов процессора, необходимых для выполнения кода. Код находится нижеРасчет циклов процессора?

for (int i = 0; i < 64; i++){ 
add(2,3);// 1 cycle needed 
sub(5,2);// 2 cycles needed 
mul(3,4);// 4 cycles needed 
} 

Если мы испустим этот код на Uni-процессоре. Будут ли общие циклы просто 64x (1 + 2 + 4) = 448 циклов? Как он отличается от выполнения его на SIMD с 64PE и как мы вычисляем общее время выполнения?

+0

Я извиняюсь за свое незнание (не знаком с C), но не назвал бы метод более чем 1-4 циклами? – Neil

+3

Это не так просто. Во-первых, это зависит от процессора и архитектуры, если у него достаточно целочисленных исполнительных блоков, возможно, он сможет запустить сразу три или даже несколько инструкций. Затем вы заплатите больше изначально за декодирование команд до тех пор, пока не начнет кэширование микроопераций. Кроме того, ветвь в ней может быть предсказана неправильно изначально. Короче говоря, это сильно зависит от множества факторов, сколько циклов потребуется. В любом случае, нет никакой инструкции, которая завершится всего за один цикл на любом современном процессоре. – JustSid

+0

Имейте в виду, что конвейер процессора довольно длинный (и он снова зависит от некоторых факторов, то есть, если микропроцессорный кеш может помочь, или какая именно инструкция). Вы можете получить пропускную способность до 4 инструкций за цикл, но сами инструкции все равно возьмут, скажем, 14 циклов. – JustSid

ответ

3

Не зная больше о конкретной архитектуре, на этот вопрос невозможно ответить.

Предполагая, что это своего рода академической проблемой я бы ответил:

"uni processor": 64 x (1 + 2 + 4 + loop_overhead) + loop_init = total_cycles 
    loop_init: int i = 0 -> probably 1 cycle 
    loop_overhead: i++; i < 64 -> probably 2 cycles 

"SIMD": 1 + 2 + 4 = total_cycles 
1

Число циклов будет меняться в зависимости от CPU. Так будут и средства их вычисления.

«Цикл процессора» довольно слабо определяется как «время, необходимое для одной простой операции с процессором», причем сложение часто рассматривается как представитель «простой процессорной операции». Иногда «Цикл процессора» задается как обратная тактовая частота. Эти два определения часто могут быть близкими, но не обязательно эквивалентными.

Даже если вы преодолеете двусмысленность того, что означает «цикл ЦП», ни один код не будет просто выполнять добавление (или вычитание или умножение) изолированно. Будут также такие вещи, как оценка или выборка значений операндов, которые могут подсчитываться или не учитываться, а фактическая продолжительность каждой операции (или инструкции) зависит от ЦП.

И тогда есть функции ЦП, такие как конвейерная обработка (так что одна операция может быть начата, а предыдущая - частично завершена), что делает такие измерения, как циклы ЦП, бессмысленными с множеством современных процессоров.

Смежные вопросы