0x1337 – Telegram
0x1337
292 subscribers
6 photos
9 files
19 links
Y0L0 DUD33333
Download Telegram
Cortex-A53, увы не умеет в OOR execution, а вот его собрат, Cortex-A57 могЁт. Выбор, конечно очевиден, да и знать полезно.

#interesting
Something like that^

#interesting
Одно дело - разглагольствовать в чатиках и канале, другое - находить конкретные ошибки, весьма конкретных людей с Именем. Настоящим именем^. Ошибаться это нормально, но разве правки - не повод для радости, Приятель?

#asm #peter_cordes
arm_cortex_a55_software_optimization_guide_v3.pdf
558.7 KB
Продолжаем оптимизировать под мобилки^

#optimization_guide_arm_a55 #asm #mobile
fno-verbose-asm - если хотите отключить вывод комментариев в ASM листинге!

#basic #important
Ребята, как я и обещал - радую годным, авторским контентом. Увы, скидывать целиковые статьи, а точнее читать их тут - дело не из простых. Поэтому, сами статьи публикую 'где-то', а сюда скидываю ссылку. Так вот, авторский контент подъехал:

https://habr.com/ru/post/468581/

#publication #asm #cxx #optimization
Однооперандная команда x86 / 64 : {I}MUL{X} R32 / R64 имеет разный latency[3;4], хотя Агнер Фог и рапортует о том, что latency у этой команды постоянен и всегда равен 4 - он ошибается:
Если после команды умножения данной выше мы обращаемся к регистру содержащему младшие биты результата, то latency будет 3, а если обращаемся к старшим - 4.
Речь идет, конечно, о поколении процессоров Intel Sandy Bridge и выше.

#asm #optimization #interesting
Данные в процессор загружаются из памяти. Дело это не быстрое:
https://www.7-cpu.com/
Вот тут^ выбери модель интересующего тебя процессора и посмотри, какова цена работы процессора с 'Голой' памятью. На Haswell, например, 90 clock cycles.

#measurments #ram #processor #link
Продолжая рассуждения на тему обмена данных между Процессором и Памятью:
Есть Out Of Order Execution процессор, есть кусочек кода который подгружает данные из Памяти в Кеш Процессора и как-либо обрабатывает их после, и есть код который отрабатывает ДО места где эти данные загружаются / используются.
Из поста выше мы знаем, что обмен данными между Памятью и Процессором - долог: если на момент пользования обмениваемыми данными, в Кеше Процессора их нету - работа встанет. Процессор, конечно, не дурак и просматривая Фреймы наперед, начнет загрузку данных в Кеш еще до того как они реально понадобятся, параллельно выполняя команды идущие ДО. То есть я к чему: нужно писать код так, чтобы до Работы с Памятью можно было сделать какую-либо полезную Память-Независимую работу, на фоне выполнения которой и будет происходить опережающая выгрузка данных из Памяти.

#memory #cache #prefetching
Также, не забывай, что Кеш в который недавно были загружены нужные данные - Горячий, а кеш в котором этих данных нет - Холодный. И все тесты, бенчмарки и прочее-прочее, лучше проводить на Холодный Желудок, прочищая его от вызова к вызову.

#terminology #cache
image_2019-09-27_16-13-43.png
74.9 KB
Весьма полезная табличка.

#asm #info
image_2019-09-27_16-29-22.png
96.1 KB
Смотри, какие выводы можно сделать из таблички выше:
Моя x64 программа написанная на C++, работает на Windows x64 медленнее чем на Nix, MacOS потому что...:
Внутри функции мне нужно использовать больше 7ми регистров общего назначения, но Microsoft Call ABI требует, чтобы все что свыше этого числа - сохранялось в стек, а затем, восстанавливалось обратно. Linux / MacOS Call ABI имеют бОльшую границу, позволяя использовать больше регистров. Выше, на картинке, пример - сравни количество строк кода.

#asm #performance
PPro - первый процессор Intel с реализацией Out Of Order Execution. 1995 год, да.

#history
А до этого момента, выполнение было упорядоченным, но, с возможностью выполнить 'Две Определенные' подряд идущие команды одновременно.

#history
Новое, не всегда лучше старого и подтверждение тому, команды ассемблера SHLD / SHRD :
На процессорах Intel Haswell и выше - latency 3, однако на процессорах Intel Sandy Bridge и до Haswell - latency этой команды 1.

#interesting #asm
Привет, смотри как мне удалось получить доступ ко ВСЕМ пользовательским аккаунтам сайтов: vc.ru, dtf.ru, tjournal.ru. Это было просто и безумно скучно, но ведь было же. А вы тут о СберБанке вопли... Уверен, и с оным все было проще-некуда.

https://vc.ru/bugs/75864-your-tokens-are-my-tokens-ili-istoriya-odnoy-radio-aktivnoy-xss-na-vseh-servisah-komiteta

#noscripting #pwn
mkurnosov-rdtsc-2014.pdf
2.5 MB
Ага, если делать бенчмарки, то как-то так^

#faq
Не забывай, что realloc - C / C++, при невозможности расширить текущий блок памяти, сделает копирование текущего блока памяти с раширением до нужного размера. А это, в свою очередь, может быть совсем не то, что тебе нужно. Другими словами - применимо лишь для trivially copyable типов.

Продвинутые версии STL-Like контейнеров, типа Библиотеки Facebook Folly - содержат свою реализацию класса vector, работающего со специальным аллокатором и функцией realloc, отличной по поведению от той, что предоставляет стандарт языка C:

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

#cxx #performance #memory #allocator