Представлена семантика разработанной библиотеки pde++ для программирования конечно-разностных методов в операторном стиле. Основными объектами библиотеки являются сеточная функция, сеточная ячейка и сеточные операторы, арифметические соотношения между которыми максимально приближают программный код к его математической нотации. Библиотека pde++ представлена всего несколькими заголовочными файлами, не имеет внешних зависимостей и использует концепцию ленивых вычислений.
Рубрика «c++» - 69
Компактная С++ библиотека для программирования конечно-разностных методов в операторном стиле. Часть 1. Семантика
2019-03-01 в 18:31, admin, рубрики: c++, конечно-разностные методы, математика, ПрограммированиеУнифицированная обработка ошибок (C++ вариант для микроконтроллеров)
2019-02-28 в 15:29, admin, рубрики: c++, C++14, микроконтроллеры, Программирование, программирование микроконтроллеровПри разработке ПО для микроконтроллеров на С++ очень часто можно столкнуться с тем, что использование стандартной библиотеки может привести к нежелательным дополнительным расходам ресурсов, как ОЗУ, так и ПЗУ. Поэтому зачастую классы и методы из библиотеки std
не совсем подходят для реализации в микроконтроллере. Существуют также некоторые ограничения в использовании динамически выделяемой памяти, RTTI, исключений и так далее. В общем случае, чтобы писать компактный и быстрый код нельзя просто так взять библиотеку std
и начать пользоваться, скажем операторами типа typeid
, потому что необходима поддержка RTTI, а это уже накладные расходы, хоть и не очень большие.
Поэтому иногда приходится изобретать велосипеды, чтобы выполнить все эти условия. Таких задач немного, но они есть. В данном посте, хотелось бы рассказать про вроде бы как простую задачку — расширить коды возврата существующих подсистем в ПО для микроконтроллера.
Читать полностью »
Беседы о C++: РГ 21, Boost, конференции
2019-02-26 в 14:12, admin, рубрики: c++, c++ russia 2019, Блог компании JUG.ru Group, интервью, Компиляторы, конференции, С++Всем привет!
Недавно в Новосибирске прошла очередная C++ Siberia 2019. На конференции была уютная атмосфера и много хороших докладов. Видеозаписи докладов сейчас готовятся к публикации. Пользуясь случаем, я побеседовал с двумя нашими частыми докладчиками, которые редко пропускают конференции и делают всегда отличные доклады: Антон Полухин antoshkka и Павел Филонов.
Антон — представитель России в ISO на международных заседаниях рабочей группы по стандартизации C++, автор нескольких принятых предложений к стандарту языка C++, Boost-библиотек и книги «Boost C++ Application Development Cookbook».
Павел — разработчик-исследователь в Лаборатории Касперского, занимается вопросами применения методов машинного обучения в задачах обеспечения безопасности кибер-физических систем, ведёт преподавательскую деятельность. В ожидании видео с конференции предлагаю вам прочитать расшифровку нашей беседы.
Категории выражений в C++
2019-02-25 в 21:18, admin, рубрики: c++, glvalue, lvalue, prvalue, rvalue, value categories, xvalue, С++Категории выражений, такие как lvalue и rvalue, относятся, скорее, к фундаментальным теоретическим понятиям языка C++, чем к практическим аспектам его использования. По этой причине многие даже опытные программисты достаточно смутно представляют себе, что они означают. В этой статье я постараюсь максимально просто объяснить значение этих терминов, разбавляя теорию практическими примерами. Сразу оговорюсь: статья не претендует на максимально полное и строгое описание категорий выражений, за подробностями я рекомендую обращаться непосредственно в первоисточник: Стандарт языка C++.
Разработка под WebAssembly: реальные грабли и примеры
2019-02-21 в 13:08, admin, рубрики: bytefog, c++, Emscripten, inetra, javascript, Peer-to-Peer, wasm, webassembly, WebRTC, Блог компании JUG.ru Group
Анонс WebAssembly состоялся в 2015-м — но сейчас, спустя годы, всё ещё немногие могут похвастаться им в продакшне. Тем ценнее материалы о подобном опыте: информация из первых рук о том, каково с этим жить на практике, пока что в дефиците.
На конференции HolyJS доклад об опыте использования WebAssembly получил высокие оценки зрителей, и теперь специально для Хабра подготовлена текстовая версия этого доклада (видеозапись также приложена).
Читать полностью »
Ускоряем неускоряемое или знакомимся с SIMD, часть 2 — AVX
2019-02-18 в 15:21, admin, рубрики: avx, AVX2, C, c++, simd, sse, высокая производительность, ПроцессорыПредыдущая часть вызвала бурную дискуссию, в ходе которой выяснилось, что AVX/AVX2 на самом деле есть в десктопных CPU, нет только AVX512. Поэтому продолжаем знакомиться с SIMD, но уже с современной его частью — AVX. А так же разберём некоторые комментарии:
- медленнее ли
_mm256_load_si256
, чем прямое обращение к памяти? - влияет ли на скорость использование AVX команд над SSE регистрами?
- действительно ли так плохо использовать
_popcnt
?Читать полностью »
Ускоряем неускоряемое или знакомимся с SIMD
2019-02-17 в 9:17, admin, рубрики: C, c++, simd, sse, высокая производительность, ПроцессорыЕсть класс задач, которые нельзя ускорить за счёт оптимизации алгоритмов, а ускорить надо. В этой практически тупиковой ситуации к нам на помощь приходят разработчики процессоров, которые сделали команды, позволяющие выполнять операции на большим количеством данных за одну операцию. В случае x86 процессоров это инструкции сделанные в расширениях MMX, SSE, SSE2, SSE3, SSE4, SSE4.1, SSE4.2, AVX, AVX2, AVX512.
В качестве «подопытного кролика» я взял следующую задачу:
Есть неупорядоченный массив arr с числами типа uint16_t. Необходимо найти количество вхождений числа v в массив arr.
Классическое решение, работающее за линейное время выглядит так:
int64_t cnt = 0;
for (int i = 0; i < ARR_SIZE; ++i)
if (arr[i] == v)
++cnt;
В таком виде бенчмарк показывает следующие результаты:
------------------------------------------------------------
Benchmark Time CPU Iterations
------------------------------------------------------------
BM_Count 2084 ns 2084 ns 333079
Под катом я покажу как его ускорить в 5+ раз.
Читать полностью »
C++ Binary Compatibility and Pain-Free Upgrades to Visual Studio 2019
2019-02-15 в 9:00, admin, рубрики: Binary Compatibility, c++, microsoft, Visual Studio, Visual Studio 2019, Блог компании Microsoft, Программирование
Visual Studio 2019 pushes the boundaries of individual and team productivity. We hope that you will find these new capabilities compelling and start your upgrade to Visual Studio 2019 soon.
As you are considering this upgrade, rest assured that Visual Studio 2019 makes it distinctively easy to move your codebase from previous versions of Visual Studio. This post captures the reasons why your upgrade to Visual Studio 2019 will be pain-free.
- You can install the latest IDE side-by-side with any older VS versions
- You can continue building your C++ code with the MSVC v140 (VS 2015.3) or v141 (VS 2017) toolsets
- You can upgrade to the latest MSVC v142 (VS 2019) and maintain binary compatibility with any of your 3rd party libraries that haven’t migrated yet
- Regardless of the toolset you’re on, you get access to the full collection of OSS libraries available in Vcpkg
Must-have плагины и несколько полезностей для С-С++ разработки в VS Code
2019-02-15 в 8:58, admin, рубрики: c++, Visual Studio, vs code, Блог компании «Актив», Программирование, разработка, Разработка под Linux, расширения
Удивительно, но до сих пор на Хабре нет хорошей подборки плагинов для Visual Studio Code для тех, кто пишет на С/С++. Microsoft в своем блоге опубликовали только статью, совсем базового уровня с инструкцией по настройке. Но большинство читателей Хабра, тем более из разработчиков, обойдется без такой подробной инструкции. Есть только несколько подборок для веб-разработчиков, но не для С++.
Наверное это связано с тем, что большинство С++ разработчиков использует тяжеловесные IDE, в первую очередь конечно же Visual Studio.
Но в Linux и MacOS с полноценными IDE всё не так просто, да и тяжелая среда разработки не всегда нужна или просто не хочется ее использовать.
Я же хочу обратить ваше внимание на полезные плагины, которые облегчают жизнь и работу, а также рассказать про полезные настройки и особенности VS Code, которые вы могли просто упустить.
Читать полностью »