Вот уже в который раз хочется поднять тему многопоточного программирования. Сейчас я попытаюсь донести мысль, что если посмотреть на эту тему под другим - более простым, как мне кажется, углом, то она не будет казаться такой сложной и неприступной для начинающих. В этой статье будет минимум формализма и известных (и не очень) терминов.
Пользователь
Какой предел у предсказателя ветвлений? Проверили на x86 и M1
Некоторое время назад я смотрел на высоконагруженную часть кода и обратил внимание на это:
if (debug) {
log("...");
}
И тут я задумался. Это — часть цикла, от которого требуется высокая производительность, но этот фрагмент выглядит как пустая трата времени, ведь мы никогда не устанавливаем флаг отладки. Нормально ли иметь в коде условные операторы, которые никогда не выполняются? Уверен, это влияет на производительность программы…
4K страницы: навсегда, на веки вечные
По ощущениям, 4К страницы памяти были с нам всегда, они воспринимаются как нечто совершенно естественное, аксиоматическое. В технике, где за любым числом стоит компромисс, это означает, что либо удалось нащупать объективный баланс, либо что число это находится в самом фундаменте и трогать его себе дороже, даже если изменения назрели.
Но, "для нас нет ничего святого"(С), попробуем выяснить почему именно 4К, изменится ли что-то если сделать 8К, 64К... Зачем вообще фиксировать конкретный размер, почему не сделать страницы произвольной (в пределах разумного) длины.
Да ты гонишь! Почему на одних конфигурациях оперативка разгоняется выше, чем на других
Разгон памяти, дело добровольное. Как понять, от чего зависит разгон памяти, какие есть тонкости в подборе комплектующих и как «прогнать» память, чтобы было за нее не стыдно!
Изучение, анализ и подбор – три составляющих успеха в разгоне памяти. Чтобы начать разгонять память без погружения в пучины технических знаний, необязательно быть специалистом. Половина успеха зависит от платформы, вторая часть – это правильный выбор ранговости, количество модулей и частот памяти Kingston и HyperX.
Исключительно быстрая валидация UTF-8
Символы должны быть каким-то образом закодированы в биты. Большинство строк в интернете, включая этот пост на Хабре, закодированы в UTF-8. Формат UTF-8 представляет «символы» в одном, двух, трёх или четырёх байтах. Это обобщение для стандарта ASCII, использующего только один байт на символ. То есть строка ASCII также является строкой UTF-8.
На самом деле всё немного сложнее, потому что технически UTF-8 описывает кодовые точки. Видимый символ типа эмодзи может состоять из нескольких кодовых точек… но большинству программистов эти педантичные формулировки не нужны.
Оптимизация C++: совмещаем скорость и высокий уровень. Доклад Яндекса
— Всем привет. Я занимаюсь оптимизацией для CPU библиотеки машинного обучения CatBoost. Основная часть нашей библиотеки написана на C++. Сегодня расскажу, какими простыми способами мы добиваемся скорости.
[Подборка] Полезные статьи о релокации в США: выбор визы, поиск работы, зарплаты и налоги
Одна из самых популярных тем в нашем блоге – релокация. А самым популярным направлением для переезда русскоговорящих инженеров остаются США. Это легко объяснимо – в этой стране наиболее развита IT-отрасль, FAANG, тысячи стартапов, передовые технологии и вот это все.
В этом материале мы собрали полезные ссылки, которые помогут вам решить массу практических вопросов от выбора типа визы и штата для переезда, до поиска работы и оплаты налогов. Поехали!
Разбираемся в моделях кода архитектуры x64
Информация по этой теме в сети, или где бы то ни было еще, встречается редко. Самым важным из доступных ресурсов является официальный х64 ABI, скачать его можно по ссылке (далее по тексту он будет упоминаться как «ABI»). Часть информации также можно найти на
man
-страницах gcc
. Задача данной статьи — предоставить доступные рекомендации по теме, обсудить связанные с ней вопросы, а так же хорошими примерами через используемый в работе код продемонстрировать некоторые концепты.Важное замечание: эта статья не является обучающим материалом для начинающих. Перед ознакомлением рекомендуется уверенное владение C и ассемблером, а так же базовое знакомство с архитектурой х64.
Запятая в английском языке: 5 правил и топ-3 ошибки
Как? Ответ прост: пунктуация.
Студенты, которые учат английский как иностранный часто пропускают тему, как правильно ставить запятые. Она ведь интуитивно понятная, что тут учить! Так-то оно так, но не совсем.
В этой статье мы собрали правила для использования запятых в английском и распространенные ошибки, которые часто допускают русскоговорящие.
Создание сайта с помощью C++
Возможно ли это?
Да.
Знаю, звучит странно и больше похоже на упражнение в бесполезности, но это не так.
В этой статье я расскажу, как можно использовать С++ в разработке сайта, и приведу несколько достойных причин этому.
Будет не только интересно, но также полезно и очень практично.
Как работает Android, часть 1
В этой серии статей я расскажу о внутреннем устройстве Android — о процессе загрузки, о содержимом файловой системы, о Binder и Android Runtime, о том, из чего состоят, как устанавливаются, запускаются, работают и взаимодействуют между собой приложения, об Android Framework, и о том, как в Android обеспечивается безопасность.
Нейросеть для разработчиков C++
Написал библиотеку для обучения нейронной сети. Кому интересно, прошу.
Learn OpenGL. Урок 6.1. PBR или Физически-корректный рендеринг. Теория
Физически-корректный рендеринг
PBR, или физически-корректный рендеринг (physically-based rendering) это набор техник визуализации, в основе которых лежит теория, довольно хорошо согласующаяся с реальной теорией распространения света. Поскольку целью PBR является физически достоверная имитация света, он выглядит гораздо более реалистичным по сравнению с использованными нами ранее моделями освещения Фонга и Блинна-Фонга. Он не только лучше выглядит, но и дает неплохое приближение к реальной физике, что позволяет нам (и в частности художникам) создавать материалы, основанные на физических свойствах поверхностей, не прибегая к дешевым трюкам дабы заставить освещение выглядеть реалистично. Главным преимуществом такого подхода является то, что создаваемые нами материалы будут выглядеть как задумано независимо от условий освещения, чего нельзя сказать о других, не PBR подходах.
Мой любимый алгоритм: нахождение медианы за линейное время
Нахождение медианы списка может казаться тривиальной задачей, но её выполнение за линейное время требует серьёзного подхода. В этом посте я расскажу об одном из самых любимых мной алгоритмов — нахождении медианы списка за детерминированное линейное время с помощью медианы медиан. Хотя доказательство того, что этот алгоритм выполняется за линейное время, довольно сложно, сам пост будет понятен и читателям с начальным уровнем знаний об анализе алгоритмов.
Хитрый владелец Model S майнит криптовалюту на станциях бесплатной подзарядки Tesla
Майнерская мини-ферма спрятана в багажнике Tesla
Самый ценный ресурс, необходимый для добычи криптовалюты — это электричество. На генерацию монет уже тратится электроэнергии больше, чем потребляет такая страна как Ирландия (и 19 других стран Евросоюза). Это 0,13% мирового энергопотребления стоимостью полтора миллиарда долларов в год — ну а что делать, глобальная финансовая система требует соответствующей инфраструктуры.
В данный момент годовое потребление сети Bitcoin оценивается в 30,25 ТВт·ч. Так, за вчерашний день в плавильной печи «цифрового золота» сгорело 82,86 ГВт·ч. На единственную транзакцию уходит 275 кВт·ч, чего достаточно для суточного электроснабжения девяти больших частных коттеджей.
Ну в общем вы поняли идею. Для проведения транзакций и генерации биткоинов нужно электричество. Много электричества.
Решаем задачу нахождения длины наибольшей возрастающей подпоследовательности
Содержание:
Последовательность Фибоначчи O (n)
Решение за O(n ^ 2)
Бинарный поиск O(log n)
Решение за O(n * log n)
Задача
"Найти длину самой большой возрастающей подпоследовательности в массиве."
Вообще, это частный случай задачи нахождения общих элементов 2-х последовательностей, где второй последовательностью является та же самая последовательность, только отсортированная.
На пальцах
Есть последовательность:
5, 10, 6, 12, 3, 24, 7, 8
Вот примеры подпоследовательностей:
10, 3, 8
5, 6, 3
А вот примеры возрастающих подпоследовательностей:
5, 6, 7, 8
3, 7, 8
А вот примеры возрастающих подпоследовательностей наибольшей длины:
5, 6, 12, 24
5, 6, 7, 8
RNN: может ли нейронная сеть писать как Лев Толстой? (Спойлер: нет)
В данном примере мы построим рекуррентную нейронную сеть, которая получив на вход текст романа Толстого «Анна Каренина», будет генерировать свой текст, чем-то напоминающий оригинал, предсказывая, какой должен быть следующий символ.
Структуру изложения я старался делать такой, чтобы можно было повторить все шаги новичку, даже не понимая в деталях, что именно происходит внутри этой сети. Профессионалы Deep Learning скорее всего не найдут тут ничего интересного, а тех, кто только изучает эти технологии, прошу под кат.
Задачи планирования и программирование в ограничениях
Подумайте, как правильно написать программу, которая оптимально…
• решит головоломку типа судоку или задачу о восьми ферзях;
• распределит задачи между определенным набором ресурсов;
• рассчитает расписание занятий;
• определит эффективный маршрут движения транспорта;
• составит график дежурств и т.п.
Если программирование в ограничениях и решение сложных комбинаторных задач планирования не самая сильная ваша сторона, то эта статья как раз для вас.
UB-2017. Часть 1
Я хочу предложить вашему вниманию свежую статью «Undefined Behavior in 2017». Статья в оригинале имеет очень большой объём, и я разбил её на части.
В первой части речь пойдёт о разных инструментах поиска UB: ASan, UBSan, TSan и т.д.
ASan — Address Sanitizer от компании Google, разработанный на основе LLVM.
UBSan — Undefined Behavior Sanitizer, предназначен для обнаружения различных UB в программах на C и C++, доступен для Clang и GCC.
TSan — Thread Sanitizer, предназначен для обнаружения UB в многопоточных программах.
Если вам эта тема покажется далёкой от практики, я рекомендую дождаться продолжения, потому что в конце вас ждёт поистине огромный список UB языка С++ (их должно быть около 200!)
И я рекомендую прочитать также старые статьи Реджера, они не утратили актуальности.
Об авторе: Джон Реджер является профессором Computer Science в университете штата Юта в США.
Мы часто слышим, что некоторые люди утверждают, что проблемы, вытекающие из неопределённого поведения (UB) в C и C++ в основном решены путём широкого распространения инструментов динамической проверки, таких, как ASan, UBSan, MSan и TSan. Мы здесь покажем очевидное: несмотря на то, что в последние годы произошло множество прекрасных улучшений в этих инструментах, проблемы UB далеки от разрешения, и рассмотрим ситуацию в деталях.
Бестиарий С++. Справочник по загадочным персонажам
В C++ в изобилии встречаются подводные камни, ловушки, оговорки и западни. В подземельях С++ скрываются многочисленные подозрительные персонажи. Хэллоуин — правильное время для встречи с некоторыми представителями этой многочисленной своры чудовищ.
Информация
- В рейтинге
- Не участвует
- Зарегистрирован
- Активность