😱🤓 Неожиданное взаимодействие предсказания ветвлений и подсистем памяти
Статья посвящена оптимизации подсистем памяти.
В ней про взаимодействие механизма предсказания ветвлений с подсистемой памяти.
Схема предсказания переходов (ветвлений) является частью многих современных процессоров и используется для ускорения вычислений, когда у процессора недостаточно данных для продолжения работы. По сути, согласно ей процессор пытается спрогнозировать результат выполнения условной ветки кода до его фактического вычисления. Это событие называется спекуляцией в отношении результата ветвления, и последующие инструкции выполняются спекулятивно, то есть в случае ошибочного прогноза их результаты будут отменены.
Далее вас ждут примеры и подробный разбор
#гайд
Статья посвящена оптимизации подсистем памяти.
В ней про взаимодействие механизма предсказания ветвлений с подсистемой памяти.
Схема предсказания переходов (ветвлений) является частью многих современных процессоров и используется для ускорения вычислений, когда у процессора недостаточно данных для продолжения работы. По сути, согласно ей процессор пытается спрогнозировать результат выполнения условной ветки кода до его фактического вычисления. Это событие называется спекуляцией в отношении результата ветвления, и последующие инструкции выполняются спекулятивно, то есть в случае ошибочного прогноза их результаты будут отменены.
Далее вас ждут примеры и подробный разбор
#гайд
std::byte
std::byte — это тип данных, введенный в стандарт C++17. Он представляет собой один байт, то есть 8 бит. std::byte не является ни типом символа, ни типом числа. Он предназначен для представления байтов в памяти, независимо от того, используются они для хранения символов, чисел или чего-либо еще.
std::byte может использоваться в следующих случаях:
🔹 Для доступа к памяти, занимаемой другими объектами.
🔹 Для работы с низкоуровневыми функциями, такими как чтение и запись в порты ввода-вывода.
🔹 Для реализации собственных типов данных, которые должны хранить байты.
std::byte — это тип данных, введенный в стандарт C++17. Он представляет собой один байт, то есть 8 бит. std::byte не является ни типом символа, ни типом числа. Он предназначен для представления байтов в памяти, независимо от того, используются они для хранения символов, чисел или чего-либо еще.
std::byte может использоваться в следующих случаях:
🔹 Для доступа к памяти, занимаемой другими объектами.
🔹 Для работы с низкоуровневыми функциями, такими как чтение и запись в порты ввода-вывода.
🔹 Для реализации собственных типов данных, которые должны хранить байты.
Ответ: 2^32 - 25, то есть 4294967271.
Объяснение: вычитание имеет бОльший приоритет и выполнится раньше, чем вывод на экран.
25u означает unsigned int, вместимость этого типа от 0 до 2^32-1.
50 приводится к типу левого аргумента, и становится тоже unsigned int. При вычитании не может получиться отрицательное число, а так как беззнаковые типы "свёрнуты в кольцо", то -25 в unsigned int будет равно 2^32 - 25.
Объяснение: вычитание имеет бОльший приоритет и выполнится раньше, чем вывод на экран.
25u означает unsigned int, вместимость этого типа от 0 до 2^32-1.
50 приводится к типу левого аргумента, и становится тоже unsigned int. При вычитании не может получиться отрицательное число, а так как беззнаковые типы "свёрнуты в кольцо", то -25 в unsigned int будет равно 2^32 - 25.
Forwarded from Библиотека задач по C++ | тесты, код, задания
Алгоритм gcd
Используется для нахождения НОД двух чисел. Он принимает два значения одного типа данных в качестве аргументов и возвращает их НОД.
Используется для нахождения НОД двух чисел. Он принимает два значения одного типа данных в качестве аргументов и возвращает их НОД.
🤔 Очередной #дайджест по С++
◽ Рассказы о SObjectizer — продолжение серии и работа с командами
◽ Создание deb-пакета для самых маленьких — из простого проекта с разделяемыми библиотеками
◽ Syrmia представила Autocheck — проект на базе LLVM/Clang для проверки кода C/C++ на соответствие стандарту AUTOSAR
◽ Объединение интервалов в C++ нового поколения — объедините все перекрывающиеся интервалы и верните массив неперекрывающихся интервалов, которые охватывают все интервалы во входных данных
◽ Что нам недодали в C++ — крик души и требования о выкупе
◽ Рассказы о SObjectizer — продолжение серии и работа с командами
◽ Создание deb-пакета для самых маленьких — из простого проекта с разделяемыми библиотеками
◽ Syrmia представила Autocheck — проект на базе LLVM/Clang для проверки кода C/C++ на соответствие стандарту AUTOSAR
◽ Объединение интервалов в C++ нового поколения — объедините все перекрывающиеся интервалы и верните массив неперекрывающихся интервалов, которые охватывают все интервалы во входных данных
◽ Что нам недодали в C++ — крик души и требования о выкупе
Forwarded from Библиотека задач по C++ | тесты, код, задания
Что делает std::string::at()?
std::string::at() — это функция, предоставляемая классом std::string для доступа к отдельным символам в строке. Она принимает индекс в качестве аргумента и возвращает символ в указанной позиции.
Функция at() выполняет проверку границы (boundary check), что означает, что она проверяет, находится ли переданный индекс в пределах допустимых значений для строки. Если индекс находится вне диапазона, генерируется исключение std::out_of_range. Это отличается от оператора [], который не выполняет такую проверку.
std::string::at() — это функция, предоставляемая классом std::string для доступа к отдельным символам в строке. Она принимает индекс в качестве аргумента и возвращает символ в указанной позиции.
Функция at() выполняет проверку границы (boundary check), что означает, что она проверяет, находится ли переданный индекс в пределах допустимых значений для строки. Если индекс находится вне диапазона, генерируется исключение std::out_of_range. Это отличается от оператора [], который не выполняет такую проверку.
🎥 Что спросить у работодателя на IT интервью
Чек-лист вопросов, чтобы не забыть спросить о чем-то своего будущего работодателя.
00:22 — Какие цели у команды / проекта / компании
00:39 — Что сделали интересного за несколько лет
01:05 — Какие у меня будут цели и задачи
01:30 — Какой размер и состав команды
01:57 — Какие языки и технологии используются
02:08 — Как устроены процессы в команде
02:33 — Что с кодом
02:53 — Какие у меня будут перспективы роста
03:04 — Какие сейчас есть проблемы
03:28 — Почему ищите человека на эту вакансию
Чек-лист вопросов, чтобы не забыть спросить о чем-то своего будущего работодателя.
00:22 — Какие цели у команды / проекта / компании
00:39 — Что сделали интересного за несколько лет
01:05 — Какие у меня будут цели и задачи
01:30 — Какой размер и состав команды
01:57 — Какие языки и технологии используются
02:08 — Как устроены процессы в команде
02:33 — Что с кодом
02:53 — Какие у меня будут перспективы роста
03:04 — Какие сейчас есть проблемы
03:28 — Почему ищите человека на эту вакансию
Forwarded from Библиотека задач по C++ | тесты, код, задания
Какая разница между структурой и классом?
Главное отличие заключается в том, что структуры по умолчанию имеют public доступ к своим полям, в то время как классы по умолчанию имеют private доступ.
— Структуры обычно используются для простых объектных типов данных, в то время как классы — для более сложных объектов.
— Структуры копируются по значению, а классы — по ссылке. Это означает, что при копировании структуры создается новый объект, а при копировании класса копируется указатель на объект.
— Структуры не поддерживают наследование, в отличие от классов.
В целом, структуры чаще используются для простых данных, а классы — для представления более сложных сущностей и их взаимодействия.
Выбор между ними зависит от конкретной задачи и требований к программе.
Главное отличие заключается в том, что структуры по умолчанию имеют public доступ к своим полям, в то время как классы по умолчанию имеют private доступ.
— Структуры обычно используются для простых объектных типов данных, в то время как классы — для более сложных объектов.
— Структуры копируются по значению, а классы — по ссылке. Это означает, что при копировании структуры создается новый объект, а при копировании класса копируется указатель на объект.
— Структуры не поддерживают наследование, в отличие от классов.
В целом, структуры чаще используются для простых данных, а классы — для представления более сложных сущностей и их взаимодействия.
Выбор между ними зависит от конкретной задачи и требований к программе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по C++ | тесты, код, задания
std::find_if
std::find_if — это стандартный алгоритм, предоставляемый библиотекой . Этот алгоритм предназначен для поиска первого элемента в заданном диапазоне, который удовлетворяет заданному условию, определенному предикатом.
Вот общий формат std::find_if:
#include
template
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p);
first и last представляют диапазон элементов для поиска. first указывает на начало диапазона, а last указывает за его пределы.
p — это унарный предикат, то есть функция, принимающая один аргумент и возвращающая true, если элемент удовлетворяет условию, и false в противном случае.
std::find_if — это стандартный алгоритм, предоставляемый библиотекой . Этот алгоритм предназначен для поиска первого элемента в заданном диапазоне, который удовлетворяет заданному условию, определенному предикатом.
Вот общий формат std::find_if:
#include
template
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p);
first и last представляют диапазон элементов для поиска. first указывает на начало диапазона, а last указывает за его пределы.
p — это унарный предикат, то есть функция, принимающая один аргумент и возвращающая true, если элемент удовлетворяет условию, и false в противном случае.
🤔 Очередной #дайджест по С++
⏬ Итоги развития экосистемы C++ в 2023 году — рост C++20, широкое внедрение инструментов на базе Clang, ИИ завоевывает доверие разработчиков и многое другое
⏬ Анализ приложений на C++ для оптимизации производительности — введение в оптимизацию производительности приложений на C++ с помощью таких инструментов, как Intel VTune Profiler и Intel Advisor
⏬ Как я поднял свой сервер без возможности выставить для него статический IP адрес — как обойти провайдерский dhcp с помощью бота и прочие развлечения
⏬ Dependency Injection контейнеры .NET, допускающие полиморфное поведение — когда при разработке приложения на платформе .NET с внедрением зависимостей и сервисами от контейнера требуется поддержка полиморфного поведения
⏬ Расширяемая архитектура RISC-V и Syntacore SW Tools — знакомство с открытой расширяемой архитектурой RISC-V на примере ядер Syntacore и с особенностями оптимизации и разработки программ под RISC-V
⏬ Итоги развития экосистемы C++ в 2023 году — рост C++20, широкое внедрение инструментов на базе Clang, ИИ завоевывает доверие разработчиков и многое другое
⏬ Анализ приложений на C++ для оптимизации производительности — введение в оптимизацию производительности приложений на C++ с помощью таких инструментов, как Intel VTune Profiler и Intel Advisor
⏬ Как я поднял свой сервер без возможности выставить для него статический IP адрес — как обойти провайдерский dhcp с помощью бота и прочие развлечения
⏬ Dependency Injection контейнеры .NET, допускающие полиморфное поведение — когда при разработке приложения на платформе .NET с внедрением зависимостей и сервисами от контейнера требуется поддержка полиморфного поведения
⏬ Расширяемая архитектура RISC-V и Syntacore SW Tools — знакомство с открытой расширяемой архитектурой RISC-V на примере ядер Syntacore и с особенностями оптимизации и разработки программ под RISC-V
Какой оператор используется для определения члена класса вне определения класса?
Anonymous Quiz
14%
->
3%
>>
11%
.
73%
::
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
Что такое SIMD?
SIMD (Single Instruction, Multiple Data) инструкции представляют собой набор команд и возможностей, предоставляемых аппаратным средством процессора, которые позволяют выполнять одну операцию над несколькими элементами данных одновременно.
Это используется для параллельной обработки данных и повышения производительности в различных приложениях, включая обработку изображений, звука, видео, математические вычисления и многие другие.
SIMD (Single Instruction, Multiple Data) инструкции представляют собой набор команд и возможностей, предоставляемых аппаратным средством процессора, которые позволяют выполнять одну операцию над несколькими элементами данных одновременно.
Это используется для параллельной обработки данных и повышения производительности в различных приложениях, включая обработку изображений, звука, видео, математические вычисления и многие другие.
Задача: Возвращение остатка от деления двух чисел
В качестве параметров передаются два числа. При делении первого параметра на второй будет получен остаток, возможно, нулевой. Верните это значение.
Примеры:
В качестве параметров передаются два числа. При делении первого параметра на второй будет получен остаток, возможно, нулевой. Верните это значение.
Примеры:
Remainder(3, 4) ➞ 3Пишите ваши варианты в комментариях, а ответ будет ниже через 30 минут.
Remainder(-9, 45) ➞ -9
Remainder(5, 5) ➞ 0
public class Program
{
public static int Remainder(int x, int y) => x%y;
}
🤖 Итоги недели в мире ИИ и обзоры новых сервисов
Мы написали статью на VC, которая основана на очередном выпуске нашей рассылки про последние новости и тенденции в мире ИИ. Залетайте и читайте!
👇 Ниже — мини-подборка из статьи 👇
📰 Новости
▫️ OpenAI объявила о запуске долгожданного магазина кастомных чат-ботов.
▫️ В Пасадене (штат Калифорния) открывается первая закусочная CaliExpress by Flippy, полностью управляемая ИИ.
▫️ NVIDIA выпустила модель для распознавания речи Parakeet, которая по всем показателям превосходит OpenAI Whisper.
▫️ Использование ИИ в совместном научном проекте Microsoft и Тихоокеанской северо-западной национальной лаборатории в течение недели помогло определить новый элемент, который поможет снизить на 70% использование лития в батареях. Без ИИ такое исследование заняло бы по меньшей мере 20 лет.
▫️ Компания ByteDance выпустила новую модель MagicVideo-V2 для генерации видео.
🛠 Инструменты
◾️ Auto Wiki — генерирует вики-документацию для GitHub репозиториев.
◾️ Code to Flow — визуализирует, анализирует и объясняет код, написанный на всех популярных языках и фреймворках.
◾️ Concepto — платформа для создания прототипов веб-приложений.
◾️ Afforai — выполняет суммаризацию, перевод и поиск по множеству документов.
◾️ Corgea — исправляет уязвимые фрагменты кода.
◾️ Jan — опенсорсный оффлайновый чат-бот.
◾️ Plus AI — плагин для Google Slides: делает профессиональные презентации, персональные и командные дашборды, любые отчеты.
🤙 Сделай сам
🔸 WikiChat — опенсорсный инструмент для коррекции галлюцинаций с помощью информации из Википедии.
🔸 Подробная шпаргалка и советы по созданию продвинутых RAG.
🔸 OpenVoice — опенсорный инструмент для мгновенного клонирования голоса.
🎓 Туториалы
🔹 Туториал по работе с новым API Query Pipelines показывает примеры создания простых линейных цепочек и сложных ациклических графов из модулей LlamaIndex.
🔹 Туториал по объединению LLM с помощью mergekit детально разбирает 4 основных метода объединения моделей.
#чтопроисходит
Мы написали статью на VC, которая основана на очередном выпуске нашей рассылки про последние новости и тенденции в мире ИИ. Залетайте и читайте!
📰 Новости
▫️ OpenAI объявила о запуске долгожданного магазина кастомных чат-ботов.
▫️ В Пасадене (штат Калифорния) открывается первая закусочная CaliExpress by Flippy, полностью управляемая ИИ.
▫️ NVIDIA выпустила модель для распознавания речи Parakeet, которая по всем показателям превосходит OpenAI Whisper.
▫️ Использование ИИ в совместном научном проекте Microsoft и Тихоокеанской северо-западной национальной лаборатории в течение недели помогло определить новый элемент, который поможет снизить на 70% использование лития в батареях. Без ИИ такое исследование заняло бы по меньшей мере 20 лет.
▫️ Компания ByteDance выпустила новую модель MagicVideo-V2 для генерации видео.
🛠 Инструменты
◾️ Auto Wiki — генерирует вики-документацию для GitHub репозиториев.
◾️ Code to Flow — визуализирует, анализирует и объясняет код, написанный на всех популярных языках и фреймворках.
◾️ Concepto — платформа для создания прототипов веб-приложений.
◾️ Afforai — выполняет суммаризацию, перевод и поиск по множеству документов.
◾️ Corgea — исправляет уязвимые фрагменты кода.
◾️ Jan — опенсорсный оффлайновый чат-бот.
◾️ Plus AI — плагин для Google Slides: делает профессиональные презентации, персональные и командные дашборды, любые отчеты.
🤙 Сделай сам
🔸 WikiChat — опенсорсный инструмент для коррекции галлюцинаций с помощью информации из Википедии.
🔸 Подробная шпаргалка и советы по созданию продвинутых RAG.
🔸 OpenVoice — опенсорный инструмент для мгновенного клонирования голоса.
🎓 Туториалы
🔹 Туториал по работе с новым API Query Pipelines показывает примеры создания простых линейных цепочек и сложных ациклических графов из модулей LlamaIndex.
🔹 Туториал по объединению LLM с помощью mergekit детально разбирает 4 основных метода объединения моделей.
#чтопроисходит
Please open Telegram to view this post
VIEW IN TELEGRAM