0x1337 – Telegram
0x1337
292 subscribers
6 photos
9 files
19 links
Y0L0 DUD33333
Download Telegram
Продолжая рассуждения на тему обмена данных между Процессором и Памятью:
Есть 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
У меня есть ключ от многих дверей. Вот что происходит за одной из таких дверей, открытых этим ключом^.

#pwn #zero
Работая с MSVC компилятором / линковщиком, использовать семантику Unix ABI aka SYSTEM V, у вас не получится. Однако, работая с MinGW возможность все же есть, в частности, речь про вызовы функций с внешней компоновкой:

__attribute__((sysv_abi))

- и будет вам счастье!

#interesting #asm #compilers
https://www.agner.org/optimize/blog/read.php?i=1015

Очень крутой пост на тему 'Какой компилятор лучше оптимизирует код в 2К19' от Дядюшки Агнера. Для меня результат предсказуем, а для тебя?

#optimization #cxx #compilers
Небезызвестный тебе журнал Хакер - большую часть времени считался(и, вообще говоря, продолжает считаться) журналом для Домохозяек. Были ли альтернативы? Да! Хардкорные ли? С моей точки зрения - Да! Сами журналы электронные, представляют собой 'Дух и Прах' Underground площадок того времени. Xaoc, def@ced, x25 и многие другие, а почитать можно тут:

http://e-zine-lib.zero-day.ru/lib/

#e-zines #old_school
Знаю, не все из читающих программируют на C++, тем не менее, хотел бы узнать вот что:

Выражение состоящее из Шести подряд идущих точек стало возможным к написанию в...
Anonymous Quiz
13%
Точно в C++11
5%
Точно в C++98
4%
Точно в C++03
16%
Точно в C++17
7%
Точно в C++14
15%
Точно в C++20
40%
Планируют принять в будущих стандартах
Я признателен тем, кто даёт обратную связь. За следующий вопрос, спасибо одному из читателей.

Выражение из скольки подряд идущих точек НЕ может быть представлено в C++:
Anonymous Quiz
11%
1
7%
3
13%
5
7%
4
33%
4 и 5
3%
6
4%
4 и 6
3%
5 и 6
20%
4 и 5 и 6
В ближайшее время я расскажу, почему ответы именно такие, какие они есть. А так же, расскажу о:

- Оптимизационный трюк о котором вы могли не знать:

- Иногда решение всем известных задач, может удивлять. В GCC, кажется, не знают, в boost, тоже. Да и вообще, на простарах сети я ничего подобного не нашёл. Не хочу раскрывать детали и подробности, но поверьте мне, эту задачу, вы наверняка решали и не один раз... Но, скорее всего, не так, как её решил я.

- Тред Пулы или о том, как я JobStealing писал.

- TBB - как много в этом слове... машинных инструкций :) Конечно, любая задача для меня - это challenge, и в данном случае, мне удалось оставить не у дел сам Intel TBB. Хотя... Не в первый раз.

- О переводах чисел с плавающей запятой в строки, и обратно.

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

- То, что вам могли не рассказать на Лекциях по Аналитической Геометрии.

- Gradients... Gradients...

- Наверное, дорасскажу о JeMalloc, а продолжу - другими Аллокаторами.

- JeMalloc & Co.

- Шейдеры, шейдеры: магия, доступная каждому.

- ...

Наверное, что-то ещё... Уверен :) Нет, знаю!

#coming_soon
🤔1
Ну и говоря о том, куда пропал и почему все вдруг резко встало, замечу:

Честные 100Гбит/Сек с одной сетевой карточки(Mellanox, например) - реальность, даже если papers говорят обратное(да, какие-то части Ядра Linux, можно и переписать...)

#Job
Ну что, вот и объяснительная:

Понятно, что одна точка, это использование оператора '.' или, оператора '.*', например.

Три точки - VA_ARGS Template Parameter Pack или Функции с неизвестным числом параметров(printf, например).

Шесть точек - объединение VA_ARGS Template Parameter Pack и Функций с неизвестным числом параметров. Такой подход находит свое применение в type_trait-е определения функции is_function:

https://en.cppreference.com/w/cpp/types/is_function

И, наконец, самое интересное, это 4 точки:

Выражения свертки(C++17) + оператор '.*'. Да, использовать обычный '.' запрещено, а вот '.*' - можно.

https://en.cppreference.com/w/cpp/language/fold

#answers #quiz