четверг, 31 декабря 2009 г.

Facebook использует Erlang

Erlang at Facebook – интересная PDF-а на 40 страниц.

Erlang использовался для реализации части сервиса Chat в Facebook. Прототип сервиса был создан в январе 2007, затем командой из 4 человек доводился до ума до осени 2007-го. В феврале 2008 проект был запущен в тестовую эксплуатацию.

P.S. Взято тут.

вторник, 29 декабря 2009 г.

Oracle Coherence: Implement Transactions, Locks, and Concurrency

Implement Transactions, Locks, and Concurrency:

"Coherence provides several options for managing concurrent access to data.
- Explicit locking (The ConcurrentMap interface (part of the NamedCache interface) supports explicit locking operations. Many developers find this simple locking API to be the most natural approach.)
- Transactions (The TransactionMap API builds on top of the explicit locking operations to support ACID-style transactions. )
- Container Integration (For transaction management in a Java EE container, Coherence provides a JCA resource adaptor in order to allow transactions to be managed via JTA. Although Coherence does not support XA transactions at this time, it can participate in XA transactions as the last resource.)
- EntryProcessors (Coherence also supports a lock-free programming model through the EntryProcessor API. For many transaction types, this minimizes contention and latency and improves system throughput, without compromising the fault-tolerance of data operations.)
- Data Source Integration(Guidelines on maintaining caches with local (non XA) data resources.)"

On Optimistic Methods for Concurrency Control

H.T. KUNG and JOHN T. ROBINSON, On Optimistic Methods for Concurrency Control, ACM Transactions on Database Systems, Vol. 6, No. 2, June 1981.

Найдено тут = com.tangosol.util.TransactionMap. Видимо классика.

Who's Who in Distributed Caching Platforms: IBM, Microsoft and Oracle

Who's Who in Distributed Caching Platforms: IBM, Microsoft and Oracle

понедельник, 28 декабря 2009 г.

In-Memory Data Grid: Oracle Coherence

Прочитал Oracle® Coherence Getting Started Guide.

"The Oracle Coherence In-Memory Data Grid is a data management system for application objects that are shared across multiple servers, require low response time, very high throughput, predictable scalability, continuous availability and information reliability. For clarity, each of these terms and claims is explained ..."

суббота, 26 декабря 2009 г.

"Big three" classic transaction managers

From here:

"IMS is also a robust transaction manager (IMS TM, also known as IMS DC) — one of the "big three" classic transaction managers along with CICS and BEA (now Oracle) Tuxedo."

пятница, 25 декабря 2009 г.

Bio: Neal Gafter

Вот био так био:
"Neal Gafter works on .NET languages at Microsoft. He used to be a software engineer and Java evangelist at Google. Previously, at Sun Microsystems, he designed and implemented the Java language features in releases 1.4 through 5.0. and led the development of C and C++ compilers at Sun Microsystems, Microtec Research, and Texas Instruments. He holds a Ph.D. in CS from the University of Rochester."

XQuery, XPath, XSLT and multicore

from here:

"InfoQ: What advantages do languages like XSLT 2 and XQuery 1 have over using a Java DOM model for working with XML in multi-core or Cloud environments?
...
First declarative programming asks the user what they want to do. This is as opposed to imperative programming (ex: Java code working with the DOM or JAXB APIs) which asks the user how they want to do what they want to do. Declarative programming leads to smaller, easier to maintain code that adapts faster to change. It also allows a user to express to the XML runtime what they are interested in or how they want to query or transform data in a way that allows the runtime to optimize in ways not possible when the user tells the runtime exactly how to execute. This difference is very important in multi-core and Cloud as you can imagine optimizations that not only recognize patterns that can be better executed differently on a single CPU, but also executed better on multiple CPUs or across virtual environments. Also, as XSLT and XQuery are functional and side-effect free, you can execute such optimizations with complete safety – something that isn't possible in imperative languages using typical programming APIs. Also, I personally believe, long term, higher level declarative languages will have a better fit with the cloud as they will be more portable than lower level languages that assume a specific runtime."

воскресенье, 20 декабря 2009 г.

Unfair lock can produce VERY ASYMMETRICAL results

Ceki Gülcü (author of Log4j) пишет в своем блоге про крайне неравномерные (максимально неравномерные) результаты при использовании synchronized:
"
runnable[0]: counter=1002
runnable[1]: counter=0
runnable[2]: counter=0
runnable[3]: counter=0
runnable[4]: counter=0
"
При том, что ожидалось "примерно по 200".

Это к тому, что
1) симметричные уравнения и симметричные граничные условия могут давать асимметричные решения;
2) unfair примитивы синхронизации МОГУТ, но НЕ ОБЯЗАНЫ обеспечивать "статистическую честность".

P.S. Кстати, всегда интересовало что говорят заказчику, если в проекте используются unfair примитивы синхронизации, которые могут привести к такому поведению (фактически livelock для некоторых потоков), но во всех тестах ведут себя "хорошо". Что будет если в какой-то момент времени заказчик потеряет деньги из-за таких вот особенностей поведения ПО? Т.е. считать ли проект "выполненным/готовым"?

Приостановка семинаров

Господа и дамы, в связи с началом сессий в харьковских ВУЗах предлагаю приостановить семинары на некоторое время (3-4 недели).

P.S. Отпишитесь, пожалуйста, в камментах у кого и когда начинается весенний семестр.

четверг, 17 декабря 2009 г.

Как finalize() может быть причиной OutOfMemoryError

ImageInputStreamImpl still uses a finalize() which causes java.lang.OutOfMemoryError.

Это к тому, что объекты классов с переопределенным finalize() убираются заметно "медленнее" коллектором.

Весенний семестр

Господа, предварительные планы на весенний семестр включают материалы по:
1) Transactional Memory (на примере dstm2);
2) Actor-based concurrency model (на примере Scala).
---
Для TM и Actor будем рассматривать те реализации, которые привязаны к Java/JVM. Что бы полученный опыт легко можно было использовать при разработке j2ee-приложений.

P.S. Это к тому, что сейчас этих материалов прибавится на блоге :)

Отмена семинара

Господа и Дамы, в связи с тем, что я приболел, семинар в Чт(17 дек) отменяется.

среда, 16 декабря 2009 г.

Sun Tech Reperts for 1992-2009

Sun Tech Reperts for 1992-2009.

Java SE HotSpot Publications

Java SE HotSpot Publications. HotSpot related technology has been featured in the literature, at conferences and in articles. Below is a listing of some of these references:

* Oct 2006. Ken Russell and Dave Detlefs, Eliminating Synchronization-Related Atomic Operation with Biased Locking and Bulk Rebiasing. Paper from OOPSLA 2006. Slides.

* Sep 2006. Christian Wimmer and Hanspeter Mossenbock. Automatic Object Colocation Based on Read Barriers. Paper from Joint Modular Languages Conference 2006.

* May 2006. Steve Goldman, Dave Detlefs, Steve Dever and Ken Russell, New Compiler Optimizations in the Java HotSpot Virtual Machine. Talk from JavaOne 2006.

The Sun Labs JavaTM Technology Research Group

В составе SUN обнаружена The Sun Labs JavaTM Technology Research Group.

MISSION

The Sun Labs JavaTM Technology Research Group (formerly Java Topics) is working on advanced technologies that may be useful for the Java platform nine months and beyond. We are currently focused on high performance implementations of the Java virtual machine.

Parallel Garbage Collection for Shared Memory Multiprocessors

Parallel Garbage Collection for Shared Memory Multiprocessors from Christine H. Flood and David Detlefs, Sun Microsystems Laboratories; Nir Shavit, Tel-Aviv University; and Xiolan Zhang, Harvard University. Описывает реальные эксперименты с GC с Java, но я пока не выяснил эти ли продукты в JDK.

Abstract
We present a multiprocessor "stop-the-world" garbage collection framework that provides multiple forms of load balancing. Our parallel collectors use this framework to balance the work of root scanning, using static overpartitioning, and also to balance the work of tracing the object graph, using a form of dynamic load balancing called work stealing. We describe two collectors written using this framework: pSemispaces, a parallel semispace collector, and pMarkcompact, a parallel markcompact collector.

Presenting the Permanent Generation

Presenting the Permanent Generation from Jon Masamitsu's Weblog.

понедельник, 14 декабря 2009 г.

How Hotspot Decides to Clear SoftReferences

How Hotspot Decides to Clear SoftReferences - some info from Jeremy Manson about SoftReference clearing algorithm.

Some interesting info for HotSpot 6 = "SoftReferences will always be kept for at least one GC after their last access".

Intel: Technical Books for Multi-Core Software Developers

Technical Books for Multi-Core Software Developers = 13 (and yet some in comments) books from Intel point of view.

пятница, 11 декабря 2009 г.

[Personality]: Jon Masamitsu (GC)

Блог Jon Masamitsu содержит просто огромное количество информации по GC в HotSpot.

Например тут он рассказывает про допустимые комбинации коллекторов в Young и Old поколениях:
"
- UseSerialGC is "Serial" + "Serial Old"
- UseParNewGC is "ParNew" + "Serial Old"
- UseConcMarkSweepGC is "ParNew" + "CMS" + "Serial Old". "CMS" is used most of the time to collect the tenured generation. "Serial Old" is used when a concurrent mode failure occurs.
- UseParallelGC is "Parallel Scavenge" + "Serial Old"
- UseParallelOldGC is "Parallel Scavenge" + "Parallel Old""

Jon Masamitsu about TLAB

TLAB == Thread Local Allocation Buffers.
В блоге Jon Masamitsu рассказано как HotSpot 5/6 работает с TLAB.
Также как ими можно управлять/мониторить:
-XX:UseTLAB
-XX:TLABSize
-XX:ResizeTLAB
-XX:MinTLABSize
-XX:+PrintTLAB

