Pull to refresh
  • by relevance
  • by date
  • by rating

вот тебе бабушка и plan9, prolog и haskell.

Lumber room
Хм. Изобретал, писал статью, анализировал, и вот доанализировался. Выходит что на масштабах расспараллеливания, более крупных, чем автоматический внутри процессора, самый удобный метод описания взаимосвязи между параллельными компонентами программы — это файлы, хитрые, конечно, больше похожие на память, но файлы. При этом все попытки изобрести суперпупергипер систему для распараллеливания сводятся к созданию простой и эффективной распределённой файловой системы, не привязанной к дискам, конечно (привет Робу Пайку и Plan9). Но что самое занятное, всё это очень тесно связано с функциональным программированием и математикологическими предложениями Хорна. Можно на всё и так смотреть. Хых. Может быть, кину сюда статью, если условия публикации и карма позволят. Надо ещё попробовать в png выкладывать архивы: ) Руки всё не доходят.
Total votes 11: ↑6 and ↓5 +1
Views 1K
Comments 9

История двух нитей

Website development *
На собеседовании в ИТ-компании было предложено ответить на следующий вопрос.

Задача. Дано такой код:

		static int counter = 0;

		void worker()
		{
			for (int i = 1; i <= 10; i++)
				counter++;
		}


Процедуру worker() запускают из двух нитей. Какое значение будет содержать переменная counter по завершении работы обеих нитей и почему?

Немного теории. Нити — это параллельно-исполняемые задачи в пределах одного процесса. Основное различие между процессами и нитями такое, что все нити одного процесса работают в общем адресном пространстве своего процесса.

Я не называю нити потоками, что бы не путать потоки выполнения (thread) и потоки данных (stream).

Читать дальше →
Total votes 88: ↑78 and ↓10 +68
Views 2.2K
Comments 69

Знакомство с уровнями распараллеливания

Intel corporate blog
image
Распараллелить решение задачи можно на нескольких уровнях. Между этими уровнями нет четкой границы и конкретную технологию распараллеливания, бывает сложно отнести к одному из них. Приведенное здесь деление условно и служит, чтобы продемонстрировать разнообразие подходов к задаче распараллеливания.
Читать дальше →
Total votes 63: ↑61 and ↓2 +59
Views 33K
Comments 26

5 вещей, которых вы не знали о многопоточности

Java *
Translation
Хоть от многопоточности и библиотек, которые её поддерживают, отказываются немногие Java-программисты, но тех, кто нашёл время изучить вопрос в глубину ещё меньше. Вместо этого мы узнаём о потоках только столько, сколько нам требуется для конкретной задачи, добавляя новые приёмы в свой инструментарий лишь тогда, когда это необходимо. Так можно создавать и запускать достойные приложения, но можно делать и лучше. Понимание особенностей компилятора и виртуальной машины Java поможет вам писать более эффективный, производительный код.

В этом выпуске серии «5 вещей …», я представлю некоторые из тонких аспектов многопоточного программирования, в том числе synchronized-методы, volatile переменные и атомарные классы. Речь пойдет в особенности о том, как некоторые из этих конструкций взаимодействуют с JVM и Java-компилятором, и как различные взаимодействия могут повлиять на производительность приложений.
Читать дальше →
Total votes 86: ↑77 and ↓9 +68
Views 270K
Comments 40

Разработчики Scala выиграли грант Евросоюза

Scala *
Скоро создатель Scala Мартин Одерский (Martin Odersky) сможет удвоить численность своей группы разработчиков, сказано в официальном блоге. Команда Scala, которая базируется в EPFL (Федеральная политехническая школа Лозанны), в ближайшие пять лет получит 2,3 млн евро финансирования от Европейского исследовательского совета. Им удалось выиграть пятилетний грант в рамках конкурса «Popular Parallel Programming». Таким образом, Scala обзавелась надёжным источником финансирования на ближайшие годы.
Читать дальше →
Total votes 53: ↑44 and ↓9 +35
Views 1.4K
Comments 41

Поддержка GPU в математическом пакете MATLAB

High performance *Matlab *
За последние год-полтора создание кластеров и суперкомпьютеров на GPU стало новым трендом для высокопроизводительных систем. Это вполне имеет смысл, потому что графические процессоры прекрасно поддерживают параллельную работу и на некоторых задачах обладают производительностью гораздо выше, чем у бюджетных CPU.

