ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
7 июля
216968 Топик полностью
Mahagam (20.10.2010 18:54, просмотров: 225) ответил Evgeny_CD на Ну а сколько тактов у него уйдет при 32 битных операндах? Сложить 2 32 битных числа и пр.?
берём простой код:  for (i=0; i < 10; ++i) sum += a[i]; где sum и массив a - intы компилер такой короткий цикл unroll`ит полностью. и показывает вот такую вот хрень: ... R1 = R1 + R2 ( NS ) || R2 = [ P1 ++ ] || NOP ; R1 = R1 + R2 ( NS ) || R2 = [ P1 ++ ] || NOP ; R1 = R1 + R2 ( NS ) || R2 = [ P1 ++ ] || NOP ; R1 = R1 + R2 ( NS ) || R2 = [ P1 ++ ] || NOP ; ... причём согласно симулятору каждая строка исполняется за один такт. если цикл сделать на тыщу повторений - то банально настраиваются регистры аппаратных циклов и строка тоже получается одна! R1 = R1 + R2 ( NS ) || R2 = [ P1 ++ ] || NOP ; и она тоже исполняется за такт. ну то есть сумма тыщи int`ов - за чуть больше тыщи тактов. код посложнее for (i=0; i < 1000; ++i) c[i] = b[i] + c[i]; разворачивается в такое: R1 = R0 + R1 ( NS ) || R0 = [ P0 ++ ] || NOP ; MNOP || R1 = [ P1 ++ ] || [ I0 ++ ] = R1 ; естественно, что прогрузку аппаратных счётчиков цикла я не показываю. и такое тело цикла исполняется за такт на строку то есть суммировать два массива в третий - по времени занимает 2*(размер int массива) тактов. симулятор кортекса запускать будете? бороться с чОрным Фином желаете? я чтой-то не представляю как кортекс за два такта сможет взять два числа из разных массивов, сложить, поместить в третий массив, и ещё отсчитать что цикл завершился.