LINUX.ORG.RU

История изменений

Исправление numas13, (текущая версия) :

Я не понимаю, что мешает делать разбор команд вперёд.

Конвейер. Процессору необходимо некоторое время чтобы понять какую инструкцию он исполняет.

Как это выглядит сейчас.

J: ibranch label
...
L: label: ops...

    A F0 F1  S  D  B
 0  J                 << адрес ibranch
 1     J              << загрузка 1
 2        J           << загрузка 2
 3           J        << распаковка ШК
 4              J     << декодирование
 5                 J  << тут процессор понимает что это ibranch
 6  L                 << начинается исполнение label

Т.к. сейчас в Эльбрусах нет предсказателя, то у него вырисовывается та самая задержка у ibranch/rbranch. С предсказателем необходимо хотя бы раз выполнить код, чтобы предсказатель понял что после инструкции J надо подавать адрес label на конвейер.

J: ibranch label
...
L: label: ops...

    A F0 F1  S  D  B
 0  J  
 1  L  J              << если предсказатель уже знает про ibranch
 2     L  J           
 3        L  J        
 4           L  J     
 5              L  J  
 6                 L  << инструкция из label

Исходная версия numas13, :

Я не понимаю, что мешает делать разбор команд вперёд.

Конвейер. Процессору необходимо некоторое время чтобы понять какую инструкцию он исполняет.

Как это выглядит сейчас.

J: ibranch label

    A F0 F1  S  D  B
 0  J                 << адрес ibranch
 1     J              << загрузка 1
 2        J           << загрузка 2
 3           J        << распаковка ШК
 4              J     << декодирование
 5                 J  << тут процессор понимает что это ibranch

Т.к. сейчас в Эльбрусах нет предсказателя, то у него вырисовывается та самая задержка у ibranch/rbranch. С предсказателем необходимо хотя бы раз выполнить код, чтобы предсказатель понял что после инструкции J надо подавать адрес label на конвейер.

J: ibranch label
...
L: label: ops...

    A F0 F1  S  D  B
 0  J  
 1  L  J              << если предсказатель уже знает про ibranch
 2     L  J           
 3        L  J        
 4           L  J     
 5              L  J  
 6                 L  << инструкция из label