Как стать автором
Поиск
Написать публикацию
Обновить
10.1

Параллельное программирование *

Распараллеливаем вычисления

Сначала показывать
Порог рейтинга
Уровень сложности

Студенческие суперкомпьютерные соревнования: инструкция по применению

Время на прочтение8 мин
Количество просмотров4.5K
Привет, Хабр! Я капитан команды СПбГУ, принимавшей участие в соревнованиях ASC. На прошлой неделе вышла статья stealapanda об опыте работы с мощнейшим суперкомпьютером мира Sunway Taihulight. Стало ясно, что многие впервые слышат о таком мероприятии. В своей статье я хочу рассказать в целом об HPC соревнованиях, как они проводятся и какие навыки пригодятся если вы захотите вписаться в эту увлекательную авантюру. Также на примере ASC опишу как это все проходит.

Читать дальше →

Асинхронность 3: Субъекторная модель

Время на прочтение30 мин
Количество просмотров19K
Двое из ларца

Предисловие


Эта статья является продолжением цикла статей про асинхронность:

  1. Асинхронность: назад в будущее.
  2. Асинхронность 2: телепортация сквозь порталы.

Спустя 3 года я решил расширить и обобщить имеющийся спектр асинхронного взаимодействия с использованием сопрограмм. Помимо этих статей также рекомендуется ознакомиться с универсальным адаптером:

  1. Универсальный адаптер

Введение


Рассмотрим электрон. Что он из себя представляет? Отрицательно заряженная элементарная частица, лептон, обладающий некоторой массой. Это означает, что он может участвовать по меньшей мере в электромагнитных и гравитационных взаимодействиях.
Читать дальше →

Behind the scene of TOP-1 supercomputer

Время на прочтение5 мин
Количество просмотров12K

Это история о том, как мы c mildly_parallel замедляли ускоряли расчеты на самом мощном суперкомпьютере в мире.


Читать дальше →

Оптимизация TensorFlow на современных архитектурах Intel

Время на прочтение8 мин
Количество просмотров7.3K
TensorFlow — современная платформа глубокого обучения и машинного обучения, дающая возможность извлекать максимальную производительность из оборудования Intel. Эта статья познакомит сообщество разработчиков искусственного интеллекта (ИИ) с методиками оптимизации TensorFlow для платформ на базе процессоров Intel Xeon и Intel Xeon Phi. Эти методики были созданы в результате тесного сотрудничества между специалистами корпораций Intel и Google. Представители обеих корпораций объявили об этом сотрудничестве на первой конференции Intel AI Day в прошлом году.


Читать дальше →

SDAccel — проверяем передачу данных

Время на прочтение9 мин
Количество просмотров5.1K


В предыдущей статье «SDAccel – первое знакомство» я попытался описать основы применения OpenCL на ПЛИС Xilinx. Теперь настало время поделиться результатами экспериментов по передаче данных на модуле ADM-PCIe-KU3. Проверяется передача данных в обоих направлениях. Исходный код программ размещён на GitHub: https://github.com/dsmv/sdaccel
Читать дальше →

Concurrency паттерны в Rust из Java

Время на прочтение11 мин
Количество просмотров13K

Под катом находятся заметки, в которых расписано, как реализовать в Rust хитрые concurrency паттерны, которые я с легкостью пишу в Java, и в чем различие в подходах к concurrency у этих языков. Статья будет полезна и тем, кто переходит на Rust из C#, ведь у него аналогичная модель памяти.

Читать дальше →

Экскурсия по Музею Истории Компьютеров в Калифорнии, с пользой для разработки. Часть 1. ENIAC, Stretch, CDC6600, IBM/360

Время на прочтение8 мин
Количество просмотров7.9K
Господа! Сегодня мы пройдемся с сибирской девушкой Ириной по Музею истории компьютеров в Маунтин-Вью, Калифорния. Причем пройдемся не как туристы, а для принесения пользы России. Я уже писал в предыдущем посте, что один из эффективных способов для студента изучить проектирование процессоров — это взять какой-нибудь древний, но поучительный процессор, найди документацию по его архитектуре (и какую-нибудь информацию по его микроархитектуре), и спроектировать аналог этого процессора на языке описания аппаратуры SystemVerilog (или VHDL, если он вам больше нравится), после чего реализовать процессор на плате ПЛИС / FPGA (какой именно, не важно — Altera / Intel FPGA, Xilinx или Lattice). В качестве учебника для такого упражнения вы можете начать с Харрис & Харрис, после чего продолжить с книгами для более продвинутой стадии обучения, например Шень-Липасти.