Опции GC

Тут документ, где собрано вместе несколько десятков опций GC.

NUMA, Solaris and memory allocation

Help for the NUMA Weary - Solaris старается выделять память "поближе" к процессору.

четверг, 10 декабря 2009 г.

Implementing Fast Java Monitors with Relaxed-Locks

Dave Dice article "Implementing Fast Java Monitors with Relaxed-Locks".
Как я понимаю, именно так были реализованы мониторы в Sun JVM 1.2.

понедельник, 7 декабря 2009 г.

Biased Locking

Техника, называемая Biased Locking была добавлена в Java 6 и состоит в том, что для несовревновательных повторных вызовов synchronized{} обходится очень дешево. Кажется, вот это - "Eliminating Synchronization-Related Atomic Operations with Biased Locking and Bulk Rebiasing" ключевая статья.

P.S. Взято отсюда - "Java SE 6 Performance White Paper".

P.P.S. Во многом благодаря biased locking (при использовании монитора только одним потоком не используется мьютекс операционной системы, а !максимум! одна атомарная инструкция) synchronized в яве может работать быстрее мьютекса операционной системы - "...the synchronization primitives in modern JVMs provide latency and throughput performance that is typically better than that of the native pthreads_mutex constructs..."

пятница, 4 декабря 2009 г.

Java EE 6 Virtual Conference

Attend the Virtual Conference on December 15, 2009 and get an exclusive look into the Java Platform, Enterprise Edition 6 (Java EE 6) and Sun GlassFish Enterprise Server v3, the first Java EE 6 platform compatible application server.

Date:
Thursday, December 15, 2009
Time:
Time: 8am - 5pm PST - 15 unique sessions (attend 1 or more, as you wish!)

четверг, 3 декабря 2009 г.

Собеседование по Java Concurrency

Это перепост моего поста с rsdn.ru.
-------------------------------------
В последнее время во многих вакансиях на Java Developer появилось требование знания Java Concurrency/Multithreading. В ответ многие разработчики тут же добавили такую строчку себе в резюме. Я как человек, который проводит собеседования, хотел бы развеять некоторые недоразумения относительно этого термина.
Все проекты связанные с многопоточностью я бы разделил на 3 класса: использующие многопоточность, основанные на многопоточности и те, которые и есть сама многопоточность. К первому классу("использующие") я бы отнес проекты, которые предполагают работу в многопоточной среде. Пример: есть класс BlaBlaBlaFactory, в документации необходимо указать, может ли эта фабрика использоваться одновременно несколькими потоками или нет. Если нет, то сделать ее потокобезопасной с помощью ReentrantLock. Ко второму классу ("основанные на") я бы отнес проекты, в которых использование нескольких потоков является одним из ключевых моментов. Пример: многопоточный кодек видео формата H.264. К третьему классу ("являются ей") я бы отнес проекты, в корне что-то меняющие в отношении потоков. Пример: написание runtime-среды для языка Scala (на Java) с реализацией легковесных потоков и своеобразной моделью памяти.

среда, 2 декабря 2009 г.

Java Platform Security

Безопастность в Java состоит из двух частей:
1) Java Platform Security - то что называется sandbox, обеспечение на уровне JVM;
2) множенство API для криптографии, SSL, HTTPS, Kerberos, etc.

Для ознакомления с 1)Java Platform Security рекомендуется прочитать главы 7 и 8 из "Enterprise Java 2 Security: Building Secure and Robust J2EE Applications".

Chapter 7. J2SE Security Fundamentals
7.1 Access to Classes, Interfaces, Fields, and Methods
7.2 Class Loaders
7.3 The Class File Verifier
7.4 The Security Manager
7.5 Interdependence of the Three Java Security Legs
7.6 Summary
Chapter 8. The Java 2 Permission Model
8.1 Overview of the Java 2 Access-Control Model
8.2 Java Permissions
8.3 Java Security Policy
8.4 The Concept of CodeSource
8.5 ProtectionDomains
8.6 The Basic Java 2 Access-Control Model
8.7 Privileged Java 2 Code
8.8 ProtectionDomain Inheritance
8.9 Performance Issues in the Java 2 Access-Control Model
8.10 Summary

P.S. Книга уже есть на concurrentlib.livejournal.com.

Manage SoftReference time-to-live

Оказывается временем жизни SoftReference возможно управлять.
Для этого необходимо использовать опцию HotSpot JVM - -XX:SoftRefLRUPolicyMSPerMB.

Best Practices for Large-Scale Web Sites -- Lessons from eBay

Best Practices for Large-Scale Web Sites -- Lessons from eBay.

"There may be no better example of a company who has met the demands of Internet scale than eBay, with 88.300.000 active users worldwide, over 2*10^9 page views, and 48*10^9 SQL executions every day. And there may be no one more qualified to discuss those demands than Randy Shoup, architect of the eBay web site and primary architect of eBay's search infrastructure."
"
* Partition everything.
* Asynchrony everywhere.
* Automate everything.
* Remember, everything fails.
* Embrace inconsistency."

"The system generates over 2 TB of log messages per day."

"Like any large, scaled Internet site, eBay has found itself bound by the CAP theorem, first proposed by Eric Brewer in July 2000. Briefly stated, the theorem shows that any shared-data system can have at most two of the following properties:
* Consistency: All clients see the same data, even in the presence of updates.
* Availability: All clients will get a response, even in the presence of failures.
* Partition-tolerance: The system properties hold even when the network is partitioned, as by a network hardware failure.
The trade-off among these three properties is fundamental to all distributed systems."

вторник, 1 декабря 2009 г.

ROCK Hardware Transactional memory - Sun technical report

ROCK Hardware Transactional memory - Sun technical report
Abstract
We report on our experience with the hardware transactional memory (HTM) feature of two revisions of a prototype multicore processor. Our experience includes a number of promising results using HTM to improve performance in a variety of contexts, and also identifies some ways in which the feature could be improved to make it even better. We give detailed accounts of our experiences, sharing techniques we used to achieve the results we have, as well as describing challenges we faced in doing so. This technical report expands on our ASPLOS paper [9], providing more detail and reporting on additional work conducted since that paper was written.

"...In Sections 4 through 10, we present results from our experiments using HTM in a number of contexts: We use HTM to implement simple operations such as incrementing a counter (in Section 4) and a double compare-and-swap (DCAS). We then use the DCAS to reimplement some components of the JavaTM concurrency libraries (see Section 5). Next, we experiment with transactional hash tables (in Section 6) and red-black trees (in Section 7)..."

P.S. From Davide Dice blog.

Множество материала по Scala

На главном сайте Scala обнаружено множество материала - вот. Включая даже, скажем, PhD Thesis.

пятница, 27 ноября 2009 г.

Boxing is an enemy of concurrency

Пост Дуга Ли о вреде boxing'а:
http://mail.openjdk.java.net/pipermail/closures-dev/2009-November/000342.html

Последний абзац:
I really,
really don't want to do is release an overhyped
facility for parallel programming that doesn't
actually speed up anyone's applications.
... про STM что-ли :)

четверг, 26 ноября 2009 г.

Докладываю на Coffee’n'Code #3

Докладываю на Coffee’n'Code #3 - «Многопоточность в Java».

Java SE 6 Performance White Paper

Java SE 6 Performance White Paper.

Особенно обратите внимание на
2.1.1 Biased Locking
2.1.2 Lock Coarsening
2.1.3 Adaptive Spinning

For more on Biased Locking, please refer to the ACM OOPSLA 2006 paper by Kenneth Russell and David Detlefs: "Eliminating Synchronization-Related Atomic Operations with Biased Locking and Bulk Rebiasing".

вторник, 24 ноября 2009 г.

Java Core

По моим представлениям Java Core состоит из:
1) синтаксис
2) java.lang.*, java.util.*, java.io.*
3) работа с исключениями
4) Java Collection Framework
5) начальные знания по многопоточности

Для детального изучения я рекомендую:
а) "Effective Java (2nd Edition)" by Joshua Bloch
б) "Java Puzzlers: Traps, Pitfalls, and Corner Cases" by Joshua Bloch and Neal Gafter
в) "Java Generics and Collections"
г) "Java I/O"
д) по многопоточке я ранее публиковал, там было пару вводных книг (Java Thread Programming или Java Threads)

P.S. Обновилось concurrentlib.livejournal.com.

Sun Certification: SCJP

В Java главными и, пожалуй, единственными признаваемыми Серьезными Конторами сертификатами являются сертификаты от Sun.
Третий уровень: SCEA
Второй уровень: SCJD, SCWCD, SCBCD, SCDJWS, SCMAD
Первый уровень: SCJP

Экзамены следующего уровня можно сдавать только сдав хотя бы один из экзаменов предидущего уровня.

Сама подготовка к SCJP позволяет не просто узнать действительно много нового из java core, но и досконально это самое коре изучить.

Для подготовки к сдаче SCJP рекомендую:
1) кроме чтения специальной литературы по подготовке именно к SCJP;
2) отличная статья Дениса Жданова на rsdn.ru "Подготовка к Sun Certified Java Programmer(SCJP) exam";
3) JavaRanch Rule Round-up Game;
4) The new and improved JavaRanch Rules Round-up Game;
5) SCJP 1.6 Mock Exam Practice Questions.

P.S. По моим личным впечатлением ничего сложнее SCJP по Core Java я не встречал (ни в других тестах, ни на собеседованиях), в Украине сдают в Киеве, вроди есть в Харькове (в ХИРЭ). Стоит порядка 1500-2000гр. При поступлении на работу стоит обговорить с работодателем возможность оплаты экзаменов (многие конторы имеют такую опцию).

