LINUX.ORG.RU

x86: почему CISC-команды медленнее?

 ,


1

4

Неоднократно слышал, что:

  • leave медленнее, чем
    mov esp, ebp
    pop ebp
    
  • enter N, 0 медленнее, чем
    push ebp
    mov ebp, esp
    sub esp, N
    
  • stosd медленнее, чем
    mov [es:edi], eax
    add edi, 4
    
  • repne scasb медленнее, чем наивный strchr()

и так далее.

Вопрос: почему? Не похрен ли, одна команда развернётся в 10 микроопераций или четыре команды развернутся в столько же? В первом случае даже нагрузка на декодер меньше.

★★★★★

Последнее исправление: Klymedy (всего исправлений: 1)
Ответ на: комментарий от emulek

Авторы наверное машину времени использовали.

The Pentium III and Pentium 4 execute simple microinstructions similar to MIPS instructions, called micro-operations in Intel terminology. These microin- structions are fully self-contained operations that are initially about 70 bits wide. The control of datapath to implement these microinstructions is completely hard- wired. This last level of control expands up to three microinstructions into about 120 control lines for the integer datapaths and 275 to over 400 control lines for the floating-point datapath—the latter number for the new SSE2 instructions included in the Pentium 4. This last step of expanding the microinstructions into control lines is very similar to the control generation for the single-cycle datapath or for the ALU control.

К тому же, авторы про другое говорят.

The Microarchitecture of the Pentium 4 Processor Glenn Hinton, Desktop Platforms Group, Intel Corp. Dave Sager, Desktop Platforms Group, Intel Corp. Mike Upton, Desktop Platforms Group, Intel Corp. Darrell Boggs, Desktop Platforms Group, Intel Corp. Doug Carmean, Desktop Platforms Group, Intel Corp. Alan Kyker, Desktop Platforms Group, Intel Corp. Patrice Roussel, Desktop Platforms Group, Intel Corp.

Microcode ROM

Near the Trace Cache is the microcode ROM. This ROM is used for complex IA-32 instructions, such as string move, and for fault and interrupt handling. When a complex instruction is encountered, the Trace Cache jumps into the microcode ROM which then issues the uops needed to complete the operation. After the microcode ROM finishes sequencing uops for the current IA-32 instruction, the front end of the machine resumes fetching uops from the Trace Cache.

Книжки болван читай, прежде чем эфир форумный засорять

anonymous
()
Ответ на: комментарий от anonymous

The control of datapath to implement these microinstructions is completely hard- wired. This last level of control expands up to three microinstructions into about 120 control lines for the integer datapaths and 275 to over 400 control lines for the floating-point datapath

я именно так и думал. Перечитай свой же бред.

я процитирую:

на современных x86 процессорах простые и часто используемые инструкции исполняются непосредственно - без ссылки на microcode engine (hard-wired control)

как видишь, они на самом деле «expands up to three microinstructions».

Но ты конечно можешь считать «three microinstructions» одной операцией, что с тобой спорить-то?

emulek
()
Ответ на: комментарий от emulek

Перечитай свой же бред.

Ты реально невменяемый.

как видишь, они на самом деле «expands up to three microinstructions».

почитай придурок когда используется микрокод, и то что я написал - у тебя проблемы с понимаем и думаю лечить тебя бесполезно, ты просто туп как скотина необучаемая.

anonymous
()
Ответ на: комментарий от anonymous

Чтобы до тебя хоть немного дошло как это интеловское говно работает, вот тебе еще из ихнего манулала

IA-32 Instruction Decoder The instruction decoder receives IA-32 instruction bytes from the L2 cache 64-bits at a time and decodes them into primitives, called uops, that the machine knows how to execute. This single instruction decoder can decode at a maximum rate of one IA-32 instruction per clock cycle. Many IA-32 instructions are converted into a single uop, and others need several uops to complete the full operation. If more than four uops are needed to complete an IA-32 instruction, the decoder sends the machine into the microcode ROM to do the instruction. Most instructions do not need to jump to the microcode ROM to complete. An example of a many-uop instruction is string move, which could have thousands of uops.

