Войти через соцсеть:
Войти через email:
1. Введение
1.1. Обзор архитектуры RISC-V
1.2. Обзор инфраструктуры LLVM
2. llvm-exegesis как инструмент бенчмаркинга
2.1. Работа в режиме JIT
2.2. Запуски для baremetal
3. Интересные решения в llvm-exegesis бэкенде для RISC-V
1. Немного о нас
2. Краткое введение в GPGPU
3. Немного про ассемблер на видеокартах
a. AMD
b. Nvidia (PTX, SASS)
c. ассемблерный псевдокод
4. Ветвление: if, if-else – CPU vs GPU
a. CPU (godbolt)
b. AMD: Регистр для ветвления (exec)
c. Nvidia: ветвящаяся операция
5. Алгоритм распознавания ветвления
6. Циклы
a. Простой цикл
i. CPU
ii. AMD
iii. Nvidia
b. Распознавание цикла
c. Развёрнутый (unrolled) цикл
d. Алгоритм распознавания развёрнутого цикла (для GPU)
7. Заключение
1. C++ не является надмножеством языка C
2. Почему "мифический" С/С++?
3. Параллельное развитие языков.
4. Ограничение стандартов в докладе С++20(ISO/IEC 14882:2020) и С17(ISO/IEC 9899:2018).
5. Не каждая программа на С - это валидная программа на С++
6. Не каждая программа на С++ - это валидная программа на С
7. Код, валидный в обоих языках, но имеющий разное значение
8. Молчание компиляторов
9. Практики по написанию кода, в котором миксуются С и С++
C++ славится тем что в нем все время стреляют себе в ноги. И как правило это связано с работой с памятью. Но, есть методы которые помогают справиться с этим. Давайте разберем один из методов разбора и сбора пакетов, который был успешно применен как в бекэнде в пользовательском пространстве, так и в ядре macOS для разбора USB пакетов. Метод позволяет работать с пакетами весьма эффективно, при этом обеспечивает полный контроль памяти, и не позволяет случаться таким ошибкам как “выход за границы буфера”.
Этот метод хорошо себя показал в высоконагруженном сервисе передачи видео в реальном времени. А так же драйвере для macOS, где использовался для работы с устройсвами по протоколу поверх USB.
- рассмотрим сам метод.
- как он позволяет структурировать код и доступ к данным.
- какие особенности будут у него в пространстве ядра
- рассмотрим проблематику работы с упакованными структурами
- какой код генерирует компилятор
- рассмотрим особенности связанные с кроссплатформенностью (неприятные сюрпризы от компилятора)
С++ является языком с богатой историей и мощным функционалом. На нём пишут программы для микроконтроллеров, создают игры, Базы Данных, Highload сервисы и многое другое.
Есть мнение, что старичку пора на пенсию. Ведь в последнее время появилось много специализированных языков, которые заменят С++. А языку 40 лет в обед.
Вместе с тем немногие знают, что недавно язык пережил второе рождение, которое придало ему мощный импульс и позволило закрепиться на пьедестале самых востребованных языков современности.
Рассмотрим историю языка - рассвет в 90ых, забвение на рубеже веков и ренессанс начиная с принятием эпохального стандарта С++11 в 2011 году.
Tarantool — это платформа для in-memory-вычислений, написанная на C/C++ и Lua. Миры Lua и С/C++ очень тесно связаны: у Tarantool есть модули на Lua, модули на Lua могут использовать модули, написанные на C/C++. В процессе исполнения и в Lua-коде, и в C/C+±коде могут возникать исключения, которые иногда необходимо обрабатывать в другом компоненте, может быть написанном на другом языке.
Доклад рассказывает о том, как можно реализовать интероперабельность исключений между двумя языками на примере Lua и C. Разберемся в том, какие есть способы реализации механизма исключений на разных платформах, посмотрим на специфичные для них сложности, а также рассмотрим реализацию интероперабельности на примере LuaJIT, с помощью которого исполняется весь Lua-код в Tarantool.