понедельник, 23 ноября 2009 г.

PJP: Parallel/Concurrent GC

Небольшое замечание по сложившейся терминологии для описания типа GC.
Parallel - значит представляет собой несколько ПАРАЛЛЕЛЬНЫХ потоков. Т.е. сам уборщик мусора состоит из нескольких потоков, которые все вместе лопатят кучу.
Concurrent - значит работает ОДНОВРЕМЕННО с потоками пользователя. Т.е. не требуется делать паузу всей системы(stop-the-world).

Как видно, понятия совершенно независимые. Т.е. каждая конкретная реализация уборщика может обладать этими свойствами независимо.

Некоторые заметки о прохождении интервью при устройстве на работу в Праге

Некоторые заметки о прохождении интервью при устройстве на работу в Праге.
"... Устраивался я на должность Ведущего Разработчика J2EE."
"Сениор — 50000-80000крон (1800-3000евро), Архитект или Тим Лидер около 85000крон (3200евро)."
"1.Чем отличается абстрактный класс от интерфейса? (Да, такие вопросы тоже задают)
2.Для чего в классе Object есть метод hashCode() и как он связан с методом equals()?
3.Вы строите кэш. Вам нужно удалять из кэша некоторые объекты при каждой сборке мусора. Как это сделать?

PJP: Доктор, холодеют ноги ...

Возможно проектировать системы, которые отходят в мир иной по частям. В таком случае связи между подсистемами должны осуществляться не на основе обычных ссылок, а на основе java.lang.ref.Reference, точнее ее наследников
- java.lang.ref.SoftReference
- java.lang.ref.WeakReference
- java.lang.ref.PhantomReference
из пакета java.lang.ref.
Все это добро в момент перехода к загробной жизни помещается в ReferenceQueue.

PJP: Garbage Collector (GC)

После смерти Одиссей, как один из величайших людей, прежде чем выпить воды из Реки Забвения и забыть все воспоминания (кануть в Лету) для возвращения на Землю в новом обличии имел право выбрать кем ему быть в следующей жизни ...

Река Забвения (Лета) в Java зовется Garbage Collector. Она стирает все прежние предназначение участков ОЗУ и обновленными возвращает их к жизни.

воскресенье, 22 ноября 2009 г.

PJP: Сложные Системы и архетип Смерти

Профессионально написанная система не только хорошо работает в стандартных режимах, но также корректно переносит всякого рода переходные режимы:
- пуск
- останов
- пауза
- истощение ресурсов
- backup
- пуск после сбоя

Фактически, профессионализм высокого уровня заключается в одновременном рассмотрении проектируемых/реалируемых систем с различных сторон. Жизненный цикл - одна из таких сторон.

Далее вас ожидает несколько постов посвященных таинству Смерти в Java.

The Tale of Java Performance

The Tale of Java Performance
Abstract
The Java platform introduced Virtual Machines, JIT Compilers and Garbage Collectors to the masses and to mainstream software development. Demand and competition drove impressive improvements in the performance of Java implementations, and while the state of the art can be learned from JVM research papers and product benchmarks, we offer a “Making Of” exposing the challenges, tensions and strategies behind this history, extrapolating to similar platforms such as Microsoft .NET’s CLR.

суббота, 21 ноября 2009 г.

JPA Performance, Don't Ignore the Database

JPA Performance, Don't Ignore the Database

Locking and Concurrency in Java Persistence 2.0

Locking and Concurrency in Java Persistence 2.0

При разработке J2EE приложения встает необходимость работы с Базой.
Типичный "путь" данных: SomeMiddleware(Spring,EJBContainer(WebSphere,WebLogic))<->SomeORMFramework(Hibernate,TopLink,OpenJPA,EclipseLink)<->JDBCDriver<->TCP/IP<->RDBMS(Oracle,DB2,PostgresQL,MySql).

An Interview with Dr. Jay Hoeflinger about Automatic Parallelization

An Interview with Dr. Jay Hoeflinger about Automatic Parallelization.

Карантин окончен.

В связи с окончание карантина, семинары продолжаются в прежнем режиме:
- Пн 17.00 - "Профессиональное Java программирование"
- Чн 17.00 - "Многопоточное программирование на Java"

среда, 18 ноября 2009 г.

Пучок ссылок от remark (Дмитрий Вьюков)

Собственно пучок.
Многие я уже публиковал, но повторение не помешает :).
Материал вводного характера.

СУПЕРКОМПЬЮТЕРНЫЙ КОНСОРЦИУМ УНИВЕРСИТЕТОВ РОССИИ

Создан СУПЕРКОМПЬЮТЕРНЫЙ КОНСОРЦИУМ УНИВЕРСИТЕТОВ РОССИИ.
7 октября 2009 года состоялось годичное собрание Суперкомпьютерного консорциума университетов России.

Материалы скорее обзорного характера.
Особенно поразило:

вторник, 17 ноября 2009 г.

Список литературы от к.ф.-м.н. Карпова В.Е. (МФТИ)

Список литературы от Карпова Владимира Ефимовича, к.ф.-м.н., доцента кафедры информатики Московского физико-технического института (ГУ) со страницы Аннотации лекций выбираем Карпов В.Е. Введение в распараллеливание алгоритмов и программ. Вот оттуда список литературы:
+ Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002.
+ Гергель В.П. Теория и практика параллельных вычислений // М.: ИНТУИТ.РУ «Интернет-Университет Информационных Технологий», 2007.
+ Барский. Параллельные технологии. // М.: ИНТУИТ.РУ «Интернет-Университет Информационных Технологий», 2007.
+ Топорков В.В. Модели распределенных вычислений // М.: Физматлит, 2004
+ Миллер Р., Боксер Л. Последовательные и параллельные алгоритмы.// М:. Бином, 2006.
+ Эндрюс Г. Р. Основы многопоточного, параллельного и распределенного программирования // «Вильямс», 2003.
+ Jordan H. F., Alaghband G. Fundamentals of parallel processing // Pearson Education, 2003.
+ Quinn M. J. Designing efficient algorithms for parallel computers // McGraw-Hill Book Company, 1988.
+ Selim G. Aki The Desing and Analysis of Parallel Algorithms // Prentice Hall International, Inc., 1989.
+ http://www.ida.liu.se/~chrke/courses/APP/papers.html
+ http://www.owlnet.rice.edu/~comp422/

МФТИ: Летняя школа по высокопроизводительным вычислениям

Летняя школа по высокопроизводительным вычислениям
23 – 30 августа 2009 года в МФТИ в Долгопрудном впервые состоялась межвузовская научная молодежная школа по высокопроизводительным вычислениям в прикладном численном моделировании. Программа научной школы предоставила российским студентам, аспирантам и молодым ученым уникальную возможность интенсивной стажировки и дополнительной профессиональной и научной подготовки в сфере современных HPC технологий.

Акцент школы - практика работы на вычислительных кластерах (архитектуры Intel и NVidia).

Было около 40 участников, разбитых на две группы, по принципу двух платформ: Intel, NVDIA.
Основным отличием школы было большее погружение в проблему, в которой естественным образом появляются технологии НРС. А именно, через цепочку задача - методы - алгоритмы - архитектуры - код ... показать современные технологии в работе.

Программа школы
Аннотации лекций
Презентации лекций
Методические материалы
Бизнес презентации

OpenCL. Что это такое и зачем он нужен? (если есть CUDA)

OpenCL. Что это такое и зачем он нужен? (если есть CUDA)

NVIDIA CUDA — неграфические вычисления на графических процессорах

NVIDIA CUDA — неграфические вычисления на графических процессорах

четверг, 12 ноября 2009 г.

Медведев и суперкомпьютеры.

"13 тезисов Дмитрия Медведева
...
О суперкомпьютерах
И, наконец, пятая приоритетная задача — развитие стратегических и информационных технологий. В России должен быть в полном объеме задействован потенциал суперкомпьютеров, суперкомпьютерных систем, которые объединены высокоскоростными каналами передачи данных. С их помощью уже в пятилетней перспективе станет возможным проектирование новейших самолетов и космических аппаратов, автомобилей и ядерных реакторов. Ведь сложная техника, не прошедшая суперкомпьютерного моделирования, что называется, не положенная в цифру, через несколько лет просто не будет востребована рынком. И для завоевания здесь конкурентных позиций мы обязаны настойчиво работать.
..."

среда, 11 ноября 2009 г.

Lecture: Safe Publication

About "Safe Publication" it be the best way to read in "Java Concurrency in Practice":

3.5. Safe Publication
3.5.1. Improper Publication: When Good Objects Go Bad
3.5.2. Immutable Objects and Initialization Safety
3.5.3. Safe Publication Idioms
3.5.4. Effectively Immutable Objects
3.5.5. Mutable Objects
3.5.6. Sharing Objects Safely

Monitor classification

Monitor classification - 40-pages document.
Show 5 and more different types of monitors.
First 5-10 pages has many historic information.

Abstract
One of the most natural, elegant, and efficient mechanisms for synchronization and communication, especially for systems with sharedmemory, is the monitor. Over the past twenty years many kinds of monitors have been proposed and implemented, and many modern programming languages provide some form of monitor for concurrency control. This paper presents a taxonomy of monitors that encompasses all the extant monitors and suggests others not found in the literature or in existing programming languages. It discusses the semantics and performance of the various kinds of monitors suggested by the taxonomy, and it discusses programming techniques suitable to each.

SynchronousQueue evolution

Simply interesting info:
"In Mustang (Java 6.0), the lock-based SynchronousQueue algorithm is being replaced with a new nonblocking version. Few developers use SynchronousQueue directly, but it is used as the work queue for thread pools constructed with the Executors.newCachedThreadPool() factory. Benchmark tests comparing cached thread pool performance show that the new nonblocking synchronous queue implementation offers close to three times the speed over the current implementation. And further improvements are planned for the release following Mustang, codenamed Dolphin."

