Продолжаем говорить о микрооптимизациях .NET-приложенийAndrey Akinshin
Этот доклад продолжает тему моего выступления с прошлого DotNext про сложную науку о микрооптимизациях. Вас ждут новые увлекательные истории о том, что же происходит под капотом .NET-программ. Будем обсуждать различия разных C# и JIT компиляторов (Roslyn и RyuJIT в том числе), медитировать на IL и ASM листинги, а также разбираться с особенностями современных CPU.
Программисты часто работают с числами. Чаще всего это целые числа, но иногда доводится работать и с дробными. C этими самыми числами приходится делать разные операции: сложение, умножение, приведение типов, сравнение, округление и многие другие. Увы, далеко не все до конца понимают, как же именно компьютер совершает все эти замечательные операции. В этом докладе мы с вами прорешаем серию увлекательных упражнений на знание арифметики. Поговорим про стандарт IEEE 754, про разницу в рантаймах и компиляторах, про регистры FPU и прочие сложности жизни.
Поговорим о микрооптимизациях .NET-приложенийAndrey Akinshin
Доклад для Middle и Senior .NET-программистов о микроптимизациях приложения, из которого Вы узнаете:
О том, как важно понимать IL и ASM код, соответствующий вашей C#-программе;
О различных уровнях микрооптимизаций начиная от C# и JIT компиляторов, заканчивая CPU;
Об особенностях оптимизаций под различные процессорные архитектуры;
Об отличиях разных версиях JIT-компиляторов, включая RyuJIT;
О том, как правильно замерять время выполнения приложений и оценивать эффективность оптимизаций.
Доклад будет полезен всем разработчикам, которые хотят хотят сделать свои и без того быстрые программы ещё на 5-10% быстрее.
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Platonov Sergey
За время работы над проектом был разработан удобный фреймворк для написания асинхронного кода. В докладе будет рассмотрено то, как он устроен и как со временем эволюционировал. Разберемся, как с помощью наших примитивов решать проблемы, часто встречающиеся в асинхронном программирование; будут примеры удачного и неудачного использования. Отдельно остановимся на сравнении получившихся средств с тем, что было добавлено в С++11.
Продолжаем говорить о микрооптимизациях .NET-приложенийAndrey Akinshin
Этот доклад продолжает тему моего выступления с прошлого DotNext про сложную науку о микрооптимизациях. Вас ждут новые увлекательные истории о том, что же происходит под капотом .NET-программ. Будем обсуждать различия разных C# и JIT компиляторов (Roslyn и RyuJIT в том числе), медитировать на IL и ASM листинги, а также разбираться с особенностями современных CPU.
Программисты часто работают с числами. Чаще всего это целые числа, но иногда доводится работать и с дробными. C этими самыми числами приходится делать разные операции: сложение, умножение, приведение типов, сравнение, округление и многие другие. Увы, далеко не все до конца понимают, как же именно компьютер совершает все эти замечательные операции. В этом докладе мы с вами прорешаем серию увлекательных упражнений на знание арифметики. Поговорим про стандарт IEEE 754, про разницу в рантаймах и компиляторах, про регистры FPU и прочие сложности жизни.
Поговорим о микрооптимизациях .NET-приложенийAndrey Akinshin
Доклад для Middle и Senior .NET-программистов о микроптимизациях приложения, из которого Вы узнаете:
О том, как важно понимать IL и ASM код, соответствующий вашей C#-программе;
О различных уровнях микрооптимизаций начиная от C# и JIT компиляторов, заканчивая CPU;
Об особенностях оптимизаций под различные процессорные архитектуры;
Об отличиях разных версиях JIT-компиляторов, включая RyuJIT;
О том, как правильно замерять время выполнения приложений и оценивать эффективность оптимизаций.
Доклад будет полезен всем разработчикам, которые хотят хотят сделать свои и без того быстрые программы ещё на 5-10% быстрее.
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Platonov Sergey
За время работы над проектом был разработан удобный фреймворк для написания асинхронного кода. В докладе будет рассмотрено то, как он устроен и как со временем эволюционировал. Разберемся, как с помощью наших примитивов решать проблемы, часто встречающиеся в асинхронном программирование; будут примеры удачного и неудачного использования. Отдельно остановимся на сравнении получившихся средств с тем, что было добавлено в С++11.
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=v7uBLSm6ft8
06 октября 2015. Как приручить дракона: введение в LLVM (Дмитрий Кашицын, HDsoft)
«В этом докладе мы кратко расскажем о таком звере, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
EVHEN. Асимметричный SPN-шифр на базе white-box-криптографии и хаотических от...Dmitry Schelkunov
Презентация моего доклада на конференции РусКрипто-2017. Описываются основные подходы, использованные при создании EVHEN. EVHEN - асимметричный шифр со скоростью симметричного, низкими требованиями к вычислительным ресурсам, а также возможностью и шифрования, и подписи.
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
В докладе будет рассмотрена генерация кода при компиляции различных языковых конструкций, как простых, так и сложных, на различных платформах, как общераспространённых x86/x64, так и тех, которым уделяется меньше внимания: ARM, AVR. Также будут встречаться примеры для совсем экзотических процессоров вроде PowerPC и даже MicroBlaze. Основной упор будет делаться не на обработку данных, а именно на сопоставление различных конструкций кода с инструкциями целевых платформ.
Причины потерь процессорного времени при организации последовательности вычислений внутри потока: 1. Ожидание ответа на запрос (поток спит). 2. Выполнение дополнительных "лишних" действий. Как способ устранения этих потерь - паттерн Пул потоков. Анализ императивного и функционального подхода к борьбе с "жадными" операциями. Эволюция методов организации параллельных вычислений на основе пула потоков.
Компилируемые в реальном времени DSL для С++corehard_by
В последнее время в промышленной разработке особую популярность обретают предметно-ориентированные языки программирования (Domain-Specific Lanugages, DSL). Они драматически упрощают разработку и дают возможность “программировать” не только инжеренерам, но и пользователям прикладных программ. В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Computing the code distance of linear binary and ternary block codes using p...Usatyuk Vasiliy
We introduce a probabilistic algorithm for minimum distance of linear codes. Algorithm use Kannan embeding techniques to construct lattice from binary and ternary block code. Using permutation of code basis and QR-transformation we optimize Exp and Var for area of search under probabalistical shortest vector problem
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
Предлагаемый подход позволяет без труда получить параллельную асинхронную обработку данных без явного использования средств синхронизации, по максимуму задействуя доступные вычислительные ресурсы. Использование сопрограмм значительно упрощает написание многопоточного кода. Это дает возможность сконцентрироваться непосредственно на задаче обработки данных, не занимаясь вопросами синхронизации различных операций, включая асинхронную работу с сетью.
Alex talks about serialization for large RPG project. Why is the standard Unity serialization not suitable? What to use instead and how many iteration do you need to make really badass serialization framework?
#MadeWithUnity
Rambler.iOS #9: Анализируй это! (Сергей Крапивенский).
Доклад посвящён наиболее популярным статическим анализаторам кода для iOS: как ими пользоваться, какие проблемы они решают, как внедрить их в привычный цикл разработки, как писать для них свои правила. Также рассмотрен опыт интеграции статического анализа и CI.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=v7uBLSm6ft8
06 октября 2015. Как приручить дракона: введение в LLVM (Дмитрий Кашицын, HDsoft)
«В этом докладе мы кратко расскажем о таком звере, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
EVHEN. Асимметричный SPN-шифр на базе white-box-криптографии и хаотических от...Dmitry Schelkunov
Презентация моего доклада на конференции РусКрипто-2017. Описываются основные подходы, использованные при создании EVHEN. EVHEN - асимметричный шифр со скоростью симметричного, низкими требованиями к вычислительным ресурсам, а также возможностью и шифрования, и подписи.
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
В докладе будет рассмотрена генерация кода при компиляции различных языковых конструкций, как простых, так и сложных, на различных платформах, как общераспространённых x86/x64, так и тех, которым уделяется меньше внимания: ARM, AVR. Также будут встречаться примеры для совсем экзотических процессоров вроде PowerPC и даже MicroBlaze. Основной упор будет делаться не на обработку данных, а именно на сопоставление различных конструкций кода с инструкциями целевых платформ.
Причины потерь процессорного времени при организации последовательности вычислений внутри потока: 1. Ожидание ответа на запрос (поток спит). 2. Выполнение дополнительных "лишних" действий. Как способ устранения этих потерь - паттерн Пул потоков. Анализ императивного и функционального подхода к борьбе с "жадными" операциями. Эволюция методов организации параллельных вычислений на основе пула потоков.
Компилируемые в реальном времени DSL для С++corehard_by
В последнее время в промышленной разработке особую популярность обретают предметно-ориентированные языки программирования (Domain-Specific Lanugages, DSL). Они драматически упрощают разработку и дают возможность “программировать” не только инжеренерам, но и пользователям прикладных программ. В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Computing the code distance of linear binary and ternary block codes using p...Usatyuk Vasiliy
We introduce a probabilistic algorithm for minimum distance of linear codes. Algorithm use Kannan embeding techniques to construct lattice from binary and ternary block code. Using permutation of code basis and QR-transformation we optimize Exp and Var for area of search under probabalistical shortest vector problem
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
Предлагаемый подход позволяет без труда получить параллельную асинхронную обработку данных без явного использования средств синхронизации, по максимуму задействуя доступные вычислительные ресурсы. Использование сопрограмм значительно упрощает написание многопоточного кода. Это дает возможность сконцентрироваться непосредственно на задаче обработки данных, не занимаясь вопросами синхронизации различных операций, включая асинхронную работу с сетью.
Alex talks about serialization for large RPG project. Why is the standard Unity serialization not suitable? What to use instead and how many iteration do you need to make really badass serialization framework?
#MadeWithUnity
Rambler.iOS #9: Анализируй это! (Сергей Крапивенский).
Доклад посвящён наиболее популярным статическим анализаторам кода для iOS: как ими пользоваться, какие проблемы они решают, как внедрить их в привычный цикл разработки, как писать для них свои правила. Также рассмотрен опыт интеграции статического анализа и CI.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
Поговорим о самом мощном отладчике для Windows – WinDbg. Разберем как начать использовать этот отладчик, чем он может быть полезен для .NET разработчиков. Подробней остановимся на практических моментах его применения, зачем он прикладным программистам, web-разработчикам. Посмотрим и на другие инструменты отладки, которые занимают нишу между интуитивно управляемым комбайном Visual Studio и легким, но крайне аскетичным WinDbg.
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиFProg
В данном докладе рассматривается пример использования персистентной структуры данных - функциональной версии HAMT, для создания main memory базы данных. Данная реализация HAMT располагается в shared memory и используется для хранения индексов.
Рассматриваются задачи, которые были быстро и эффективно решены благодаря использованию неизменяемых структур данных (управление изменениями, поддержка ACID-свойств), а также проблемы, возникшие из-за этого. Также, рассмотрен метод реализации персистентного графа, использующий изменяемые данные и позволяющий достичь большей производительности, по сравнению с аналогичной, неизменяемой структурой данных.
Multithreading in java past and actualYevgen Levik
In this talk I’d like to give you an overview of java.util.concurrent package and represent useful Java concurrency tools. I’ll cover the core functionality and the state-of-the-art API (Executors, Accumulators, StampedLock etc).
Simple examples in github (https://github.com/levik666/OverviewInJavaUtilConcurrent)
SAST и Application Security: как бороться с уязвимостями в кодеAndrey Karpov
Проблематика: Объёмы кода растут; Плотность ошибок растёт нелинейно; Все хотят качественный и БЕЗОПАСНЫЙ код; Старых методов контроля качества уже недостаточно.
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
Оперативная память становится всё более дешёвой и производительной, что позволяет использовать её для хранения рабочего набора данных всё большего числа приложений. Хранение всех данных в оперативной памяти позволяет сделать их высоко доступными, а алгоритмы для работы с данными либо существенно упростить, либо ускорить, а иногда — и то, и другое.
Тезисы - http://www.highload.ru/2015/abstracts/1964.html
10 июня 2015. Дмитрий Кашицын (HDsoft) дает обзор LLVM.
http://techtalks.nsu.ru
Видеозапись: https://plus.google.com/events/ctes98f7uhf19t5jlvlbk24dan4
В этом докладе мы кратко расскажем о таком звере, как LLVM, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Formal verification of operating system kernelsDenis Efremov
The speaker will share his experience of participating in projects on formal verification and analysis of access control modules for Astra Linux SE and Elbrus kernels, as well as verification of the Contiki code (OS for IoT) within the European VESSEDIA program. The speaker will disclose details about the development of formal access control models (Rodin/Event-B) and code specifications (Frama-C/ACSL), the use of static and dynamic analyzers, and the inclusion of formal analysis in the continuous integration cycle (continuous verification). Other types of work that help meet the certification requirements will also be considered.
https://standoff365.com/phdays10/schedule/development/formal-verification-of-operating-system-kernels
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Правильная организация клиент-карточного взаимодействия — Антон КорзуновYandex
Как говорил один человек, нет данных — нет проблемы. Но проблема в том, что в современном мире данные есть, и их много . Ещё в современном мире очень любят данные отображать, например, на карте — только это не всегда хорошо получается.
Из доклада вы узнаете о типичных ошибках передачи данных на карту и простых способах этих ошибок избежать.
The document discusses combining branching time logic with logics of knowledge for reasoning about multi-agent systems. It proposes an update and abstraction algorithm for model checking Computational Tree Logic with Knowledge (Act-CTL-K) in perfect recall synchronous settings. The key points are:
1) The algorithm transforms Act-CTL-K formulas of bounded knowledge depth k into Act-CTL, using k-trees and knowledge update functions to represent the original environment.
2) A k-tree is a finite tree of height k that represents the knowledge of agents. Knowledge update functions are defined to transform k-trees after actions.
3) The resulting model checking algorithm solves Act-CTL on the transformed k-trees,
2. О докладчике 1993-99 мат-мех СПбГУ 1999-2003 Ph.D., Стэнфорд, США Анализ RC4 как тасование колоды карт 2003- Microsoft Research, Silicon Valley криптография privacy 2
9. 9 Что такое хэш-функция? H: {0,1}*->{0,1}n сообщение хэш H x M
10. 10 Что такое хэш-функция? Hk: {0,1}*->{0,1}n k — ключ или индекс сообщение хэш H x M
11. Что такое криптографическая хэш-функция? Устойчивость к нахождению: прообраза коллизии второго прообраза M ? ? ? ? = x ? x ? x 11
12. Применение: Таблицы паролей 12 Алиса Боб пароль H(пароль) ?=H(пароль1) пароль ?= пароль1 принять или отказать 12
13. Требование к безопасности? 13 Дано:x=H(пароль)Найти: любую строку M, удовлетворяющуюH(M) = x H — устойчива к нахождению прообраза (односторонняя функция)
17. Требования к безопасности? 17 Дано:C— подпись M, то естьC = H(M)d mod NНайти: строку M′, удовлетворяющуюH(M) = H(M′) H — устойчива к нахождению второго прообраза
36. 36 Аутентификация k M1 M2 M3 H0 H1 H2 H3 IV MAC: Hk(M) = H(k || M) Hk(M || M3) = C(Hk(M), M3)
37. HMAC MAC: Hk1,k2(M) = H(k2 || H(k1|| M)) Доказательство основывается на устойчивости к коллизиям 37
38. 38 Каскадные хэш-функции F(M) = G1(M)|| G2(M) – каскадная функция «ЕслиG1 иG2независимы, то для поиска коллизии дляFнеобходимо найти коллизии для обеих функций одновременно.Это требует произведения усилий, необходимых для атак на G1 иG2по отдельности.» Handbook of Applied Cryptography
39. 39 Атака Жу (Joux) M0, N0 M1, N1 M2, N2 M3, N3 H0 H1 H2 H3 IV k 2n/2 усилия для нахождения 2k коллизий
40. 40 Атака Жу Проделав k·2n/2вычислений, находим 2kколлизий для G1 Положив k = n/2, мы найдем среди них коллизиюM, Nдля G2 G1(M) = G1(N) и G2(M) = G2(N)
54. План Определение, применения Конструкция: Davies-Meyer Merkle-Damgård Общие атаки демонстрация Конкретные хэш-функции Соревнование SHA-3 Заключение 54
55. Соревнование SHA-3 В 2005 году принято решение о выработке нового стандарта в рамках соревнования Модель – стандарт AES Формальное объявление – 2 ноября 2007 Начало соревнования: конец 2008 года Первый раунд: 15 кандидатов Второй раунд: 5 кандидатов Выбор финалиста – 2012 год 55
73. План Определение, применения Конструкция: Davies-Meyer Merkle-Damgård Общие атаки демонстрация Конкретные хэш-функции Соревнование SHA-3 Заключение 73
74. Что дальше? Не использовать MD4, MD5, SHA-1 Готовиться к новому стандарту Режимы использования хэш-функций: рандомизация переход с HMAC на другие виды MAC’ов 74
75. Анонс: Лекции завтра Лекция 1: Поиск коллизий без использования памяти параллельный для инкрементальных хэш-функций Размен память/время Лекция 2: Модель случайного оракула Неразличимость конструкций 75
76. 76 Аутентификация UMAC John Black, ShaiHalevi, Hugo Krawczyk, Ted Krovetz, and Phillip Rogaway, 1999 на длинных сообщения ~1.5 такта/байт