anonymous
()
Ответ на: комментарий от emulek

я рад

Да мне пох если честно - насрать на x86 уже давно, только почитай свое говнище, что ты пишешь с видом интеллектуала

x86: почему CISC-команды медленнее? (комментарий)

Впрочем, AFAIK на сегодня ВСЁ делается микрокодом, хотя бы
потому, что РОН вовсе не 8, а намного больше.

anonymous
()
Ответ на: комментарий от anonymous

речь там вообще о другом шла. А именно о том, что каждая x86 команда переводится в несколько других внутренних команд, что ты успешно и доказал. Таким образом, не существует «простых» команд, которые не во что не переводятся, а «выполняются непосредственно».

Т.ч. спасибо тебе за доказательства моих слов.

emulek
()
Ответ на: комментарий от emulek

Таким образом, не существует «простых» команд

Many IA-32 instructions are converted into a single uop

которые не во что не переводятся

тупое говно - кто-то тут кроме тебя это вообще говорил ?

спасибо тебе за доказательства моих слов

иди нахуй.

anonymous
()
Ответ на: комментарий от emulek

Ну пизданутый ты, пизданутый. Когда ж ты сам наконец осознаешь, что ты грязная блядь, которая не знает вообще ни хуя, и которой надо заткнуть ебальник навсегда, и никогда больше не иметь мнения ни по одной теме?!?

Большая часть инструкций x86 транслируется ровно в одну uOP.

anonymous
()
Ответ на: комментарий от emulek

Ну давай ссань - на что надо разделить xor rax, rax? Разделение на uOP"s уменьшает throughput.

Идёшь открываешь мануал и смотришь throughput у нооп"а - на моём хасвеле это 0.25 - это задержка на всю байду. Т.е. если инструция имеет throughput больше 0.25, то она либо сборная, либо это какая-то внутрянная задержка основанная на каких-то особенностях камня, либо, что более вероятно, специально запиленная задержка(которую можно объяснить чем-то типа: конвейр короткий). Сборная будет иметь throughput >= 0.5 минимум.

Судя по цифрам работа с памятью(l1d) реально делается через дополнитель uOP(mov). Почти все остальные основные инструкции - одиночные, кроме каких-нибудь парных(аля фма, аля sbb) и иже с ним.

Никаких «каждых» не существует и тебя правильно опустили, питух. Ты безмозглое говно, у которого даже псевдологичное мышление отсутвует - ты не можешь оценивать реально говна, которого ты начитался/тебе пацаны сказали. Поэтому ты несёшь такую херню, аля: «умножение на леа, причем нстолько туп, что даже не умеешь считать кол-во lea», «конпелятор сам делает», «у ссд latency== 0», «цикл на счётчика работает так же», «конпелятор так считает», «десят умножений за какой-то мистический такт», «вызов функции на 2инструкции в цикле быстрее инлайна» и прочее.

Тотальная ущербатня, которая несёт херню, ничего реально не зная и не понимая, причем нести херню можно, если она хотябы логична, что в твоём случае нетак.

anonymous
()
Ответ на: комментарий от anonymous

mne kajetsya ili eto Kron73 aka balancer is pod anona skydoymiem pleshet?

anonymous
()
Ответ на: комментарий от emulek

Скорее такты слишком сложны для обсосокв, поэтому у них мода кукарекать о том, что «такты нельзя считать» - можно. Это делают и пацаны, и тулзы интела и прочее.

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

А анскильная макака, которая даже притивщины не знает, да и нихрена в этой жизни не понимает, конечно кукрекать, когда обсирается - кукарекай дальше.

anonymous
()
Ответ на: комментарий от emulek

Может, тебя ебальцем еще и в hardware counters интела ткнуть, а?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.