Azul vega supermachine

Azul Vega™ 3 7300 and 3300 Series.
"...with up to 864 processor cores and 768 GB of memory in a flat SMP configuration."
"...are built around the Vega 3 processor, the first 54-core chip designed and optimized for Java workloads."

And only 14U, so not very big box.

вторник, 10 ноября 2009 г.

Dr. Cliff Click: Towards a Scalable Non-Blocking Coding Style

Rapporteur at JavaOne 2008 from Dr. Cliff Click from Azul Systems one of the Best in the world specialist in Super-Scalable(768 and Up cores) Non-Blocking structures for Java.
Author of high-scale-lib (free lib at SourceForge) (lib has BitVector, HashTable and (FIFO-Queue in progress now)).

Dr. Cliff Click talk how by using FSM(Finite State Machine) and atomic-CAS create scalable non-locking structures.

"Classic reader/writer lock chokes w/ >100 CPUs
• Contention on single reader-count word limits scaling"

"• Lock-Free: Each CAS makes progress
• CAS success is local progress
• CAS failure means another CAS succeeded(global progress, local starvation)"

"JDK API mistake: witness turned into a boolean
• Hence failure-for-cause can not be distinguished from spurious-failure"

"Highly scalable (proven scalable to ~1000 CPUs)"

P.S. FSM model for verification maybe interesting for you, Igor?

воскресенье, 1 ноября 2009 г.

3 недели - карантин

Господа и Дамы, в связи с тем, что часть студентов, возможно, уедет к родителям на время карантинов в харьковских ВУЗах, объявляется 3х недельный перерыв в семинарах.

На время перерыва рекомендую Вам:
- почитать литературу с concurrentlib.livejournal.com (я туда еще добавлю книг);
- самостоятельно пописать многопоточные программки (скажем, копипастом из книг).

пятница, 30 октября 2009 г.

OpenMP Does Not Scale - Or Does It?

Getting OpenMP Up To Speed

"- I understand. You're not a Computer Scientist and just
need to get your scientific research done.
- I agree this is not a good situation, but it is all about
Darwin, you know. I'm sorry, it is a tough world out there."
:):):)

Cliff Click: Where the metal meets the JVM

Where the metal meets the JVM - very-veeery long interview with Cliff Click.

"The common hardware around today which would be multi-core X86s, has a very conservative memory model. It's much more conservative than the Java memory model. So, although the Java memory model might allow a lot more interesting threads interleavings, a lot more interesting ways in which unsynchronized globals can have their data shared between threads, the X86 memory model is much more constrictive, and so you'll get a much fewer possible interleavings and some races, some data-races will therefore be hidden, some bugs will be hidden from you on an X86 platform."

четверг, 29 октября 2009 г.

Roadrunner: 129.600 cores, 1105 TFlops

Roadrunner - supercomputer from IBM, fastest in the World for today (by version of Top500.org):
- 129.600 cores
- 1.105.000 GFlops

Tilera Talks 100-Core Processor

Tilera Talks 100-Core Processor.
Abstract
Tilera, which already has 36- and 64-core processors on the market, is announcing its third-generation products, Tile-Gx, which includes plans for a 100-core processor. The chip will appear in 2011. Tilera officials hope the high-core count in its processors will help give the company traction in a space dominated by Intel and AMD, which currently are looking at eight-core processors.

вторник, 27 октября 2009 г.

Radeon HD 5900: оружие против Fermi выйдет в конце ноября

Собственно "Radeon HD 5900: оружие против Fermi выйдет в конце ноября".
Цитаты:
"Поскольку ускорители Radeon HD 5950 и HD 5970 по сути являются сдвоенными версиями Radeon HD 5850 и HD 5870, логично предположить, что в распоряжении первого имеется 2880 универсальных потоковых процессоров, в распоряжении второго - 3200."
Похоже, Radeon-ATI-AMD пока ставят на кол-во процессоров, а не на распространение среди разработчиков (как CUDA-Fermi-nVidia). Хотя OpenCL уже поддерживают.
P.S. Ощущение, что настольные системы буквально "мгновенно" проскочат 1TFlop и приблизятся к 1PetaFlop (10^15 FLoating-point OPerations per second).
P.P.S. Ведь Radeon использует CrossFire, следовательно их можно вставлять по 4 в материнку, следовательно - !!!12.800!!! потоковых ядер в системе.


воскресенье, 25 октября 2009 г.

Example: Threads ping-pongs

В категории [Example] я буду публиковать небольшие ПОЛНОСТЬЮ ЗАКОНЧЕННЫЕ многопоточные приложения. Я их буду публиковать с импортами, так что их достаточно просто ввести в одно окно IDE и запустить. По причине "одного окна" один из классов будет public, остальные с default областью видимости. Естественно, если Вы каждый класс будете хранить в отдельном файле (не в "одном окне"), то можете все классы делать public.

Сегодняшний пример - два потока перебрасывающиеся объектом.
----------

Guava-libraries from Google

Google опубликовала часть своих библиотек Java, которые они используют в своих проектах, guava-libraries – Project Hosting on Google Code.
Там мало, всего четыре пакета:
Естественно, мой интерес был сконцентрирован вокруг com.google.common.util.concurrent. Порадовало, что там нет практически ничего кардинально нового по сравнению с java.util.concurrent. Только незначительные дополнения. Значит в java.util.concurrent есть практически все даже для разработчиков Google.

пятница, 23 октября 2009 г.

Link: What Every Programmer Should Know About Memory (114 pages)

В ссылке на PDF из поста JAOO: The Concurrency Revolution: The Hardware Story в конце документа Brian Goetz рекомендует два источника.
Вот ссылка на один из них - What Every Programmer Should Know About Memory (114 pages).

Abstract
As CPU cores become both faster and more numerous, the limiting factor for most programs is now, and will be for some time, memory access. Hardware designers have come up with ever more sophisticated memory handling and acceleration techniques–such as CPU caches–but these cannot work optimally without some help from the programmer. Unfortunately, neither the structure nor the cost of using the memory subsystem of a computer or the caches on CPUs is well understood by most programmers. This paper explains the structure of memory subsystems in use on modern commodity hardware, illustrating why CPU caches were developed, how they work, and what programs should do to achieve optimal performance by utilizing them.

JMM "casuality loops" VS софисты :)

В работах по JMM (например в этой) интенсивно используется понятие "casuality loop" (циклы причинности), мне это непроизвольно напоминает софизм Еватла :)

"У древнегреческого софиста Протагора учился софистике и в том числе судебному красноречию некий Эватл (Еватл, Эвафл; др.-греч. Εὔαθλος). По заключенному между ними договору Эватл должен был заплатить за обучение 10 тысяч драхм только в том случае, если выиграет свой первый судебный процесс. В случае проигрыша первого судебного дела он вообще не был обязан платить.

Однако, закончив обучение, Эватл не стал участвовать в судебных тяжбах. Как следствие, он считал себя свободным от уплаты за учебу. Это длилось довольно долго, терпение Протагора иссякло, и он сам подал на своего ученика в суд. Таким образом, должен был состояться первый судебный процесс Эватла.

Протагор привёл следующую аргументацию: «Каким бы ни было решение суда, Эватл должен будет заплатить. Он либо выиграет свой первый процесс, либо проиграет. Если выиграет, то заплатит по договору, если проиграет, заплатит по решению суда».

Эватл возражал: «Ни в том, ни в другом случае я не должен платить. Если я выиграю, то я не должен платить по решению суда, если проиграю, то по договору»."

Немного о транзакциях БД и уровнях их изолированности

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

Транзакция (Transaction) - некоторая последовательность действий, выполняемая над объектами БД (в первую очередь над таблицами), которая рассматривается как одно целое и поэтому либо должна быть корректно завершена (Commit), либо полностью игнорирована (Rollback).
Основные требования к транзакциям сформулировал Джим Грей. Это свойства Atomicity (Атомарность), Consistency (Согласованность) и Durability (Долговечность). Позднее к ним присоединилось свойство Isolation (Изолированность), образуя четверку свойств ACID.

среда, 21 октября 2009 г.

Kharkov Concurrency Group at Twitter now!

You can read our posts at Twitter - http://twitter.com/KhCGroup

воскресенье, 18 октября 2009 г.

Пара в Пн переносится на Вт

Господа, в Понедельник пары не будет.
Предлагаю провести ее во Вторник в 17.00.
Передайте кому возможно.

четверг, 15 октября 2009 г.

ReentrantLock vs synchronized (15 oct lecture)

Brian Goetz, "More flexible, scalable locking in JDK 5.0" (EN, RU).
- timed lock waits
- interruptible lock waits
- non-block-structured-locks
- multiple condition variables
- lock polling
- fair policy
Но учтите, это для Java 5, тут еще не ускорили synchonized (естественно - не ускорили в конктерной JVM - в Sun HotSpot JVM).

А вот для Java 6, уже ускорили synchronized (в HotSpot JVM):
Brian Goetz, "Synchronization optimization in Mustang" (EN, RU)
- lock elision (senks to escape analisys)
- lock coarsening
- adaptive spin lock (не рассказывал)

Про escape-analisys можно кратко почитать тут
Brian Goetz, "Urban performance legends, revisited" [EN, RU]

The Java Memory Model

Вот, нашёл очень полное и детальное описание модели памяти Java (Java Memory Model, JMM) с описанием целей, которые ставились при разработке, и компромиссных решений, которые приходилось принимать:
SPECIAL POPL ISSUE: The Java Memory Model

Testing Race Conditions in Java

