Top

Лучшие micro-optimization вопросы ИТ разработчиков

  • 6 голосов
  • 3 ответа
  • 0 просмотров

Smart JVM и JIT Micro-оптимизации

Со временем Sun JVM и JIT стали довольно умными. Вещи, которые раньше были общеизвестны как необходимая микрооптимизация, больше не нужны, потому что об этом...

Задан 23 Dec 2015, 15:43 от 3 revsAlex Beardsley
  • 11 голосов
  • 14 ответов
  • 0 просмотров

Улучшение быстрой сортировки

Если возможно, как я могу улучшить следующую быструю сортировку (с точки зрения производительности). Какие-либо предложения?

Задан 06 Nov 2009, 14:19 от Pale Blue Dot
  • 72 голосов
  • 3 ответа
  • 0 просмотров

Можно ли сказать предиктору ветки, насколько вероятно следовать за веткой?

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

Задан 05 Dec 2009, 05:07 от Andy Shulman
  • 5 голосов
  • 2 ответа
  • 0 просмотров

Использование SIMD / AVX / SSE для обхода дерева

В настоящее время я исследую, возможно ли ускорить обход дерева Ван Эмде Боаса (или любого дерева). Учитывая один поисковый запрос в качестве входных данных,...

Задан 16 Dec 2013, 16:11 от user1610743
  • 101 голосов
  • 3 ответа
  • 0 просмотров

Почему мое приложение тратит 24% своей жизни на проверку нуля?

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

Задан 15 May 2013, 09:15 от Will Calderwood
  • 11 голосов
  • 16 ответов
  • 0 просмотров

Какой из этих кусков кода быстрее в Java?