В этом смысле вполне логичной выглядит новость, что в пакете программ математического моделирования MATLAB версии 2010b появилась нативная поддержка Nvidia CUDA (версия Compute Capability 1.3 или выше). Она включена в набор инструментов Parallel Computing Toolbox. Теперь распараллеливание команд осуществляется прямо из MATLAB и не нужно переписывать код на C++ или Fortran специально для CUDA.
Читать дальше →
Total votes 29: ↑26 and ↓3 +23
Views 13K
Comments 27

Процессор, оптимизированный для функционального программирования

Computer hardware
Интересный концепт разработали инженеры EPRSC (Совет по физическим и техническим наукам Великобритании). Это машина Reduceron, специально оптимизированная для функционального программирования, то есть для языков программирования вроде XQuery, Scala, Haskell, LISP и F#.

В данной версии Reduceron реализован на программируемой микросхеме типа FPGA с тактовой частотой 96 МГц, при этом на специальных задачах он характеризуется высоким параллелизмом и показывает производительность 25% от Core 2 Duo с частотой 3 ГГц, тогда как в обычных процедурных задачах Core 2 Duo на порядок быстрее FPGA. Если сравнить с Pentium 4 2,8 ГГц, то код Haskell, например, быстрее выполняется на Reduceron.

Функциональное программирование — это парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних, без явного хранения состояния программы. Оно противопоставляется императивному (процедурному) программированию, которое описывает процесс вычислений как последовательность изменения состояний и оперирует переменными.

Кто знает, может быть процессоры вроде Reduceron можно ставить в ПК в качестве вспомогательных модулей, как раньше ставили арифметические сопроцессоры?
Total votes 69: ↑50 and ↓19 +31
Views 2.2K
Comments 43

Конкурентный доступ к реляционным базам данных

Programming *
Sandbox
СхемаВопросы параллелизма в компьютерных вычислениях очень сложны! Причинами большой сложности являются огромное количество деталей, которые нужно учитывать при разработке параллельных программ. В программирование и без того существует большое количество деталей, которые создают почву для ошибок, параллелизм же, добавляет ещё.

Вопросы конкурентного доступа к реляционным базам данных встают практически перед любыми разработчиками прикладного программного обеспечения и не только перед ними. Результатом такой востребованности этой области является наличие большого количества созданных архитектурных паттернов. Это позволяет успешно справляться с большой сложностью разработки таких программ. Ниже пойдёт речь о таких рецептах, а также механизмах на которых базируется их реализация. Повествование будет иллюстрироваться примерами кода на Java, но большинство материала не привязано к языку. Цель статьи — описать проблемы конкурентного доступа к реляционным базам данных, в качестве введения в предмет, а не полноценного охвата темы.
Читать дальше →
Total votes 60: ↑58 and ↓2 +56
Views 43K
Comments 23

Особенности паттернов параллельного программирования для бизнес приложений [PoEAA]

Programming *
Параллельное программирование давно уже перестало быть уделом матёрых гуру. Трудно представить современное приложение, реализация которого игнорировала бы этот вопрос. Аналогично трудно представить прикладного программиста, который бы не держал на вооружении паттернов корпоративных приложений от Фаулера с компанией. Собственно об особенностях присущих этим паттернам и пойдёт речь в этом посте. Материал представленный далее почти не коррелирует с технологиями реализации, поэтому может быть интересен любым прикладным программистам не смотря на то, что примеры базируются на Java и PostgreSQL. И ещё одно замечание, чтобы не вносить путаницу с названиями паттернов, я буду использовать их оригинальные названия на английском языке.
Читать дальше →
Total votes 25: ↑25 and ↓0 +25
Views 8.2K
Comments 3

Многоядерность — рентабельный выбор для медицинского оборудования?

High performance *
Translation
Возможно, даже относительно простые устройства в конечном итоге потребуют многоядерности?Многоядерные процессоры и программное обеспечение, необходимое для работы процессоров, может увеличить сложность любой встраиваемой системы. Некоторые отрасли промышленности, в частности, сетевые технологии, уже давно используется многоядерность. Но на рынке медицинских устройств несколько иная ситуация.