Can you spot the bug in the following piece of Java code?


/** Maintains a list of names. */
public class NameManager {
private List names = new ArrayList();
/** Stores a new list of names. This method is threadsafe. */
public void setNames(List newNames) {
synchronized (names) {
names = new ArrayList();
for (String name : newNames) {
names.add(name);
}
}
}


Продолжение:
http://google-opensource.blogspot.com/2009/10/testing-race-conditions-in-java.html

JAOO: Data Parallel Haskell

Слайды с презентации Simon Peyton-Jones "Data Parallel Haskell" на JAOO Conference:
http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus-2009/slides/SimonPeyton-Jones_DataParallelHaskell.pdf

Target audience: Developers who want to know what is just "over the horizon" for parallel programming.

Abstract:

There are many approaches to exploiting multi-cores, but a particularly promising one is the "data-parallel" paradigm, because it combines massive parallelism (on both shared and distributed memory) with a simple, single control-flow programming model. Indeed, I think that data parallelism is the only way we will be able to exploit tens or hundreds of processors effectively.

Alas, data-parallel programming is usually restricted to "flat" data parallelism, which is good for implementers but bad for programmers. Instead, I'll describe the "nested" data parallel programming model, first developed in the 90's by Blelloch and Sabot. It is great for programmers but much harder to implement; as a result, it's virtually unknown in practice. It's really only feasible to support nested data parallelism in a purely functional language, so we are building a high-performance implementation in Haskell.

In this talk you'll learn what nested data parallelism is, why it's important, and how to use it in Haskell. Fear not: I won't assume you know any Haskell. Yet.


JAOO: The Clojure Concurrency Story

Слайды с презентации Rich Hickey "The Clojure Concurrency Story" на JAOO Conference:
http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus-2009/slides/RichHickey_TheClojureConcurrencyStory.pdf

Abstract:

All functional programming languages emphasize working with immutable data as much as possible. How can that be efficient, and what benefits does it bring? And what happens when you need state, to manage changing values over time? One method is to use mutable references with concurrency semantics, such as transactions, coupled with persistent data structures. This combination makes for easy, lock-free designs, well within the comfort zone of those used to imperative programming.

This talk discusses how immutability, state and identity are handled in the Clojure language. You'll learn details about Clojure's managed references, agents and STM.

Target audience: Developers interested in alternative approaches to concurrency.

JAOO: Actors, and the Forgotten Art of Modeling Concurrent Systems

Слайды с презентации Kresten Krab Thorup & Dave Thomas "Actors, and the Forgotten Art of Modeling Concurrent Systems" на JAOO Conference:
http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus-2009/slides/DaveThomas_and_KrestenKrabThorup_ActorsAndTheForgottenArtOfModelingConcurrentSystems.pdf

Abstract:

In current talk on programming, programming languages and concurrency (and specifically the intersection of those), much focus is on how to make programs run fast and best utilize the given hardware, multicore computers, and server farms. That is all very good, and understanding how to do that is indeed an important engineering quest. However, ...

It seems that in our haste to be fast, we have forgotten the art of modeling. Some times we need to model a system which is by its very nature concurrent, and we need to express this understanding, so that we - as human beings - can comprehend and reason about its behavior. For these cases we need to intentionally model the concurrency. When the task at hand is not just a matter of parallellizing an otherwise sequential program, but expressing the interactive behaviors of systems that handle many things concurrently.

This is nothing new. In the mid-80's up to the mid-90's there was a lot of active research and development in so-called actor languages; a class of concurrent programming languages that target this problem space. Today, actor programming is starting to be used again, especially in context of the Scala programming language.

In this talk we will review the rationales and thinking behind actor languages, provide examples of actor programming models, languages, and draw the lines up to current programming models.

JAOO: The Concurrency Revolution: The Hardware Story

Слайды с презентации Brian Goetz "The Concurrency Revolution: The Hardware Story" на JAOO Conference:
http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus-2009/slides/BrianGoetz_TheConcurrencyRevolutionTheHardwareStory.pdf

Abstract: Everyone is saying we need a revolution in the way we approach concurrency; the availability of cheap multiprocessor systems has brought concurrency, which used to be a topic for experts only, into the foreground. How did we get here? Why are the performance-enhancing techniques that worked for twenty years no longer working, and how did this become such a problem that we have to change our programming models? In this talk, we'll dive under the hood and look at the hardware trends that have forced us to turn away from increasing sequential performance and towards multicore CPUs and chip multi-threading, and look at the implications for software design and performance analysis.

Target audience: Advanced engineers who are interested in performance management and tuning, trends in software design, or anyone who is interesting in understanding the magic under the hood.

Классическая статья по STM.

Language Support for Lightweight transactions - одна из самых цитируемых статей по STM(Software Transactional Memory).

Если кто заинтересуется, возможно, есть смысл посмотреть и другие статьи от Tim Harris (я их не смотрел):
"Selected work:

* Tim Harris. Language constructs for transactional memory (or: transactional memory and atomic blocks are not the same thing) Invited talk, POPL, January 2009

* Martín Abadi, Tim Harris, Mojtaba Mehrara. Transactional memory with strong atomicity using off-the-shelf memory protection hardware PPoPP, February 2009

* Martín Abadi, Andrew Birrell, Tim Harris, Michael Isard. Semantics of Transactional Memory and Automatic Mutual Exclusion POPL 2008

* Tim Harris, Satnam Singh. Feedback directed implicit parallelism ICFP 2007

* Keir Fraser, Tim Harris. Concurrent programming without locks ACM TOCS, May 2007

* Miguel Castro, Manuel Costa, Tim Harris. Securing software by enforcing data-flow integrity OSDI 2006

* Tim Harris, Mark Plesko, Avraham Shinnar, David Tarditi. Optimizing Memory Transactions PLDI 2006

* Tim Harris, Simon Marlow, Simon Peyton-Jones, Maurice Herlihy. Composable memory transactions PPoPP 2005"

Challenges and Directions in Java Virtual Machines

Тут презентация с JavaONE-2008 от Dr.Cliff Click and Brian Goetz.
Рассказывают про будущее многопоточности для JVM и приложений.
Впечатление, что предстоит ОЧЕНЬ МНОГО РАБОТЫ и ВСЕ ОЧЕНЬ ЗАПУТАННО.
Вот типичные цитаты:
"We don't know what the Right Answer is yet"
"Alas, there are very few 'victories' here"
"Doesn't have yet a story for true parallelism"

среда, 14 октября 2009 г.

PJP: Сто правил NASA для руководителей проектов

100 правил NASA для руковолителей проектов.
Классика.

Наши пацаны(Oracle+SUN) отделали соседских(IBM)!

Помните Oracle+SUN приняли вызов от IBM со 100.000 tps(transactions per second)?
Так вот! Наши пацаны их сделали!

"Конфигурация Oracle-Sun потребляла в 4 раза меньше електроэнергии, чем конфигурация IBM, работая при этом на 26% быстрее.
Тест Oracle-Sun продемонстрировал в 16 раз лучшие показатели времени отклика при проведении транзакции, чем тест IBM."

Книги на LJ

Книги буду выкладывать тут concurrentlib.livejournal.com.
Там уже есть, качайте.

понедельник, 12 октября 2009 г.

Уважаемые читатели - несите Благую Весть страждущим!

Господа и Дамы!
Чем большему количеству друзей Вы порекомендуете блог и чем больше у нас станет постоянных подписчиков - тем выше мы будем в рейтинге Гугла, и тем скорее мы завоюем мировое господство!

PJP: Spring (Пн, 12окт)

Рекомендую IoC-контейнер Spring.
- ключевая статья Мартина Фаулера "Inversion of Control Containers and the Dependency Injection pattern" обясняющая зачем все это.
- документация по Spring(просмотрите хотя бы *картинки, *примеры, *справа в рамочках замечания из Chapter 3. The IoC container)

P.S. Знание Cпринга - уже гарантирует работу, а понимание того КАК он работает - хорошую:)

PJP: Р.Мартин. Быстрая разработка программ (Пн, 12окт).

* принцип персональной ответственности
Для использование одной функциональноcти достаточно использования одного класса (хотя реализовываться может с использованием многих, [скажем это класс - Facade]) + у одного класса - одна функциональность (а не больше).

GPU: CPU history, GPU history

Тут в статье(26 страниц) "NVIDIA’s Fermi: The First Complete GPU Computing Architecture" очень доходчиво и внятно рассказывается про историю процессоров от начала времен до Fermi в 2009м. Написано спецом, который отличный блогер. Текст насыщенный, но при этом легкий.

GPU: Top 10 Innovations and Top 3 Next Challenges in Fermi

Тут в статье(8 страниц) "The Top 10 Innovations in the New NVIDIA Fermi Architecture, and the Top 3 Next Challenges" говорят про 10 штук которые есть в Fermi и 3 которые еще докрутят:

Top 10 Innovations in Fermi
- Real Floating Point in Quality and Performance
- Error Correcting Codes on Main Memory and Caches
- 64 bit Virtual Address Space
- Caches
- Fast Context Switching
- Unified Address Space
- Debugging Support
- Faster Atomic Instructions to Support Task Based Parallel Programming
- A Brand New Instruction Set
- Also, Fermi is Faster than G80

Top 3 Next Challenges
- The Relatively Small Size of GPU Memory
- Inability to do I/O directly to GPU Memory
- No Glueless Multisocket Hardware and Software

GPU: GT300 GPU on Fermi technology