Каким образом все это принесет пользу России? Под такие проекты мы собираемся раздавать FPGA платы на конференции которая пройдет 18-22 сентября в Томске. Туда приедут представители МГУ, МФТИ, МИЭТ, МЦСТ, Imagination Technologies, National Instruments итд. Они будет обсуждать, как обновить программу университетов, чтобы сегодняшние студенты через несколько лет проектировали росийские чипы на уровне передовых западных компаний. Там также будет школа-семинар, на которой будут обсуждать, как делать учебные процессоры — начиная от простейшего schoolMIPS от Станислава Жельнио sparf.

Вот первая фотография из музея в Маунтин-Вью — на ней помимо Ирины и ракеты в центре виден небольшой ящичек. Это бортовой компьютер космической станции «МИР» , который проектировали инженеры советского объединения «ЭЛАС», которое трансформировалось в современную зеленоградскую компанию «ЭЛВИС»:



Итак, темы для учебных проектов — начиная из дремучих десятилетий середины XX века:

Идеи о новых возможностях обычного/параллельного программирования (расширение C++)

Время на прочтение6 мин
Количество просмотров13K
Здравствуйте, уважаемые читатели.

Предлагаю всем, кто заинтересуется, обсудить некоторые основные идеи классического и параллельного программирования в расширении C++, основанном на процедурах/функциях с планированием повторного входа (ПППВ/ФППВ). В минимальном варианте — это процедура или функция, у которой есть статический или динамический план исполнения.
Читать дальше →

Обзор возможностей библиотеки Apache Curator для Apache Zookeeper

Время на прочтение12 мин
Количество просмотров17K

По долгу работы мне приходится сталкиваться с проектированием и разработкой распределенных приложений. Такие приложения часто используют различные средства межпроцессного взаимодействия для организации взаимодействия компонентов. Особые сложности возникают в процессе реализации алгоритмов, обрабатывающих связанные данные распределенно. Для поддержки таких задач используются специализированные системы распределенной координации. Самым популярным и широко используемым продуктом является Apache Zookeeper.

Читать дальше →

[Питер] Встреча JUG.ru c легендой параллельного программирования Maurice Herlihy — Transactional Memory and Beyond

Время на прочтение2 мин
Количество просмотров4.5K


У нас праздник! В начале июля в Санкт-Петербурге пройдет SPTCC 2017, летняя школа по параллельному программированию. Одним из лекторов школы станет Морис Херлихи (Maurice Herlihy), легенда параллельного программирования, один из авторов знаменитого учебника «The Art of Multiprocessor Programming».

В четверг, 6 июля, в 19:00 в Университете ИТМО Морис выступит на встрече JUG.ru. На этот раз мы будем говорить не про Java. Тема встречи — транзакционная память.

О чем же нам расскажет Морис?

Транзакционная память


Новое поколение процессорных архитектур предоставляет нам аппаратную транзакционную память (Hardware Transactional Memory — HTM), механизм синхронизации для быстрых транзакций в оперативной памяти. В данном докладе будет показано, что HTM это не просто более быстрый путь для релизации старых-добрых monitor-ов и latch-ей. На самом деле, HTM обеспечивает фундаментальные позитивные изменения в том, как мы программируем многоядерные машины (и возможно даже базы данных), позволяя нам переосмыслить базовые примитивы синхронизации, такие, как lock-и, управление памятью, и многообразие многопоточных структур данных.
Читать дальше →

Материалы студенческой школы «Recent Advances in Algorithms»

Время на прочтение1 мин
Количество просмотров4.3K
Recent Advances in Algorithms

В конце мая в Петербурге в ПОМИ РАН прошла международная студенческая школа «Recent Advances in Algorithms». Идея школы заключалась в том, чтобы ведущие учёные рассказали о последних достижениях в области алгоритмов. В результате у нас получился следующий список курсов.

Список лекторов
Читать дальше →

Чип для умных камер ELISE — одно из самых высокотехнологичных изделий России 2017 года. Плата для разработчиков и камера

