Результаты поиска по запросу "micro-optimization"

1 ответ

@BeeOnRope: добавлена ​​версия SSE2. Отдельный movd / punpckldq, но все же лучше, чем 2 скалярных операции на некоторых процессорах.

тавьте себе цикл хранения-загрузки, подобный следующему, который загружаетDWORDs из несмежных местоположений и хранит их непрерывно: top: mov eax, DWORD [rsi] mov DWORD [rdi], eax mov eax, DWORD [rdx] mov DWORD [rdi + 4], eax ; unroll the above ...

4 ответа

Если вы пишете код, для которого важна производительность, лучше избегать внутренних функций.

ли перемещение внутренней функции за пределы этой так, чтобы она не создавалась при каждом вызове функции, было бы микрооптимизацией? В этом конкретном случаеdoMoreStuff функция используется только внутриdoStuff, Должен ли я беспокоиться о ...

3 ответа

, поэтому использование более узкой константы помогает только для непосредственных инструкций ALU, а не для

у переместить элементы данных, хранящиеся в памяти, в регистр общего назначения по своему выбору, используяMOV инструкция. MOV r8, [m8] MOV r16, [m16] MOV r32, [m32] MOV r64, [m64]Не стреляйте в меня, но как добиться следующего:MOV r24, [m24]? ...

ТОП публикаций

1 ответ

Ваш ответ подтолкнул меня написать правильный, так что ... спасибо, я думаю: P

тавьте, что вы хотите выровнять серию инструкций по сборке x86 по определенным границам. Например, вы можете выровнять циклы по 16 или 32-байтовой границе или упаковать инструкции, чтобы они эффективно помещались в кэш uop или что-то ...

2 ответа

, никогда

ичок в программировании сборки x86_64. Я писал простую программу "Hello World" в сборке x86_64. Ниже мой код, который прекрасно работает. global _start section .data msg: db "Hello to the world of SLAE64", 0x0a mlen equ $-msg section .text ...

2 ответа

Использование bools в расчетах, чтобы избежать веток

Вот небольшое любопытство микрооптимизации, которое я придумал: struct Timer { bool running{false}; int ticks{0}; void step_versionOne(int mStepSize) { if(running) ticks += mStepSize; } void step_versionTwo(int mStepSize) { ticks += mStepSize * ...

3 ответа

stackoverflow.com/a/8257808/521754

у меня есть внутренние классы с закрытыми методами или полями, компилятор должен создавать синтетические методы доступа, защищенные пакетами, чтобы позволить внешнему классу обращаться к этим закрытым элементам (и наоборот). Чтобы избежать ...

1 ответ

@PeterCordes По словам Агнера, маскировка слиянием бесплатна при приземлении Рыцарей (за вычетом дополнительной зависимости). Но он не прокомментировал Скайлэйк. Я не использую маскировку достаточно, чтобы знать. Я не могу представить, что все по-другому.

тим, у вас есть значения вrax а такжеrdx Вы хотите загрузить вxmm регистр. Одним из способов будет: movq xmm0, rax pinsrq xmm0, rdx, 1Это довольно медленно, хотя! Есть ли способ лучше?

13 ответов

Если у вас более 3 строк, подумайте об использовании StringBuilder или просто String, в зависимости от используемого вами компилятора.

лжны строить строки все время для вывода журнала и так далее. Над версиями JDK мы узнали, когда использоватьStringBuffer (много добавлений, потокобезопасен) иStringBuilder (многие добавления, не потокобезопасны). Какой совет по ...

2 ответа

@BeeOnRope: они всегда имеют непосредственную ширину с регистром (кроме rax). Вот почему последние правки об этом говорят «al / ax / eax / rax, imm8 / 16/32/32». Может быть, я должен добавить «соответственно» к этим уже загроможденным предложениям.

Haswell и более ранних версиях обычно составляет 2 мопа с задержкой в ​​2 цикла, поскольку у мопов Intel традиционно может быть только 2 входа ( https://agner.org/optimize/ [https://agner.org/optimize/]). Broadwell / Skylake и более поздние ...