Ситуация: NVIDIA выпускает чипы
- 2006 - GT80
- 2008 - GT200
- 2009 - GT300
---
GT300 - выпущен по архитектуре Fermi. Пока по этой архитектуре всего один чип.
Его данные:
* 3.000.000.000 транзисторов
* 512 CUDA processing cores that are organized into 16 streaming multiprocessors of 32 cores each
* The memory system can support up to 6GB of memory
* The GPU also supports the IEEE 754-2008 standard (floating point arithmetics)
---
CUDA - это buzzword от NVIDIA, она так, похоже, все свое называет

Тут статья(20 страниц) Looking Beyond Graphics. Выдержки:

GPU: main players, NVIDIA vs ATI.

How i can see in high performance GPU market there is two main players - NVIDIA and ATI (owned by AMD).
So in next articles i'll analize differenced between NVIDIA and ATI chips.

There is some important terms: chip, technology, graphic card, programming technology.
Thy have different meaning:
chip(GPU) == name of concrete graphics processor.
technology == tecknology of GPU, many GPUs can be done in one technology
graphic card == GPU + other chips on card
programming technology == API or libs or framework or standart for using capabilities of GPU

воскресенье, 11 октября 2009 г.

[орг. вопросы] Пн - PJP+дискуссии, Чт - многопоточка

Пока будем работать в таком режиме
Пн - PJP + дискуссии по интересующим вас вопросам (если что накопилось - спрашивайте, обсудим)
Чт - вопросы, связанные с многопоточностью/многоядерностью

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

суббота, 10 октября 2009 г.

Реклама удалена

    Опыт использования рекламы показал следующее:
- показов 1100
- кликов 13
- заработано 56 евроцентов

    Принято решение: для удобства наших читателей и в виду нереальности личного обогащения :) таким вот образом - реклама удалена с Блога.

четверг, 8 октября 2009 г.

Дискуссия на RSDN: reordering volatile and non-volatile

Тут обсуждение книги вылилось в нашу с Дмитрием дискуссию о возможности/допустимости reordering volatile and non-volatile. Дмитрий дает интересные данные по C#/C++ Memory Model и интересную ссылку на еще один документ по JMM:
http://rsim.cs.illinois.edu/Pubs/popl05.pdf

P.S. Моя точка зрения там немного радикальна, просто я пляшу от того как МОЖНО программировать, а не от того как НАДО. Т.е. не смоит мои слова воспринимать как руководство к действию. Естественно, ВНЕДРЯТЬ НАМЕРЕННО в свой код data race - дурной тон.

среда, 7 октября 2009 г.

[орг.вопросы] Дополнительная встреча

Мне написали 5 человек (5-й написал вчера в 22.56), анализ показал что все могут в понедельник на 17.00

комментируем.

вторник, 6 октября 2009 г.

Нить, которую разбудит HotSpot

Тут Санкт-Петербургская группа тестирования JVM рассказывает о том, что
- при реализации HotSpot JVM явно делалась возможность не FIFO получения доступа к монитору
- оказывается !!!можно менять политики доступа к монитору!!!

понедельник, 5 октября 2009 г.

PJP: GRASP Patterns: Pure Fabrication

GRASP(General Responsibility Assignment Software Patterns) patterns described by Craig Larman in his book:
Applying UML and Patterns, 3ed.
Применение UML 2.0 и шаблонов проектирования

Книгу я бы не советовал читать, вода для будущих менеджеров. И паттерны там не кодирования, а распределения ролей:
  • Information Expert
  • Creator
  • Controller
  • Low Coupling
  • High Cohesion
  • Polymorphism
  • Pure Fabrication
  • Indirection
  • Protected Variations
Но вот термин хороший - Pure Fabrication (Читая Синтетика), хорошее название для классов типа WritePermission, TransactionManager, PriorityInverter. Короче говоря, для антонима Entity. Класс не имеющий никакого двойника в реальном мире.

PJP: словарь: Bean vs Entity

Bean - определяется по форме. Entity - по содержанию.
Java Bean - не путать с EJB и Web beans.
---
Bean(Java Bean): имеет свою страницу на САНе -> тут, скачать спеку можно -> тут, tutorial -> тут.
Если совсем кратко - это класс
- имеющий публичный конструктор без аргументов
- доступ к полям обеспечивается через getter/setter
Entity: класс в той или иной степени соответствующий сущности (не процессу, не роли, не ...) реального мира.
---
Пример Bean and Entity:

PJP: jcp.org

Абсолютное большинство стандартов Java разрабатывается сообществом JCP (jcp.org, Java Community Process) в виде JSR (Java Specification Requests).
Все JSR-ки в формате pdf можно скачать отсюда.
Пример для JSP:
JavaServer Pages 1.2 (JSR 53)
JavaServer Pages 2.1 (JSR 245)

JSR - это основной источник информации по предмету. Зачастую написаны достаточно легко. Снабжены примерами.

PJP: Code Conventions for the Java Programming Language

Code Conventions for the Java Programming Language
Документ от САНа, соглашение о форматировании, наименовании, оформлениии кода:
- Download HTML (zip, ~62K)
- Download PDF (~127K)

Новые тематики: PJP, Matlab, GPU

Начинаем дополнительные публикации по темам PJP(Professional Java Programming), Matlab, GPU (Graphics Processing Unit)
По PJP буду писать я, Головач Иван.
По Matlab буду писать я, Головач Иван. Подключится(надеюсь) к.т.н. Колупаев Игорь Николаевич, специалист по металлофизике, бооольшой любитель Матлаба.
По GPU пока буду писать я, Головач Иван. Возможно найду спеца по этой тематике.

воскресенье, 4 октября 2009 г.

Concurrency lessons from eBay engineers

On JavaOne Technical Sessions 2009 3 engineers from eBay speek about Java concurrency troubles/lessons that they learned.
- Lazy Initialization patern
- Holder pattern
- correct Double-Checked Locking pattern
- Interesting example: ConcurrentMap of AtomicInteger
- DateFormat, MessageDigest, CharsetEncoder/CharsetDecoder - not thread safe
- ThreadLocal pattern
- potential lock contention on Class.forName(...) when missing class
- SAXParserFactory.newInstance().newSAXParser() - potentially significant lock contention on META-INF
P.S. You MUST be resistered at Sun. Its easy.
P.P.S. And, Yes, eBay, Amazon and part of Google writed in Java:)

Рядом со Стенфордом!!!

По запросу "concurrency group" мы вторые после Стенфорда!!!
Наше дело правое, враг будет разбит, победа будет за нами!

P.S. Ну да в запросах из Украины, знаю ...

Some Concurrency Tips

Some Concurrency Tips:
- Prefer immutable objects/data
- Hold Locks for as short a time as possible
- Prefer executors and tasks to threads
- Prefer Concurrency utilities to wait and notify
- Multithreaded Lazy Initialization is tricky

Spin-wait in HotSpot JVM

Тут Санкт-Петербургская группа тестирования JVM рассказывает про реализацию активного ожидания в Sun HotSpot JVM.
"... HotSpot тоже использует spin locks. В коде есть множество настраиваемых параметров. Перечислим эвристики, которые применяет Hotspot по умолчанию:
  1. Количество нитей, крутящихся в ожидании одной блокировки ограничено количеством процессоров (-XX:SyncKnobs=MaxSpinners=n)
  2. Если ожидаемая блокировка, захвачена нитью, которая сейчас не выполняется на процессоре, то крутиться не нужно (OState=0|1)
  3. Если блокировка поменяла хозяина, пока нить крутилась, то дальше крутиться не стоит. То же, если мы заметили освободившуюся блокировку, но ее захватили перед нашим CAS. ..."

PAUSE instruction in Pentium 4

Using Spin-Loops on Intel® Pentium® 4 Processor and Intel® Xeon™ Processor:
Погрузитесь в мир C + Asm:

четверг, 1 октября 2009 г.

Большой Брат следит за Дмитрием :)

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

вторник, 29 сентября 2009 г.

Знакомьтесь - Дмитрий Вьюков

Дмитрий Вьюков является постоянным читателем Блога. Мы с ним списались, вот что он пишет о себе:

Первое знакомство с атомарными переменными

Стоит взглянуть для начального знакомства на описание пакета java.util.concurrent.atomic в javadoc.
Работа с атомарными переменными также приводит к установлению отношения happend-before между потоками. Детальнее смотрите по ссылке выше.

Микро-курс по concurrency от SUN

Тут микро-курс по concurrency от SUN. Даже с двумя упражнениями в конце :). Стоит прочитать.
P.S. Кстати тут и тут просто множество коротеньких курсов от SUN по разнообразным базовым темам из Явы.

Материалы по lock-free

Тут в Вики статья "Non-blocking synchronization". Обратите внимание на различия в Wait-freedom, Lock-freedom и Obstruction-freedom.
Тут в Вики часть статьи "Lock" с подзаголовком "The problems with locks".
Тут на русском, тут на английском статья "Введение в неблокирующие алгоритмы". Рассматриваются:
- Неблокирующий счетчик
- Неблокирующий стек Трайбера (Treiber)
- Неблокирующая очередь Майкла-Скотта (Michael-Scott)

P.S. Именно очередь Майкла-Скотта использована в java.util.concurrent.ConcurrentLinkedQueue. Там в javadoc так и написано "This implementation employs an efficient "wait-free" algorithm based on one described in Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms by Maged M. Michael and Michael L. Scott.".

Lock-free BlockingStack

Дмитрий Вьюков в комментах спрашивает "А слабо к этому стеку прикрутить блокирующую семантику, что бы pop() на пустом стеке блокировался до появления элемента, и так что бы стек оставался lock-free пока есть элементы?". Отвечаю - не слабо:

понедельник, 28 сентября 2009 г.

Заметка о теоретических основах многопоточности