И нетрудно понять, почему. Например, не будет ли такая сложность препятствовать или затягивать процесс получения аттестации FDA (Управления по контролю качества продуктов и лекарств)? Получение аттестации — весьма сложный и достаточно долгий процесс, и любая новая технология, которая может усложнить эти испытания, по праву рассматривается со скептицизмом.

И всё же, многоядерность — это путь будущего для медицинских устройств, за исключением относительно простых продуктов. Такая тенденция была и на других рынках, в том числе и автомобильном. Рынок медицинских услуг, вероятно, последуют этому примеру.

Стоит ли беспокоится разработчикам медицинского оборудования?
Читать дальше →
Total votes 7: ↑3 and ↓4 -1
Views 639
Comments 0

Когда использовать Parallel.ForEach, а когда PLINQ

.NET *
Translation

Введение


Обычно, при оптимизации программы для многоядерных компьютеров первым шагом является выяснение возможности разделения алгоритма на части, выполняющиеся параллельно. Если для решения задачи необходимо параллельно обрабатывать отдельные элементы из большого набора данных, то первыми кандидатами станут новые возможности параллельности в .NET Framework 4: Parallel.ForEach и Parallel LINQ (PLINQ)

Parallel.ForEach


Класс Parallel содержит метод ForEach, представляющий собой многопоточную версию обычного цикла foreach в C#. Подобно обычному foreach, Parallel.ForEach выполняет итерации над перечислимыми данными (enumerable), но с использованием множества потоков. Одна из более часто используемых перегрузок Parallel.ForEach выглядит следующим образом:

public static ParallelLoopResult ForEach<TSource>(
			 IEnumerable<TSource> source,
			 Action<TSource> body)

Ienumerable указывает на последовательность, по которой нужно выполнить итерации, а Action body задает делегат, вызываемый для каждого элемента. Полный список перегрузок Parallel.ForEach можно найти здесь.

PLINQ


Родственный с Parallel.ForEach PLINQ представляет собой модель программирования для паралелльных операций над данными. Пользователь определяет операцию из стандартного набора операторов, включающих в себя проекции, фильтры, агрегирование и т.д. Подобно Parallel.ForEach PLINQ достигает параллельности, разбивая входную последовательность на части и обрабатывая элементы в разных потоках.
В статье выделяются различия между этими двумя подходами к параллельности. Разбираются сценарии использования, в которых лучше всего использовать Parallel.ForEach вместо PLINQ и наоборот.

Выполнение независимых операций


Читать дальше →
Total votes 79: ↑73 and ↓6 +67
Views 63K
Comments 9

Библиотека OmniThreadLibrary — простая многопоточность в среде Delphi

Programming *Delphi *Algorithms *
Написать интересную статью на техническую тему очень сложно. Приходится балансировать между тем, чтобы не скатиться в технические дебри и тем, чтобы совсем ничего не сказать. Сегодня я попробую в общих словах (без деталей) поговорить о том, как обстоят дела с разработкой многопоточных desktop-приложений в не столь популярной на сегодняшний день, но наверняка знакомой многим российским разработчикам среде Delphi. Статья ориентирована на НЕ новичков в программировании, являющихся при этом новичками в области создания многопоточных приложений.
Читать дальше →
Total votes 27: ↑24 and ↓3 +21
Views 26K
Comments 65

О суперскалярах, параллелизме и кризисе жанра

Intel corporate blog

Наверное, ни для кого из хабралюдей не будет новостью то, что основополагающие идеи и принципы, заложенные в нынешней цифровой технике и ее компонентах, родом из далекого по компьютерным меркам прошлого, а именно – из середины предыдущего века. Именно тогда были придуманы те основы, которые вот уже 50 лет с успехом разрабатывают, совершенствуют и продают крупнейшие (и не столь большие) компании сектора IT – в их строю, конечно, и Intel. Однако при всей очевидности данное положение навевает определенно пессимистический настрой: неужели все великие идеи закончились, и наше поколение обречено на мелочное ковыряние в Великом Наследии Прошлого?
Рассмотрим один конкретный и неудивительный для этого блога пример – заглянем в мысли тех, кто думает об усовершенствовании процессорных архитектур.
Читать дальше →
Total votes 44: ↑38 and ↓6 +32
Views 20K
Comments 53

Запускаем Java-программы на GPU

