Продолжая рассуждения на тему обмена данных между Процессором и Памятью:
Есть Out Of Order Execution процессор, есть кусочек кода который подгружает данные из Памяти в Кеш Процессора и как-либо обрабатывает их после, и есть код который отрабатывает ДО места где эти данные загружаются / используются.
Из поста выше мы знаем, что обмен данными между Памятью и Процессором - долог: если на момент пользования обмениваемыми данными, в Кеше Процессора их нету - работа встанет. Процессор, конечно, не дурак и просматривая Фреймы наперед, начнет загрузку данных в Кеш еще до того как они реально понадобятся, параллельно выполняя команды идущие ДО. То есть я к чему: нужно писать код так, чтобы до Работы с Памятью можно было сделать какую-либо полезную Память-Независимую работу, на фоне выполнения которой и будет происходить опережающая выгрузка данных из Памяти.
#memory #cache #prefetching
Есть Out Of Order Execution процессор, есть кусочек кода который подгружает данные из Памяти в Кеш Процессора и как-либо обрабатывает их после, и есть код который отрабатывает ДО места где эти данные загружаются / используются.
Из поста выше мы знаем, что обмен данными между Памятью и Процессором - долог: если на момент пользования обмениваемыми данными, в Кеше Процессора их нету - работа встанет. Процессор, конечно, не дурак и просматривая Фреймы наперед, начнет загрузку данных в Кеш еще до того как они реально понадобятся, параллельно выполняя команды идущие ДО. То есть я к чему: нужно писать код так, чтобы до Работы с Памятью можно было сделать какую-либо полезную Память-Независимую работу, на фоне выполнения которой и будет происходить опережающая выгрузка данных из Памяти.
#memory #cache #prefetching
Также, не забывай, что Кеш в который недавно были загружены нужные данные - Горячий, а кеш в котором этих данных нет - Холодный. И все тесты, бенчмарки и прочее-прочее, лучше проводить на Холодный Желудок, прочищая его от вызова к вызову.
#terminology #cache
#terminology #cache
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
Моя x64 программа написанная на C++, работает на Windows x64 медленнее чем на Nix, MacOS потому что...:
Внутри функции мне нужно использовать больше 7ми регистров общего назначения, но Microsoft Call ABI требует, чтобы все что свыше этого числа - сохранялось в стек, а затем, восстанавливалось обратно. Linux / MacOS Call ABI имеют бОльшую границу, позволяя использовать больше регистров. Выше, на картинке, пример - сравни количество строк кода.
#asm #performance
Новое, не всегда лучше старого и подтверждение тому, команды ассемблера SHLD / SHRD :
На процессорах Intel Haswell и выше - latency 3, однако на процессорах Intel Sandy Bridge и до Haswell - latency этой команды 1.
#interesting #asm
На процессорах 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
https://vc.ru/bugs/75864-your-tokens-are-my-tokens-ili-istoriya-odnoy-radio-aktivnoy-xss-na-vseh-servisah-komiteta
#noscripting #pwn
vc.ru
Your tokens are my tokens, или история одной [радио]активной XSS на всех сервисах «Комитета» — Сломалось на vc.ru
Иван Петров Сломалось 18.07.2019
Не забывай, что realloc - C / C++, при невозможности расширить текущий блок памяти, сделает копирование текущего блока памяти с раширением до нужного размера. А это, в свою очередь, может быть совсем не то, что тебе нужно. Другими словами - применимо лишь для trivially copyable типов.
Продвинутые версии STL-Like контейнеров, типа Библиотеки Facebook Folly - содержат свою реализацию класса vector, работающего со специальным аллокатором и функцией realloc, отличной по поведению от той, что предоставляет стандарт языка C:
Появляется возможность спросить у аллокатора, а может ли он расширить текущий блок памяти, и если да, то на сколько. Если нет, то, соответственно мы можем либо скопировать данные в новое место, либо переместить их. Как никак, а где-то в плане Performance, это может давать свои ощутимые плюсы.
#cxx #performance #memory #allocator
Продвинутые версии STL-Like контейнеров, типа Библиотеки Facebook Folly - содержат свою реализацию класса vector, работающего со специальным аллокатором и функцией realloc, отличной по поведению от той, что предоставляет стандарт языка C:
Появляется возможность спросить у аллокатора, а может ли он расширить текущий блок памяти, и если да, то на сколько. Если нет, то, соответственно мы можем либо скопировать данные в новое место, либо переместить их. Как никак, а где-то в плане Performance, это может давать свои ощутимые плюсы.
#cxx #performance #memory #allocator
Привет! Джем и Горячий чай уже ждут тебя:
https://habr.com/ru/post/470674/
Контент авторский, тут все по плану. Ну а утро бывает не только добрым, но и теплым, да.
#link #publication #cxx #allocator #data_structure #interesting
https://habr.com/ru/post/470674/
Контент авторский, тут все по плану. Ну а утро бывает не только добрым, но и теплым, да.
#link #publication #cxx #allocator #data_structure #interesting
Хабр
Inside The JeMalloc. Базовые Структуры Данных: Pairing Heap & Bitmap Tree
Тема Аллокаторов частенько всплывает на просторах интернета: действительно, аллокатор — эдакий краеугольный камень, сердце любого приложения. В этой серии постов я хочу в подробностях рассказать о...
Работая с MSVC компилятором / линковщиком, использовать семантику Unix ABI aka SYSTEM V, у вас не получится. Однако, работая с MinGW возможность все же есть, в частности, речь про вызовы функций с внешней компоновкой:
- и будет вам счастье!
#interesting #asm #compilers
__attribute__((sysv_abi))- и будет вам счастье!
#interesting #asm #compilers
https://www.agner.org/optimize/blog/read.php?i=1015
Очень крутой пост на тему 'Какой компилятор лучше оптимизирует код в 2К19' от Дядюшки Агнера. Для меня результат предсказуем, а для тебя?
#optimization #cxx #compilers
Очень крутой пост на тему 'Какой компилятор лучше оптимизирует код в 2К19' от Дядюшки Агнера. Для меня результат предсказуем, а для тебя?
#optimization #cxx #compilers
Небезызвестный тебе журнал Хакер - большую часть времени считался(и, вообще говоря, продолжает считаться) журналом для Домохозяек. Были ли альтернативы? Да! Хардкорные ли? С моей точки зрения - Да! Сами журналы электронные, представляют собой 'Дух и Прах' Underground площадок того времени. Xaoc, def@ced, x25 и многие другие, а почитать можно тут:
http://e-zine-lib.zero-day.ru/lib/
#e-zines #old_school
http://e-zine-lib.zero-day.ru/lib/
#e-zines #old_school
Писать на C можно и в целом, иногда, нужно. Но будем честны, язык имеет ряд неудобностей, которые, к счастью, обещают поправить... Ну или не обещают, но хотят:
https://m.habr.com/ru/company/badoo/blog/503140/
#C #C2X
https://m.habr.com/ru/company/badoo/blog/503140/
#C #C2X
Хабр
C2x: будущий стандарт C
Я ловлю в далёком отголоске, Что случится на моём веку. («Гамлет», Борис Пастернак)Признаться, пишу на чистом C я не так уж и часто и за развитием языка уже давно не слежу. Но тут произошло два...
Знаю, не все из читающих программируют на C++, тем не менее, хотел бы узнать вот что:
Выражение состоящее из Шести подряд идущих точек стало возможным к написанию в...
Выражение состоящее из Шести подряд идущих точек стало возможным к написанию в...
Anonymous Quiz
13%
Точно в C++11
5%
Точно в C++98
4%
Точно в C++03
16%
Точно в C++17
7%
Точно в C++14
15%
Точно в C++20
40%
Планируют принять в будущих стандартах
Я признателен тем, кто даёт обратную связь. За следующий вопрос, спасибо одному из читателей.
Выражение из скольки подряд идущих точек НЕ может быть представлено в C++:
Выражение из скольки подряд идущих точек НЕ может быть представлено в 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
- Оптимизационный трюк о котором вы могли не знать:
- Иногда решение всем известных задач, может удивлять. В 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
Понятно, что одна точка, это использование оператора '.' или, оператора '.*', например.
Три точки - 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