Было бы странно, если бы каждая корпорация, группа и т.д., занимающаяся развитием систем основанных на многопоточности, каждый раз изобретала велосипед. В 1989 году стартовала конференция Concure (Concurrency Theory) на которой обсуждаются теоретические основы многопоточности и их применение. Эта конференция, преимущественно, каждый год проходит в новой стране. В этом году она проходила в Болонье (Италия).
http://concur09.cs.unibo.it/
Цитата: "CONCUR 09, the 20th International Conference on Concurrency Theory, will take place in Bologna, on September 1-4, 2009. The purpose of the CONCUR conferences is to bring together researchers, developers, and students in order to advance the theory of concurrency, and promote its applications. "
Материалы всех конференция можно найти в интернет-магазине infibeam.com. Если удастся найти материалы или обзор в свободном доступе, обязательно выложу хотя бы те направления, которые на данный момент являются наиболее перспективными.


воскресенье, 27 сентября 2009 г.

Еще книги по Java Concurrent Programming

Еще книги по Java Concurrent Programming:
1) Грегори Р. Эндрюс "Основы многопоточного, параллельного и распределенного программирования" (есть у Игоря в djvu, у Ивана и Романа - в бумажном виде). Отличная книга, стоит иметь на книжной полке. Я купил в Буксе за 40 гривен. Много теории не привязанной к конкретному языку, более 250 упражнений (вообще великолепно:)). Настоящий университетский учебник.
2) "Java Thread Programming" by Paul Hyde Sams © 1999, 510 pages, ISBN: 0672315858. Очень хорошая книга для старта. Автор разбирает большинство моментов программирования потоков именно на яве. Вот оглавление:
Part I        Threads
Chapter 1 - Introduction to Threads
Chapter 2 - A Simple Two-Thread Example
Chapter 3 - Creating and Starting a Thread
Chapter 4 - Implementing Runnable Versus Extending Thread
Chapter 5 - Gracefully Stopping Threads

лекция #2: NonBlockingStack

Реализация неблокирующего стека на java.util.concurrent.atomic.AtomicReference:
import java.util.concurrent.atomic.AtomicReference;
import java.util.EmptyStackException;

class NonBlockingStack {
private AtomicReference head = new AtomicReference(null);
public void push(int data) {
for (; ;) {
Node next = (Node) head.get();
Node myNode = new Node(data, next);
if (head.compareAndSet(next, myNode)) {
return;
}
}
}

суббота, 26 сентября 2009 г.

лекция #2: BoundedBuffer

Реализации ограниченного буфера
1) с использованием synchronized/wait()/notifyAll()
2) с использованием Lock/Condition
3) тест
Обе реализации получены модификацией исходного кода класса java.util.concurrent.ArrayBlockingQueue.

A Survey of Concurrency Constructs

В презентации от SUN "A Survey of Concurrency Constructs" рассматриваются различные подходы в утилизации многоядерности + перечисляются плюсы/минусы каждого подхода:
- Threads/Locks
- Actors
- Dataflow
- Tuple spaces

concurrency-interest

Тут (concurrency-interest archive), пожалуй, один из лучших источников информации относительно всего, что касается многопоточности/многоядерности для java.
В данной переписке, например, авторы java.util.concurrent обсуждают собственную библиотеку.

Matlab: Parallel Computing Toolbox 4.2

В Matlab, как оказалось, можно
1) параллелить приложения с помощью Parallel Computing Toolbox, data sheet
2) растягивать на кластер с помощью Distributed Computing Server, data sheet

Я работал одно время на Матлабе, простой втроеный язык M, возможность компилировать программы в исполнимый код, возможность писать методы на C, возможность использовать java прямо в Матлабе. +естественно, куча математических библиотек и неповторимая визуализация чего-угодно из матфизики.

В Группу добавлены Роман Николаенко и Игорь Волков.

    В Kharkov Concurency Group добавилось два человека.
    Авторами блога KharkovConcurencyGroup.blogspot.com теперь являются Головач Иван, Роман Николаенко, Игорь Волков.
    Я, Головач Иван, теперь буду постить новости от своего имени (не от KhCGroup).

    P.S. Роман и Игорь - примите приглашения на своих gmail-ящиках.

пятница, 25 сентября 2009 г.

лекция #2: словарь

    На лекции #2 пополнили словарь:
- conditional waiting
- Producer-Consumer pattern
- Push or Pop model
- Bounding Buffer
- atomic variables (java.util.concurrent.atomic.*)
- CAS: compareAndSwap
- non-blocking algorithms

лекция #2: Thread.State

    У класса Thread есть метод getState(), который возвращает State, который может иметь значения:
"A thread state. A thread can be in one of the following states:
  • NEW
    A thread that has not yet started is in this state.
  • RUNNABLE
    A thread executing in the Java virtual machine is in this state.
  • BLOCKED
    A thread that is blocked waiting for a monitor lock is in this state.
  • WAITING
    A thread that is waiting indefinitely for another thread to perform a particular action is in this state.
  • TIMED_WAITING
    A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.
  • TERMINATED
    A thread that has exited is in this state.
A thread can be in only one state at a given point in time. These states are virtual machine states which do not reflect any operating system thread states."

лекция #1: happend-before

    Отношение Happend-Before устанавливается в нескольких случаях. Мы рассмотрели 3 из них (не все):
    1. Если один поток записал в volatile переменную, а другой считал из нее же (две записи, два чтения, чтение потом запись не устанавливают отношние).
    2. Если один поток выполнил Thread.start(), а второй - это стартонувший поток. Если один поток вышел из своего метода run() а второй ожидал его окончания по Thread.join().
    3. Если один поток освободил монитор объекта(вышел из синхронизированной секции), а второй захватил монитор того же объекта (вошел в синхронизированную секцию).

лекция #1: java.lang.Thread, java.lang.Runnable

    У класса java.lang.Thread использовались на лекции методы:
- Thread.start()
- Thread.run()
- Thread.join()
- Thread.sleep(1000)

    Использовался интерфейс java.lang.Runnable.

Что читать в интернете

    1. Для отслеживания современного состояния J2EE рекомендуется просматривать infoq.com, либо уже infoq.com/java. Рекомендуется просматривать у новостей заголовки, читать избранное.
    2. Для представления о том, что такое современное высокопроизводительное, маштабируемое, параллельное, устойчивое web- или enterprise- приложение рекомендуется читать статьи с highscalability.com. Есть описание архитектур google.com, amazon.com, ebay.com, etc.

лекция #1: словарь

Словарь, введенный на первой лекции:
ordering / reordering
visibility
casuality
atomicity
temporal logic
mutual exclusion
memory barrier
write barrier
read barrier
cache flush
fire
strong fire
weak fair
thread affinity

лекция #1: принципы группы

1. Открытость. Двери семинара всегда открыты. Никакой платы, никакой регистрации. Никаких ограничений по возрасту, по специальности, по ВУЗу. Информация должна быть бесплатной.
2. Честность. Никокой лжи и обмана, никаких манипуляций внутри группы. Плагиат жестоко карается.
3. Равноправие. Структура группы горизонтальна, все равноправны, отсутствуют лидеры, менеджеры, вожди.

devx.com: Go Parallel: Parallel and Multi-Core Articles

    Тут подборка из 9 статей с сайта devx.com в рубрике Go Parallel:
- Writing Parallel Programs with Erlang
- A Developer's Guide to Python 3.0: Standard Library
- Forking and Joining Java to Maximize Multicore Power
- Automatic Full Parallel Processing of Hierarchical SQL Queries
- Parallel and Concurrency Futures for Microsoft Developers
- Lots about Locks
- Plan for the Future: Express Parallelism, Don't Manage It
- Getting Started with the .NET Task Parallel Library: Multi-Core Case Studies
- Getting Started with the .NET Task Parallel Library

RSDN.ru: Что такое модель памяти? И с чем её едят?

    Тут пост с rsdn.ru "Что такое модель памяти? И с чем её едят?" Дмитрий Вьюков кратко намечает что такое Memory Model для ПРОЦЕССОРА. Сам текст краток, но вот ссылки!

    "Более детальную информацию по вопросу можно найти в документации по процессорам.
Например
    для архитектур IA-32 и Intel-64 это "Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1":
http://www.intel.com/design/processor/manuals/253668.pdf
(CHAPTER 7 MULTIPLE-PROCESSOR MANAGEMENT)
    Для Itanium это "Intel® Itanium® Architecture Software Developer’s Manual Volume 2: System Architecture":
http://download.intel.com/design/Itanium/manuals/24531805.pdf
(MP Coherence and Synchronization)
    Для SPARC это "The SPARC Architecture Manual":
www.sparc.org/standards/SPARCV9.pdf
(8 Memory Models)
    Так же хорошее введение в упорядочивание инструкций современными процессорами "Memory Ordering in Modern Microprocessors, Part I & II" (by Paul E. McKenney):
http://www.linuxjournal.com/article/8211
http://www.linuxjournal.com/article/8212"

Intel® Software Network: Правильная параллелизация

    Тут еще статья с российского сайта Intel "Правильная параллелизация". Виктор Черепанов рассказывает, как они распараллеливали видеокодек H.264. Алгоритм параллелизации патентовать будут.

Intel® Software Network: Оттенки FIFO

    Тут статья от российского сайта Intel "Оттенки FIFO". Сказать по честному - не осилил. Нашел ночью уже. Дмитрий Вьюков рассматривает различные оттенки дисциплины обслуживания FIFO (First In First Out), т.е. очередей - первым в очередь стал - первым и обработаешься. Микрофон Дмитрию:
    "В однопоточном окружении всё очень просто - у нас либо есть FIFO, либо нет FIFO совсем. Причин иметь какие-либо промежуточные варианты обычно практически нет. Однако в многопоточном окружении ситуация становится интереснее, т.к. промежуточные варианты могут иметь существенные последствия для производительности и/или масштабируемости. Итак, какие варианты есть в многопоточном окружении (в порядке убывания свойств, т.е. каждый последующий вариант есть подмножество предыдущего):