Java *GPGPU *Compilers *
На Github выложен исходный код компилятора Rootbeer, с помощью которого можно почти любой Java-код запустить на графическом процессоре, а также легко разделить Java-программу на фрагменты для CPU/GPU.

Компилятор опубликован под лицензией MIT, он прошёл тщательное тестирование и вполне пригоден для использования. По словам автора, это самый продвинутый транслятор байткода Java на платформу CUDA. Судя по всему, OpenCL тоже поддерживается.

Автор программы — преподаватель Сиракузского университета Фил Пратт-Желига (Phil Pratt-Szeliga).
Читать дальше →
Total votes 41: ↑39 and ↓2 +37
Views 16K
Comments 37

Введение в параллельные вычисления в R

Data Mining *Algorithms *Concurrent computing *R *
Sandbox
   Эта статья посвящена языку R. Он не так широко распространен на территории ex-USSR, как Matlab и тем более Python, но, безусловно, заслуживает внимания. Нельзя не отметить, что R — фактически стандарт для Data Science (хотя тут хорошо написано, что не R единым живут data scientists). Богатый синтаксис, совместимость с legacy кодом (что весьма важно в научных приложениях), удобная среда разработки RStudio и наличие огромного числа библиотек в CRAN делают R таковым.
Читать дальше →
Total votes 29: ↑27 and ↓2 +25
Views 16K
Comments 11

Доступен новый JIT: теперь с поддержкой SIMD

.NET *C# *Concurrent computing *
Translation

От переводчика


Лично я просто невероятно обрадовался новой возможности. Как раз не так давно одолел Pro .Net Perfomance, в которой одна из глав была посвящена параллельности, и векторизации в частности. Вывод, сделанный авторами: «К сожалению, использование векторизации возможно исключительно на С++, выполнение кода на видеокарте — возможно и средствами .Net, однако C++ AMP оставляет любые управляемые библиотеки GPGPU далеко позади, поэтому, к сожалению, в данных задачах рекомендуем использовать подключаемые C++ сборки.» Поэтому рад сообщить, что по крайней мере одна проблема решена. Что ж, приступим!

Читать дальше →
Total votes 37: ↑35 and ↓2 +33
Views 15K
Comments 10

Организация одновременного доступа к данным в облачном хранилище Microsoft Azure Storage

Microsoft corporate blog Microsoft Azure
Translation


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

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

Наиболее часто разработчики используют следующие три стратегии по управлению одновременным доступом к данным:
Читать дальше →
Total votes 18: ↑14 and ↓4 +10
Views 5.9K
Comments 0

Параллельная обработка большого селекта в нескольких сессиях

Samtrest corporate blog Oracle *Java *SQL *
Представьте: есть селект, который возвращает записи, каждую из которых нужно обработать, и то ли много записей, то ли обработка каждой записи занимает много времени, а процесс обработки одной записи не зависит от процессов других записей.
Классический пример для того, чтобы задействовать многопоточность или в случае баз данных выполнять обработку в нескольких сессиях. В Оракле для этого используется hint /*+ parallel() */ и pipelined functions. Это здорово, но если у вас Oracle standard edition(где parallel не работает) или вы хотите обработать не каждую запись по отдельности(из соображений, что лучше накопить работу, а потом в bulk, одним ударом, выполнить), а поделить весь вывод селекта на куски и каждый обработать отдельно?
Читать дальше →
Total votes 15: ↑12 and ↓3 +9
Views 16K
Comments 9

Знакомьтесь, loop fracking

Assembler *Compilers *C *
image

Целью данной работы является обозначение еще одной техники оптимизации циклов. При этом нет задачи ориентироваться на какую-либо существующую архитектуру, а, наоборот, будем стараться действовать по возможности абстрактно, опираясь преимущественно на здравый смысл.

Автор назвал эту технику “loops fracking” по аналогии с, например, “loops unrolling” или “loops nesting”. Тем более, что термин отражает смысл и не занят.
Читать дальше →
Total votes 19: ↑18 and ↓1 +17
Views 13K
Comments 29

Суперскалярный стековый процессор: скрещиваем ужа и ежа

System Analysis and Design *Assembler *Compilers *C *

В данной статье мы будем разрабатывать (программную) модель суперскалярного процессора с OOO и фронтендом стековой машины.
Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 12K
Comments 16