Время на прочтение4 мин
Количество просмотров11K
У каждой российской микроэлектронной компании есть рассказ, почему она самая хорошая и передовая. По английски это называется «claim to fame» — «заявка на славу». Одни российские компании славятся оригинальной архитектурой и/или микроархитектурой CPU, другие — спроектированной в России системой на кристалле, третьи — спроектированными в России блоками, которые были лицензированы западным компаниям.

У российской компании ЭЛВИС (ELVEES), которая исторически специализировалась на космической электронике, DSP и хардверно-поддерживаемом распознавании образов, текущая «заявка на славу» выражена в совместном российско-британско-американско-тайваньском чипе для «умных камер» под названием ELISE. Инженеры в подмосковном Зеленограде спроектировали внутри этого чипа важные блоки для видео-обработки и GNSS, которые потом кросс-лицензировала британско-американская Imagination Technologies.

Блоки от элвисовцев интегрированы с тремя разнородными процессорными ядрами: двухядерным кластером суперскалярных ядер MIPS P5607 (Apache) с частотой 1.2 GHz, на котором работает Linux, процессором с аппаратно-поддерживаемой многопоточностью MIPS interAptiv (1 GHz) и небольшим вспомогательным процессором с аппаратно-поддерживаемой виртуализацией MIPS M5150 (Virtuoso).

На днях мне попали в руки два изделия с чипом ELISE — плата для разработчиков и трехмерная бинокулярная камера. Элвисовцы также дали мне список на 10 страниц, что есть на плате, что есть внутри чипа, и какой для этого поддерживается софтвер. К сожалению, они не разрешили мне выложить эти страницы в интернет, поэтому я кое-что перескажу своими словами, а также добавлю инфо про используемые ядра, после чего вы все остальное можете запросить у элвисовцев сами.

На фотографиях ниже некоторые из инженеров-участников проекта. Девушка слева спроектировала часть load-store unit в MIPS P5607, юноша в зеленой майке написал модели интерфейсов шин, а товарищ в клетчатой рубашке — архитектор софтверной экосистемы:


Читать дальше →

Intel и Facebook совместно повышают производительность библиотеки Caffe2

Время на прочтение2 мин
Количество просмотров4.4K

Каждый день окружающий нас мир генерирует все больше и больше информации — текстовой, графической, мультимедийной и т.д. За последние годы технологии искусственного разума и глубокого изучения сумели улучшить ряд приложений, которые помогают людям лучше воспринимать эту информацию, обогатив их возможностями распознавания речи, видео, изображений, а также функционалом рекомендаций.
Как Intel и Facebook ускоряют deep learning

Ближайшие события

Потоки выполнения и PHP

Время на прочтение19 мин
Количество просмотров51K


PHP и потоки выполнения (threads). Предложение всего лишь из четырёх слов, а по этой теме можно написать книгу. Как обычно, я не буду так делать, зато дам вам информацию, чтобы вы стали разбираться в предмете до определённой степени.


Начнём с путаницы, которая есть в головах у некоторых программистов. PHP — это не многопоточный язык. Внутри самого PHP не используются потоки выполнения, и PHP не даёт возможности пользовательскому коду нативно использовать их в качестве механизма параллелизации.


PHP очень далёк от других технологий. Например, в Java очень активно используются потоки выполнения, ещё они могут встречаться в пользовательских программах. В PHP такого нет. И тому есть причины.

Читать дальше →

Потокобезопасный std::map с производительностью lock-free map

Время на прочтение21 мин
Количество просмотров34K

Примеры использования и тестирование потоко-безопасного указателя и contention-free shared-mutex


В этой статье мы покажем: дополнительные оптимизации, примеры использования и тестирование разработанного нами потоко-безопасного указателя с оптимизированным разделяемым мьютексом contfree_safe_ptr<T> – это эквивалентно safe_ptr<T, contention_free_shared_mutex<>>
В конце покажем сравнительные графики тестов нашего thread-safe указателя и одних из лучших lock-free алгоритмов из libCDS на процессорах Intel Core i5/i7, Xeon, 2 x Xeon.
Читать дальше →

Ускоряем std::shared_mutex в 10 раз

Время на прочтение35 мин
Количество просмотров56K
В этой статье мы детально разберем атомарные операции и барьеры памяти C++11 и генерируемые ими ассемблерные инструкции на процессорах x86_64.