- полный FIFO, или причинно-следственный FIFO (causal FIFO)
- FIFO для каждого отдельного производителя (per-producer FIFO)
- почти FIFO (best-effort FIFO)
- отсутствие FIFO (no FIFO)"

    А вот так он ссылками разбрасывается:
"[1] Time, Clocks, and the Ordering of Events in a Distributed System. Leslie Lamport. 1978. http://research.microsoft.com/en-us/um/people/lamport/pubs/time-clocks.pdf
[2] Happened-before, http://en.wikipedia.org/wiki/Happened-before
[3] Vector clocks, http://en.wikipedia.org/wiki/Vector_clocks
[4] Lamport timestamps, http://en.wikipedia.org/wiki/Lamport_timestamps
[5] Erlang, http://erlang.org
[6] Erlang, http://en.wikipedia.org/wiki/Erlang_(programming_language)
[7] Streamflow, http://people.cs.vt.edu/~scschnei/streamflow/
[8] Scheduling Multithreaded Computations by Work Stealing. Robert D. Blumofe, Charles E. Leiserson. 1994. ftp://theory.lcs.mit.edu/pub/cilk/focs94.ps.Z"

вторник, 22 сентября 2009 г.

Chip Multithreading (CMT)

    Тут (Multithreaded Application Acceleration with Chip Multithreading (CMT), Multicore/Multithread UltraSPAR C® Processors) SUN популярно объясняет, чем вызвано использование CMT и какие дает преимущества на примере VoIP телефонии, поиска строк и антивирусной защиты. Если кратко, то большинство потоков в реальных приложениях заблокированы на операциях доступа к памяти (ОЗУ), имея много потоков на одно ядро можно быстро перебрасывать ресурсы ядра от блокированного потока к неблокированному.
    "Sun Microsystems was the first company to recognize that the speed of data access from memory was the critical bottleneck, and has overcome this problem with the chip multithreading (CMT) architecture that is the basis of the UltraSPARC® T1 and T2 processors."
    "Even if a particular thread stalls while waiting for data to be available from memory, the core can switch immediately to another thread and the pipeline remains continuously active, doing useful work."
    "These simpler pipelines can process a large number of simultaneous threads, rather than running a single thread as quickly as possible."

100.000 transactions-per-second

    Тут Oracle + Sun бросают вызов IBM по мощности DB-серверов.
    IBM на своем железе со своей DB2 выдала 100.000 tps, Oracle на железе и операционке от Sun обещает, что даст больше :).

Размеры крупнейших IT-компаний мира

Не мог не запостить.
* IBM - 398.455
* HP - 321.000
* Microsoft - 91.000
* Oracle - 86657
* Intel - 82.500
* Dell - 76.500
* Cisco - 66.129
* Sun - 33.556
* Apple - 32.000
* Amazon - 20.600
* Google - 20.164
* eBay - 16.200
* Yahoo - 13.600
* Adobe - 7335
* Baidu - 6393

Oracle will support Sun's hardware platform

    Был пост посвященный процессору от SUNа - Rock. Oracle заявила:
    "... на новейшие аппаратные разработки этой компании Oracle имеет «большие планы». Эллисон признает, что одним из мотивов, побудивших его корпорацию купить Sun, являются именно аппаратные разработки. ..."
    "... Определенно, что мы будем развивать существующий аппаратный бизнес, это самое главное, на чем мы намерены сейчас сосредоточиться. Этот подход не противоречит стратегии Oracle ...".

    А вся соль в том, что новейшие разработки SUNа - это в том числе Hardware Transaction Memory (HTM).

Sun's chip multithreading (CMT)

    Предыдущий пост был посвящен технологии Intel Hyper Threading, позволяющей работать на одном ядре 2 потокам. Это еще один тренд на рынке современных процессоров. Более ярким выразителем направления "много потоков на ядре" является Sun's chip multithreading (CMT) с процессором SUN UltraSPARK T2 - 8 ядер по 8 потоков, итого 64 потока одновременно. Ссылки с сайта:
    Datasheet
    Brochure
    Вот более свежая разработка Rainbow Falls - 16 ядер по 8 потоков, итого 128 потоков одновременно.

пятница, 18 сентября 2009 г.

Intel Hyper Threading

    Отсюда (Hyper-Threading Technology.pdf):
    "Hyper-Threading Technology makes a single physical processor appear as two logical processors; the physical execution resources are shared and the architecture state is duplicated for the two logical processors. From a software or architecture perspective, this means operating systems and user programs can schedule processes or threads to logical processors as they would on multiple physical processors. From a microarchitecture perspective, this means that instructions from both logical rocessors will persist and execute simultaneously on shared execution resources."
    "Hyper-Threading Technology makes a single physical processor appear as multiple logical processors [11, 12]. To do this, there is one copy of the architecture state for each logical processor, and the logical processors share a single set of physical execution resources. From a software or architecture perspective, this means operating systems and user programs can schedule processes or threads to logical processors as they would on conventional physical processors in a multiprocessor system. From a microarchitecture perspective, this means that instructions from logical processors will persist and execute simultaneously on
shared execution resources."
    "Each logical processor maintains a complete set of the architecture state. The architecture state consists of registers including the general-purpose registers, the control registers, the advanced programmable interrupt controller (APIC) registers, and some machine state registers. From a software perspective, once the
architecture state is duplicated, the processor appears to be two processors. The number of transistors to store the architecture state is an extremely small fraction of the total. Logical processors share nearly all other resources on the physical processor, such as caches, execution units, branch predictors, control ogic, and buses."
    В статье стоит прочитать хотя бы начало, для составления представления об общей архитектуре процессоров и набраться buzzwords:) вроде chip multiprocessing (CMP), time-slice multithreading, cache miss, branch mispredictions, simultaneous multi-threading, logical/physical processor, out-of-order execution.

среда, 16 сентября 2009 г.

Книги по Java Concurrent Programming

Базовые книги по Java Concurrent Programming:
1) Java Concurrency in Practice from Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea.
Достаточно простая но профессиональная. Дает введение в java.util.concurrent. Не опускается на уровень примитивов (построение монитора вручную) и не шагает по верхушкам (архитектуры серверов). Рассматривает серединку.
2) Concurrent Programming in Java: Design Principles and Pattern (2nd Edition). Второе издание, не первое! Неустаревающая классика. Объясняет устройство примитивов, пишем библиотечные классы, архитектуры серверов, сама философия многопоточности от автора(Doug Lea) известнейших библиотек(j.u.c + Fork/Join).
3) The Art of Multiprocessor Programming from Maurice Herlihy, Nir Shavit. 2008 год, суперкнига! Как устроен процессор, как писать иерархические блокировки, CLH-queuelock и много другого. Просто россыпь безценного материала. Nir Shavit - Gödel prize 2004, член Sun Labs Scalable Synchronization Research Group.

Ресурсы по JMM

В качестве источников информации по Java Memory Model рекомендуется использовать:
1)JSR-133: JavaTM Memory Model and Thread Specification сама спецификация.
2) особое внимание обратить на The JSR-133 Cookbook for Compiler Writers from Doug Lea. Это примеры применения спецификации на практике. Doug Lea - один из соавторов JMM и автор java.util.conrurrent + Fork/Join framework.

В качестве дополнительного материала рекомендуется:
3)JLSv3. Chapter 17.Threads and Locks 17-я глава спецификации языка.
4)The "Double-Checked Locking is Broken" Declaration декларация, тщательно проясняющая что же было broken в старой модели памяти.
5)любые материалы с сайта http://www.cs.umd.edu/~pugh/java/memoryModel/. Bill Pugh главный куратор java memory model. Содержит огромное количество материала в том числе по иным моделям памяти, полезно для интересующихся, например, темпоральной логикой.

понедельник, 14 сентября 2009 г.

1.000.000 cores

[http://blogs.ft.com/techblog/2008/04/intel-and-amds-different-classes-of-business/]
Intel и Cray всерьез обсуждают как жить с 1.000.000 ядер в одной системе.
"They(Intel, Cray) would also work on how to take advantage of what is expected to be a grouping of as many as 1m processing cores in a single supercomputing system."

Sun, AMD, Nvidia, IBM, HP and Intel take 6M$ to Stanford for concurrency lab

[http://ppl.stanford.edu/wiki/index.php/Pervasive_Parallelism_Laboratory]
Стенфорд получил 6$ миллионов от Sun, AMD, Nvidia, IBM, HP and Intel на создание лаборатории по многопоточности/многоядерности.

Universal Parallel Computing Research Center at Berkeley

[http://parlab.eecs.berkeley.edu/]
Университет Беркли получил 10$ миллионов от Intel и Microsoft на исследования в области мультипоточности/мультиядерности.

Universal Parallel Computing Research Center at Illinois University

[http://www.upcrc.illinois.edu/]
Иллинойский Университет получил 10$ миллионов от Intel и Microsoft на исследования в области мультипоточности/мультиядерности.

[http://www.upcrc.illinois.edu/documents/UPCRC_Whitepaper.pdf]
Это описание того, чем занимаются в Иллинойсе.

[http://www.parallel.illinois.edu/]
А это - весь центр параллельных разработок в Иллинойсе.

воскресенье, 13 сентября 2009 г.

CPU designers debate multi-core future

[http://www.eetimes.com/showArticle.jhtml?articleID=206105179]
    Встреча разработчиков процессоров от



Shekhar Borkar, director of Intel Corp.'s Microprocessor Technology Lab, said microprocessor cores will get increasingly simple, but software needs to evolve more quickly than in the past to catch up.

software needs to evolve more quickly than in the past...