В предыдущих частях опуса (1, 2, 3) мы рассмотрели внутреннее строение lock-free map и убедились, что все основные операции — поиск, добавление и удаление ключа — могут быть выполнены без глобальных блокировок и даже в lock-free манере. Но стандартный std::map
поддерживает ещё одну очень полезную абстракцию — итераторы. Возможно ли реализовать итерабельный lock-free map?
Ответ на этот вопрос — под катом.
Читать полностью »
Рубрика «параллельное программирование» - 18
Lock-free структуры данных. Итераторы: multi-level array
2016-12-13 в 6:12, admin, рубрики: c++, iterator, libcds, lock-free, map, Алгоритмы, параллельное программирование, ПрограммированиеПараллельная быстрая сортировка на Хаскеле и как нелегко её оказалось написать
2016-12-11 в 18:46, admin, рубрики: haskell, quicksort, параллельное программирование, Программирование, функциональное программированиеПрим. перев.: Это перевод истории о том, как нелегко оказалось написать параллельную быструю сортировку (quicksort) на Хаскеле. Оригинал статьи написан в 2010 году, но, мне кажется, он до сих пор поучительный и во многом актуальный.
Есть много примеров того, как Хаскель делает простые проблемы сложными. Вероятно, самый известный из них—это решето Эратосфена, которое легко написать на любом императивном языке, но настолько сложно написать на Хаскеле, что почти все решения, которые преподавались в университетах и использовались в исследованиях последние 18 лет, оказались неправильными. На их несостоятельность обратила внимание Мелисса О'Нил [Melissa O'Neill] в своей важной научной работе "Настоящее решето Эратосфена". В ней приводится прекрасное описание того, что не так в старых подходах, и как их надо исправить. Решением Мелиссы было использовать очередь с приоритетом [priority queue] для реализации решета. Правильное решение оказалось в 10 раз длиннее, чем намного более простое решение на F# и в целых 100 раз длиннее, чем оригинальный изуродованный алгоритм на Хаскеле.
Читать полностью »
Прогресс не стоит на месте: OpenMP 4.5
2016-12-01 в 7:38, admin, рубрики: c++, Блог компании Intel, параллельное программирование, ПрограммированиеВсё течет, всё меняется, и OpenMP продолжает активно развиваться. Почти три года назад стандарт стал поддерживать не только параллелизм по задачам, но и по данным (векторизацию), про что я подробно писал. Самое время посмотреть, что появилось в последней версии, выпущенной в ноябре 2015, и что уже поддерживается на данный момент в компиляторах от Intel. Ну что, приступим!
Читать полностью »
FlyElephant празднует первый год работы в публичном доступе и анонсирует сотрудничество с HPC-HUB
2016-11-25 в 13:10, admin, рубрики: big data, blender, c++, data mining, docker, FlyElephant, gcc, gromacs, HPC, java, Julia, jupyter, octave, OpenFOAM, openmp, python, R, SciLab, Блог компании FlyElephant, высокая производительность, машинное обучение, научные расчёты, Облачные вычисления, параллельное программирование, стартапы
В ноябре FlyElephant празднует первый год работы в публичном доступе. FlyElephant — это платформа для дата сайнтистов, инженеров и ученых, которая ускоряет бизнес с помощью автоматизации Data Science и Engineering Simulation.
Читать полностью »
Применение FPGA для расчета деполимеризации микротрубочки методом броуновской динамики
2016-11-21 в 13:19, admin, рубрики: fpga, gpgpu, HLS, HPC, высокая производительность, параллельное программированиеВсе готово, чтобы рассказать Хабр аудитории о применении FPGA в сфере научных высокопроизводительных вычислений. И о том, как на данной задаче надо удалось значительно обскакать GPU (Nvidia K40) не только в метрике производительность на ватт, но и просто с точки зрения скорости вычисления. В качестве FPGA платформы использовался кристалл Xilinx Virtex-7 2000t, подключенный по PCIe к хост компьютеру. Для создания аппаратного вычислительного ядра использовался язык C++ (Vivado HLS).
Под катом текст нашей оригинальной статьи. Там, как обычно бывает, сначала идет долгое описание зачем это все надо и модели, если нет желания это читать, то можно переходить сразу к реализации, а модель посмотреть потом при необходимости. С другой стороны без хотя бы беглого ознакомления с моделью читатель не сможет получить впечатление о том, какие сложные вычисления можно реализовать на FPGA )
Berkeley Unified Parallel C (UPC). Установка в среде Windows и Linux
2016-11-14 в 6:28, admin, рубрики: Berkeley Unified Parallel C, C, UPC, инструкция, параллельное программирование, сборка, метки: Berkeley Unified Parallel C, UPCUnified Parallel C (UPC) — это расширение языка C, разработанное для высокопроизводительных вычислений на крупномасштабных параллельных машинах. Язык представляет единую программную модель для систем с общей и разделенной памятью. Количество параллелизма фиксируется на старте программы, обычно с одним потоком на ядро процессора.
» Официальный сайт UPC
» Официальный сайт Berkeley UPC
В своё время возникли определенные трудности с разворачиванием UPC и отсутствием каких-либо подсказок по первым шагам ни в русскоязычном, ни в англоязычном сегменте интернета, кроме официальной инструкции INSTALL.TXT, которую пришлось переваривать.
Чтобы сей опыт не пропал даром, я решил написать статью по установке UPC в различных средах.
Читать полностью »
Хардвер вторгается в софтвер на московской конференции SECR
2016-11-02 в 16:02, admin, рубрики: fpga, imagination technologies, mips, rtos осрв микроконтроллеры, Анализ и проектирование систем, исп ран, нииси ран, параллельное программирование, программирование микроконтроллеров, тестирование, метки: rtos осрв микроконтроллерыТрадиционно московская конференция CEE-SECR (Central & Eastern European Software Engineering Conference in Russia) была про софтвер, но в этом году ее организаторы решили поэкспериментировать и впустить темных демонов хардвера. Причем не из чего-то народного типа Ардуино, а из уровней посуровее: микроархитектуры микропроцессоров, прототипирования систем на кристалле с помощью микросхем ПЛИС/FPGA, и автоматической генерации тестов для процессоров во время их разработки. Чтобы привязать данный материал к чему-то знакомому для программистов, в хардверной теме возникли приложения встроенных процессоров для интернета вещей, связь лицензируемых микропроцессорных ядер с российскими микропроцессорными проектами, обучение хардверу в российских университетах, а также российские встроенные операционные системы реального времени для тех применений, куда нельзя впускать длинный нос американского Госдепа.
Можно сказать, что хардверная тема на SECR-е удалась: вся комбинация докладов была сбалансированна и покрывала тему с разных сторон; людей в зале было не то что особенно много, но выше среднего; возникли интересные споры о достоинствах и недостатках открытых процессорных ядер супротив частично открытых, но шире используемых в промышленности.
Divide&Conquer над алгоритмом Штрассена
2016-10-21 в 8:28, admin, рубрики: algorithms, fork/join framework, java, matrix multiplication, Алгоритмы, параллельное программирование, метки: matrix multiplication
Привет друзья! Будучи студентами одного небезызвестного образовательного проекта, мы с bo_0m, после вводной лекции по курсу Углубленное программирование на Java, получили свое первое домашнее задание. Необходимо было реализовать программу, которая бы перемножала матрицы. И всё бы ничего, да так совпало, что на следующей неделе должна была состояться конференция Joker, и наш преподаватель решил отменить по такому случаю занятие, подарив нам несколько часов свободного пятничного вечера. Не пропадать же времени зря! Раз никто не торопит, то можно подойти к делу творчески.
Welcome, under the hood ↓
Читать полностью »
Логика сознания. Часть 8. Пространственные карты коры мозга
2016-10-15 в 13:38, admin, рубрики: Алгоритмы, биология, искусственный интеллект, машинное обучение, нейрон, нейронные сети, параллельное программирование, Программирование, смысл, сознаниеДля любой модели, которая претендует на объяснение работы мозга, важна ее «работоспособность» и согласованность с экспериментальными данными. Например, традиционные нейронные сети обладают определенной работоспособностью, но слабой согласованностью. То есть, они решают некоторые задачи, которые решает реальный мозг, при этом их структура и поведение очень слабо похожи на структуру коры и поведение биологических нейронов. В этой части пойдет разговор о согласованности той пространственной организации, что возникает в предлагаемой модели, и пространственной организации, свойственной реальной коре.
В свое время Вернон Маунткасл выдвинул гипотезу, что для мозга кортикальная колонка – это основная структурная единица переработки информации. В свете описываемой модели можно конкретизировать функции кортикальных миниколонок, механизмы их работы и принципы взаимодействия.
В предлагаемой модели мы исходим из того, что мозг оперирует информацией, которая состоит из дискретных понятий. Каждому понятию соответствует волна с определенным уникальным внутренним узором. Носителями волн, предположительно, являются дендритные сегменты. По узорам, которые создают информационные волны, распространяясь по какой-либо зоне коры, миниколонки этой зоны получает информационное описание происходящего. Одна и та же информация поступает в каждую миниколонку.Читать полностью »
Создание разделяемого хранилища на базе CEPH RBD и GFS2
2016-10-14 в 9:33, admin, рубрики: big data, ceph, gfs2, HPC, lustrefs, nfs, open source, openstack, storage, Блог компании HPC HUB, высокая производительность, параллельное программированиеБольшинство ПО кластерных систем предполагает наличие файловой системы доступной со всех узлов кластера. Эта файловая система используется для хранения ПО, данных, для организации работы некоторых кластерных подсистем и т.д. Требования на производительность такой FS могут сильно отличаться для разных задач, однако, чем она выше, тем считается, что кластер более устойчив и универсален. NFS сервер на мастер-узле является минимальным вариантом такой FS. Для больших кластеров NFS дополняется развертыванием LustreFS — высокопроизводительной специализированной распределенной файловой системы, использующей несколько серверов в качестве хранилища файлов и несколько метаинформационных серверов. Однако такая конфигурация обладает рядом свойств, которые сильно затрудняют работу с ней в случае, когда клиенты используют независимые виртуализированные кластера. В системе HPC HUB vSC для создания разделяемой FS используется широко известное решение CEPH и файловая система GFS2.
Читать полностью »