Далее мы покажем как ускорить работу contfree_safe_ptr<std::map> до уровня сложных и оптимизированных lock-free структур данных аналогичных по функциональности std::map<>, например: SkipListMap и BronsonAVLTreeMap из библиотеки libCDS (Concurrent Data Structures library): github.com/khizmax/libcds

И такую многопоточную производительность мы сможем получить для любого вашего изначально потоко-небезопасного класса T используемого как contfree_safe_ptr<T>. Нас интересуют оптимизации повышающие производительность на ~1000%, поэтому мы не будем уделять внимание слабым и сомнительным оптимизациям.
Читать дальше →

Делаем любой объект потокобезопасным

Время на прочтение30 мин
Количество просмотров78K
image

В этих 3-ех статьях я детально расскажу об атомарных операциях, барьерах памяти и о быстром обмене данными между потоками, а так же о «sequence-points» на примере «execute-around-idiom», а заодно постараемся вместе сделать что-нибудь полезное — умный указатель, который делает любой объект потоко-безопасным для любых операций с его членами переменными или функциями. А затем покажем как используя его достичь производительности высоко-оптимизированных lock-free алгоритмов на 8 — 64 ядрах.
Читать дальше →

Разработка игры на основе физической симуляции (для реалистичной разрушаемости игрового мира)

Время на прочтение4 мин
Количество просмотров45K
В первом посте об этой игре я рассказал о технических сложностях, которые пришлось преодолеть. Второй пост, который вы сейчас читаете — более лёгкий для восприятия. Здесь я проиллюстрирую гифками весь путь построения физической модели и кратко расскажу о каждом шаге.

От создания нового проекта в Юнити до публикации бета-версии в Стиме прошло 10 месяцев. 90% времени ушло на создание, оптимизацию и вылизывание физической модели, остальное — на геймплей.

Цель была в том, чтобы создать полностью физический мир. Но подход, реализованный в Red Faction показался слишком громоздким и не слишком реалистичным. В той игре меши при взрыве разбивались на куски, на которые натягивались физические коллайдеры. Я решил не мучаться с сопроматом и множеством частных случаев разрушений, а сделать простую систему, работающую во всех случаях.

Сделал всё из взаимодействующих частиц: землю, здания, танки игроков, врагов, снаряды и бонусы — всё. Взаимодействия между частицами реализовал на видеокарте, поскольку для параллельных вычислений она в 50-100 раз производительней процессора.

Получившаяся из частиц материя сначала выглядела странно, и напоминала то ли жидкость, то ли газ:

image

А для игры нужно было что-то прочное, способное держать форму. Испробовав разные способы взаимодействия частиц, я нашёл, что сила Леннарда-Джонса даёт самую прочную субстанцию. Получилось что-то вроде манной каши. Для экспериментов я добавил взрывы по клику мыши.

Многоагентный умный дом

Время на прочтение7 мин
Количество просмотров18K
Начну свою первую статью с небольшой предыстории. К моменту когда все началось, я уже на протяжении 7 лет участвовал в научном проекте, целью которого была разработка семантической технологии проектирования интеллектуальных систем. А началось все с прочтения одной замечетельной статьи (спасибо vovochkin) во второй половине 2015 года. Именно тогда я понял, что разрабатываемая нами технология хорошо подходит под решение задач в области интернета вещей. Это был первый фактор который привел меня к текущему проекту. Вторым фактором было то, что мне сильно нравился фильм «Железный человек» и я сильно хотел иметь своего «Джарвиса» у себя дома.



Тестирование параллельных процессов

Время на прочтение9 мин
Количество просмотров10K
image

Вы встречались с ошибками, которые возникают время от времени в продакшне, но никак не воспроизводятся локально? Бывает, изучаешь такой баг и вдруг понимаешь, что он проявляется только при одновременном параллельном выполнении скриптов. Изучив код, понимаешь как это исправить, чтобы такого больше не повторялось. Но на такое исправление хорошо бы написать тест…

В статье я расскажу о своем подходе к тестированию таких ситуаций. А также приведу несколько наглядных (и наверное даже классических) примеров багов, которые удобно протестировать с помощью этого подхода. Все примеры багов живые — то, что встречается в работе.

Забегая вперед сразу скажу, что в конце статьи будет ссылка на github, куда я выложил готовое решение, позволяющее тестировать параллельные консольные процессы легко и просто.
Читать дальше →