а) for(int i = 100000; i > 0; i--) {} б) for(int i = 1; i < 100001; i++) {} Ответ там наэтот сайт [http://www.mydeveloperconnection.com/html/JavaTrap.htm] (вопрос 3). Я просто не могу понятьПочему?С сайта: 3. а

Задан 01 Nov 2009, 05:53 от Moeb
  • 11 голосов
  • 14 ответов
  • 0 просмотров

Улучшение быстрой сортировки

Если возможно, как я могу улучшить следующую быструю сортировку (с точки зрения производительности). Какие-либо предложения? void main() { quick(a,0,n-1); } void quick(int a[],int lower,int upper) { int loc; if(lower<upper) { ...

Задан 06 Nov 2009, 15:19 от Pale Blue Dot
  • 19 голос
  • 1 ответ
  • 0 просмотров

DateTime.DayOfWeek микрооптимизация

Прежде всего:Я задаю этот вопрос просто для удовольствия и хочу учиться. Я должен признать, что люблю возиться с микрооптимизациями (хотя они никогда не прив...

Задан 07 Mar 2014, 18:38 от rpax
  • 82 голосов
  • 9 ответов
  • 0 просмотров

Когда, если вообще, будет ли развертывание цикла все еще полезным?

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

Задан 27 Feb 2010, 22:41 от dsimcha
  • 41 голос
  • 1 ответ
  • 0 просмотров

Передача нулевого указателя на размещение нового

Размещение по умолчаниюnew Оператор объявлен в 18.6 [support.dynamic] ¶1 с ненулевой спецификацией исключения: void* operator new (std::size_t size, void* ptr) noexcept;Эта функция не делает ничего, кромеreturn ptr; поэтому разумноnoexceptоднако ...

Задан 10 Jul 2013, 12:50 от Jonathan Wakely
  • 20 голосов
  • 4 ответа
  • 0 просмотров

Branch alignment for loops involving micro-coded instructions on Intel SnB-family CPUs

Это связано, но не так, как этот вопрос:Оптимизация производительности сборки x86-64 - выравнивание и прогноз ветвления и немного связан с моим предыдущим во...

Задан 13 Nov 2014, 11:09 от Matthew Daws
  • 5 голосов
  • 6 ответов
  • 0 просмотров

Как: встроенный ассемблер в C ++ (под Visual Studio 2010)

Я пишу критический для производительности проект C ++, в котором 70% времени используется модулем ядра из 200 строк.Я бы хотел оптимизировать ядро, используя...

Задан 15 May 2010, 10:14 от toxic shock
  • 3 голос
  • 1 ответ
  • 0 просмотров

латентность против пропускной способности в Intel intrinsics

Я думаю, что у меня есть приличное понимание разницы между задержкой и пропускной способностью в целом. Тем не менее, влияние задержки на пропускную способно...

Задан 30 Nov 2016, 01:03 от Jimbo
  • 72 голосов
  • 2 ответа
  • 0 просмотров

Можно ли сказать предиктору ветки, насколько вероятно следовать за веткой?

Просто чтобы прояснить, я не собираюсь здесь переносить что-либо, поэтому любые решения, которые привязывают меня к определенной коробке, вполне подойдут. По сути, у меня есть оператор if, который в 99% случаев оценивается как true, и я пытаюсь ...

Задан 05 Dec 2009, 06:07 от Andy Shulman
  • 18 голосов
  • 2 ответа
  • 0 просмотров

вы работаете с этим биметаллом? с или без кеширования включены? Вы корректируете выравнивание выборки по крайней мере 16, если не 32 байта?

должаю видеть, как люди утверждают, что инструкция MOV может быть бесплатной в x86 из-за переименования регистров.На всю жизнь я не могу проверить это ни в о...

Задан 24 May 2017, 22:16 от Mehrdad
  • 2 голос
  • 1 ответ
  • 0 просмотров

Однако будущее неясно, и дело в этом хорошее, но гораздо более общее: кажется, что компиляторы и разработчики в основном не имеют никакой поддержки и не тратят много времени на размышления об этой мета-оптимизации «более высокого уровня», когда вам в основном приходится заранее определите, может ли вся ваша кодовая база (или, по крайней мере, какой-то большой кусок во время выполнения) использовать расширения A, B, C и т. д. Каждое обсуждение небольшой функции теперь должно быть обусловлено предостережением о турбо частотах, и мы не Я даже не говорил о том, как весы скользят с активными ядрами!

ой ассемблер кода Можете ли вы встроить его в C ++ и проверить по SSE4? На скорости Мне бы очень хотелось увидеть, как шагнуло в развитие SSE4. Или его совсем не беспокоит? Давайте проверим (у меня нет поддержки выше SSSE3) { sse2 strcmp ...

Задан 16 Oct 2017, 04:07 от Exile
  • 3 голос
  • 1 ответ
  • 0 просмотров

@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 ...

Задан 11 Nov 2017, 20:15 от BeeOnRope
  • 2 голосов
  • 4 ответа
  • 0 просмотров

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

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

Задан 20 Jan 2011, 13:18 от Raynos
  • 18 голос
  • 1 ответ
  • 0 просмотров

Или сбой этого, по крайней мере, в циклы androro, а не в полностью развернутый материал, который часто встречается с сотнями инструкций. По общему признанию, это компромисс между пространством и временем - но gcc уже эффективно ставит позицию в этом спектре, не разворачивая циклы, поэтому довольно непоследовательно генерировать гигантские входы и / или выходы.

опытке понять сборку (с включенной оптимизацией компилятора) я вижу следующее: Очень простой цикл, как это outside_loop; while (condition) { statements; }Часто компилируется в (псевдокод) ; outside_loop jmp loop_condition ; unconditional ...

Задан 13 Dec 2017, 00:51 от iBug
  • 5 голосов
  • 3 ответа
  • 0 просмотров

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

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

Задан 15 Dec 2017, 12:23 от Andrew Hardiman
  • 20 голос
  • 1 ответ
  • 0 просмотров

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

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

Задан 01 Jan 2018, 02:21 от BeeOnRope
  • 3 голосов
  • 2 ответа
  • 0 просмотров

, никогда

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

Задан 03 Feb 2018, 10:19 от Shashank Gosavi
  • 8 голосов
  • 2 ответа
  • 0 просмотров

Использование 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 * ...

Задан 23 Nov 2013, 15:02 от Vittorio Romeo
  • 12 голосов
  • 3 ответа
  • 0 просмотров

stackoverflow.com/a/8257808/521754

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

Задан 10 Feb 2011, 05:07 от Thilo
  • 3 голос
  • 1 ответ
  • 0 просмотров

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

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

Задан 09 Jun 2018, 23:15 от BeeOnRope
  • 197 голосов
  • 13 ответов
  • 0 просмотров

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

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

Задан 04 Feb 2009, 22:09 от Air
  • 5 голосов
  • 2 ответа
  • 0 просмотров

@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 и более поздние ...

Задан 03 Aug 2018, 02:06 от Peter Cordes
  • 5 голосов
  • 2 ответа
  • 0 просмотров

Использование SIMD / AVX / SSE для обхода дерева

В настоящее время я исследую, возможно ли ускорить обход дерева Ван Эмде Боаса (или любого дерева). Учитывая один поисковый запрос в качестве входных данных, уже имеющий несколько узлов дерева в строке кэша (схема Ван Эмда Боаса), обход дерева ...

Задан 16 Dec 2013, 17:11 от user1610743
  • 8 голосов
  • 6 ответов
  • 0 просмотров

, Все проверки одновременно

адача состоит в том, чтобы проверить (> триллионы проверок), содержит ли два типа int любую из предопределенных пар грызунов (первая пара 0x2 0x7; вторая 0xd 0x8). Например: bit offset: 12345678 first int: 0x3d542783 first pair of 0x2 second: ...

Задан 03 Mar 2011, 23:14 от osgx
  • 10 голосов
  • 2 ответа
  • 0 просмотров

И 2. Вы подчеркиваете, что, если проверка TLB включает размеры страниц, возможно, можно избежать воспроизведения при пересечении границы 4 КБ внутри огромной страницы, но я не следовал последнему предложению.

выполнения для этих трех фрагментов: pageboundary: dq (pageboundary + 8) ... mov rdx, [rel pageboundary] .loop: mov rdx, [rdx - 8] sub ecx, 1 jnz .loopИ это: pageboundary: dq (pageboundary - 8) ... mov rdx, [rel pageboundary] .loop: mov rdx, ...

Задан 16 Sep 2018, 06:01 от harold
  • 3 голос
  • 1 ответ
  • 0 просмотров

 порт (p2 или p3), так как результат входящей нагрузки, возможно, придется немедленно передать обратно в AGU. Теперь в случае конкурирующей операции хранилища, возможно, вместо этого используется AGU, и оптимизация прерывается, что приводит к повторению 9 циклов.

ла у меня есть установка ниже на IvyBridge, я вставлю код измерения полезной нагрузки в закомментированном месте. Первые 8 байтовbuf хранить адресbuf Сам я использую это для создания переносимых зависимостей: section .bss align 64 buf: resb 64 ...

Задан 08 Jan 2019, 03:53 от user10865622
Page 1 of 2