Как стать автором
Обновить

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

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

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

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

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

		static int counter = 0;

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


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

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

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

Читать дальше →
Всего голосов 88: ↑78 и ↓10 +68
Просмотры 2.3K
Комментарии 69

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

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

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

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

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

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

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

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

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

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

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

Компьютерное железо
Интересный концепт разработали инженеры 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 можно ставить в ПК в качестве вспомогательных модулей, как раньше ставили арифметические сопроцессоры?
Всего голосов 69: ↑50 и ↓19 +31
Просмотры 4.3K
Комментарии 43

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

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

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

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

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

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

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

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

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

Стоит ли беспокоится разработчикам медицинского оборудования?
Читать дальше →
Всего голосов 7: ↑3 и ↓4 -1
Просмотры 695
Комментарии 0

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

.NET *
Перевод

Введение


Обычно, при оптимизации программы для многоядерных компьютеров первым шагом является выяснение возможности разделения алгоритма на части, выполняющиеся параллельно. Если для решения задачи необходимо параллельно обрабатывать отдельные элементы из большого набора данных, то первыми кандидатами станут новые возможности параллельности в .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 и наоборот.

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


Читать дальше →
Всего голосов 79: ↑73 и ↓6 +67
Просмотры 68K
Комментарии 9

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

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

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

Блог компании Intel

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

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

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

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

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

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

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

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

.NET *C# *Параллельное программирование *
Перевод

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


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

Читать дальше →
Всего голосов 37: ↑35 и ↓2 +33
Просмотры 15K
Комментарии 10

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

Блог компании Microsoft Microsoft Azure *
Перевод


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

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

Наиболее часто разработчики используют следующие три стратегии по управлению одновременным доступом к данным:
Читать дальше →
Всего голосов 18: ↑14 и ↓4 +10
Просмотры 6K
Комментарии 0

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

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

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

Assembler *Компиляторы *C *
image

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

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

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

Анализ и проектирование систем *Assembler *Компиляторы *C *

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