Один из продуктов Microsoft — Microsoft Robotics включает библиотеку Concurrent and Coordination Runtime. Библиотека очень нужна роботам для организации параллельных вычислений при обработке звука и изображений (да и не только их). В посте я расскажу как с помощью данной библиотеки создать параллельный алгоритм умножения матрицы A (m × n элементов) на вектор B (1 × n элементов) по следующей формуле: . Алгоритм вычисления вектора C (m × 1 элементов) легко распараллеливается, так как значение i-го элемента вектора не зависит от значений других его элементов. Перед запуском примера из исходников рекомендуется установить Microsoft Robotics.
Читать полностью »
Метка «c++» - 20
Microsoft Robotics. Параллельная обработка данных
2013-12-02 в 14:28, admin, рубрики: .net, microsoft, microsoft robotics developer studio, параллельное программирование, параллельные вычисления, метки: .net, c++, DEV3, microsoft robotics developer studio, параллельные вычисленияКак мы пытаемся продать PVS-Studio в Google или очередные ошибки в Chromium
2013-12-02 в 6:16, admin, рубрики: c++, chromium, Google Chrome, pvs-studio, visual c++, Блог компании PVS-Studio, метки: c++, chromium, pvs-studio, visual c++
Когда мы пишем статьи про проверки каких-либо проектов с помощью PVS-Studio, то, как правило, у нас прибавляется клиентов. Тут все честно. Программисты не любят рекламу, но охотно отзываются на интересные материалы, которые легко проверить. Поэтому мы не рекламируем свой инструмент, а просто показываем, что он умеет. Однако, хотя мы проверили код Chromium уже три раза и трижды находили в нем ошибки, ордера с почтой в google.com в моей почте до сих пор нет. Поскольку мне интересно, что я делаю не так, и почему Google пока не использует PVS-Studio, я решил написать очередную статью.
Эта статья состоит из двух частей. В первой рассказывается об инфраструктуре проекта Chromium и нюансах интеграции, во второй приведены очередные найденные ошибки.
Кстати эта статья опубликована и на английском языке. Если захотите переслать ее англоязычным коллегам – пожалуйста, дайте им ссылку вот на это.
Хотите узнать, почему разрабатывать Chromium сложно и далеко не каждый инструмент для программистов может быть использован в проекте Chromium? Тогда читаем…
Программируем под Pebble. Урок первый: Глупые часы
2013-12-01 в 19:43, admin, рубрики: Pebble, pebble watch, Блог компании AVI, Гаджеты. Устройства для гиков, Программирование, умные часы, метки: c++, Pebble, pebble watch, Программирование, умные часы Когда мне привезли часы Pebble(спасибо магазину madrobots.ru), я думал это просто умные часы. Ну, там смс на экранчике показать, время в двух поясах, поставить вместо цифровых — хипстерские аналоговые. И так далее.
Но оказывается, у часов есть довольно большое комьюнити, открытое API для создания своих приложений, среда онлайн-разработки — в общем, идеальная игрушка для скучающего разработчика :)
Внутреннее устройство llst, часть 3. Магия JIT, или как ускорить виртуальную машину в 50 раз
2013-12-01 в 16:54, admin, рубрики: c++, jit, Little Smalltalk, LLST, LLVM, smalltalk, виртуальная машина, Компиляторы, ооп, Программирование, Смолток, метки: c++, JIT, Little Smalltalk, LLST, LLVM, smalltalk, виртуальная машина, компиляторы, ооп, Смолток
В прошлой статье мы с humbug показали, как может меняться скорость вычислений в зависимости от способа выполнения метода и его содержимого. Теперь мы сможем заглянуть под капот виртуальной машины и понять, как и почему это происходит.
Ранее мы познакомились с языком Smalltalk, а точнее с его микро реализацией Little Smalltalk. Разобрались с синтаксисом языка, форматом представления объектов в памяти и набором основных инструкций. Теперь мы вплотную подошли к вопросам взаимодействия Smalltalk и LLVM (ради этого и затевалась вся серия статей).
Сейчас у нас есть вся необходимая база знаний для того чтобы понять, что именно делается в нашем JIT компиляторе. В этой статье мы узнаем, как байт-коды Smalltalk преобразуются в IR код LLVM, как происходит компиляция и выполнение кода, и почему это работает быстрее, чем программная интерпретация. Самые нетерпеливые могут посмотреть шеллкасты (раз и два), с циферками и бегущими строчками (не забывайте про возможность скроллинга).
Читать полностью »
Стоит ли оптимизировать обработку изображений на С++ при помощи SIMD?
2013-11-29 в 17:17, admin, рубрики: c++, simd, Алгоритмы, обработка изображений, оптимизация программ, метки: c++, simd, оптимизация программSIMD и обработка изображений
Обработка изображений (здесь мы сознательно ограничиваем в себя только растровыми картинками и опускаем широкий класс векторных изображений), как правило, представляет собой набор простых операций, которые применяются к каждой точке изображения. Если учесть, что цветовые каналы, из которых состоит точка изображения (пиксель) обычно представлены в виде целых чисел небольшой размерности, то обработка изображения сводится к огромному числу однотипных операций над 1-2 байтными целыми числами.
Читать полностью »
Разработка полноценного API – приложения для программного пакета SolidWorks. Модель болта
2013-11-28 в 20:28, admin, рубрики: api, CAD/CAM, solidworks, метки: api, c++, solidworksВведение
В предыдущем материале были изложены основные принципы разработки API – приложений для системы трехмерного моделирования SolidWorks. В данной статье хотелось бы показать разработку реального API – приложения, предназначенного для повышения эффективности работы инженера – конструктора.
Одним из этапов конструирования является разработка трехмерной модели изделия. В сложных узлах используется множество стандартизированных и разработанных непосредственно самим конструктором крепежных изделий.
Разумеется альтернативным вариантом является использование конфигураций в SolidWorks, однако если необходимо использовать не стандартизированные крепежные изделия, то инженер не будет знать заранее какие размеры и конфигурации ему понадобятся. Соответственно процесс разработки и сборки сложных деталей постоянно будет прерываться необходимостью моделирования крепежных изделий.
В рамках этой работы разработано API – приложение для автоматического создания модели болта, с заданными геометрическими параметрами.Читать полностью »
Настройка WebRTC + Eclipse 4.3 + ubuntu 13.10
2013-11-28 в 15:59, admin, рубрики: c++, eclipse, Google API, Google Code, Ubuntu 13.10, WebRTC, метки: c++, Eclipse, Google Code, Ubuntu 13.10, WebRTCДобрый день, хабрапользователи!
Выкладываю небольшую шпаргалку по настройке WebRTC + Eclipce 4.3 + ubuntu 13.10. Это может быть полезно тем, кто решил попробовать себя в написании кода на С++ для webrtc.Читать полностью »
Minecraft 2 на C# (20 строк кода)
2013-11-28 в 8:37, admin, рубрики: 30 строк, game development, ненормальное программирование, метки: 30 строк, c++, game development, ненормальное программированиеУважаемые читатели, прошу обратить внимание что это «ненормальное программирование» во избежании недопониманий.
Для тех кто видел мою предыдущую версию Minecraft сразу скажу, что это не развитие предыдущего безумия, это совершено новое и еще более безумное безумие, детали которого я раскрою под катом. В этот раз я старался вести себя поспокойнее и исправно пил лекарства чтобы санитары незападозрили неладное.
Для тех же кому понравился сам Minecraft я тоже приготовил сюрприз, добавил огонь, который так просили некоторые читатели.
В игре присутствуют следующие блоки:
- Воздух
- Земля
- Огонь (с анимацией)
- Вода
ЛюбовьЛестница- Коренная порода
Возможности:
- Вода растекается и тушит огонь
- Огонь поджигает лестницы
- Гравитация
- Создание блоков
- Разрушение блоков земли
Картинка для привлечения внимания:
Быстрее чем std::function
2013-11-27 в 14:56, admin, рубрики: c++, c++11, велосипед на ракетном топливе, Программирование, метки: c++, c++11, велосипед на ракетном топливе С момента выхода стандарта С++11 прошло уже больше двух лет. И большинство С++ разработчиков уже знакомы с основными его нововведениями и костылями. Одним из нововведений было добавление в стандартную библиотеку класса std::function
.
Классы std::function и boost::function являются высокоуровневыми обертками над функциями и функциональными объектами. Объекты таких классов позволяют хранить и вызывать функции и функторы с заданной сигнатурой, что бывает удобно, например, при создании callback вызовов (например, мы можем регистрировать несколько обработчиков, и это могут быть как обычные функции, так и объекты с определенным оператором =)
Этого замечательного шаблонного класса давно не хватало нам. Однако, в погоне за универсальностью разработчикам стандартной библиотеки пришлось пойти на некоторые жертвы. Так как С++ используется в первую очередь там, где необходимо выжать максимальную скорость из железа, со больше всего разочаровывает любой overhead по скорости. В частности, к таким вещам можно отнести:
- При создании объекта
std::function
вызывается операторnew
, как следствие того, чтоstd::function
позволяет сохранять в себя функтор произвольного размера. std::function
имеет семантику копирования, которая, в принципе, редко когда бывает необходима в при действиях с функторами (в связи с появлением move-семантики), но стоит определенных ресурсов CPU.
Как от этого избавиться?
Читать полностью »
Не стреляйте себе в ногу, используя LINQ
2013-11-27 в 8:35, admin, рубрики: .net, sql, метки: .net, c++, sql В статье я описал несколько примеров неочевидных моментов при использовании LINQ to SQL. Если вы гуру .NET, вам, возможно, покажется это скучным, остальным — добро пожаловать!
Начнем с такого примера. Допустим, у нас есть сущность «тип действия». У типа действия есть human-readable имя и системное имя — некий уникальный идентификатор, по которому с объектами этой сущности мы сможем работать из кода. Вот такая структура в виде объектов в коде:
class ActionType
{
public int id;
public string systemname;
public string name;
}
var ActionTypes = new ActionType[] {
new ActionType {
id = 1,
systemname = "Registration",
name = "Регистрация"
},
new ActionType {
id = 2,
systemname = "LogOn",
name = "Вход на сайт"
},
new ActionType {
id = 3,
systemname = null,
name = "Некоторый тип действия без системного имени"
}
};
Для такой же структуры с аналогичными данными создана таблица в БД и вспомогательные объекты для использования LINQ to SQL. Допустим, нам необходимо выяснить, существует ли у нас тип действия с системным именем NotExistingActionType. Вопрос в том, что будет выведено на экран после выполнения этих инструкций:
var resultForObjects = ActionTypes.All(actionType => actionType.systemname != "NotExistingActionType");
var context = new LinqForHabr.DataClasses1DataContext();
var resultForLTS = context.ActionTypes.All(actionType => actionType.SystemName != "NotExistingActionType");
Console.WriteLine("Result for objects: " + resultForObjects + "nResult for Linq to sql: " + resultForLTS);
Console.ReadLine();