четверг, 31 декабря 2009 г.
Facebook использует Erlang
Erlang использовался для реализации части сервиса Chat в Facebook. Прототип сервиса был создан в январе 2007, затем командой из 4 человек доводился до ума до осени 2007-го. В феврале 2008 проект был запущен в тестовую эксплуатацию.
P.S. Взято тут.
вторник, 29 декабря 2009 г.
Oracle Coherence: 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.)"
понедельник, 28 декабря 2009 г.
In-Memory Data Grid: Oracle Coherence
"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
"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
"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
"
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 для некоторых потоков), но во всех тестах ведут себя "хорошо". Что будет если в какой-то момент времени заказчик потеряет деньги из-за таких вот особенностей поведения ПО? Т.е. считать ли проект "выполненным/готовым"?
Приостановка семинаров
P.S. Отпишитесь, пожалуйста, в камментах у кого и когда начинается весенний семестр.
четверг, 17 декабря 2009 г.
Как finalize() может быть причиной OutOfMemoryError
Это к тому, что объекты классов с переопределенным finalize() убираются заметно "медленнее" коллектором.
Весенний семестр
1) Transactional Memory (на примере dstm2);
2) Actor-based concurrency model (на примере Scala).
---
Для TM и Actor будем рассматривать те реализации, которые привязаны к Java/JVM. Что бы полученный опыт легко можно было использовать при разработке j2ee-приложений.
P.S. Это к тому, что сейчас этих материалов прибавится на блоге :)
среда, 16 декабря 2009 г.
Java SE HotSpot Publications
* 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
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
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
понедельник, 14 декабря 2009 г.
How Hotspot Decides to Clear SoftReferences
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
пятница, 11 декабря 2009 г.
[Personality]: Jon Masamitsu (GC)
Например тут он рассказывает про допустимые комбинации коллекторов в 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
В блоге Jon Masamitsu рассказано как HotSpot 5/6 работает с TLAB.
Также как ими можно управлять/мониторить:
-XX:UseTLAB
-XX:TLABSize
-XX:ResizeTLAB
-XX:MinTLABSize
-XX:+PrintTLAB
NUMA, Solaris and memory allocation
четверг, 10 декабря 2009 г.
Implementing Fast Java Monitors with Relaxed-Locks
Как я понимаю, именно так были реализованы мониторы в Sun JVM 1.2.
понедельник, 7 декабря 2009 г.
Biased Locking
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
Date: | Thursday, December 15, 2009 |
Time: | Time: 8am - 5pm PST - 15 unique sessions (attend 1 or more, as you wish!) |
четверг, 3 декабря 2009 г.
Собеседование по Java Concurrency
-------------------------------------
В последнее время во многих вакансиях на Java Developer появилось требование знания Java Concurrency/Multithreading. В ответ многие разработчики тут же добавили такую строчку себе в резюме. Я как человек, который проводит собеседования, хотел бы развеять некоторые недоразумения относительно этого термина.
Все проекты связанные с многопоточностью я бы разделил на 3 класса: использующие многопоточность, основанные на многопоточности и те, которые и есть сама многопоточность. К первому классу("использующие") я бы отнес проекты, которые предполагают работу в многопоточной среде. Пример: есть класс BlaBlaBlaFactory, в документации необходимо указать, может ли эта фабрика использоваться одновременно несколькими потоками или нет. Если нет, то сделать ее потокобезопасной с помощью ReentrantLock. Ко второму классу ("основанные на") я бы отнес проекты, в которых использование нескольких потоков является одним из ключевых моментов. Пример: многопоточный кодек видео формата H.264. К третьему классу ("являются ей") я бы отнес проекты, в корне что-то меняющие в отношении потоков. Пример: написание runtime-среды для языка Scala (на Java) с реализацией легковесных потоков и своеобразной моделью памяти.
среда, 2 декабря 2009 г.
Java Platform Security
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
Для этого необходимо использовать опцию HotSpot JVM - -XX:SoftRefLRUPolicyMSPerMB.
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
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
пятница, 27 ноября 2009 г.
Boxing is an enemy of concurrency
http://mail.openjdk.java.net/pipermail/closures-dev/2009-November/000342.html
Последний абзац:
I really,... про STM что-ли :)
really don't want to do is release an overhyped
facility for parallel programming that doesn't
actually speed up anyone's applications.
четверг, 26 ноября 2009 г.
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
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
Третий уровень: 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
Parallel - значит представляет собой несколько ПАРАЛЛЕЛЬНЫХ потоков. Т.е. сам уборщик мусора состоит из нескольких потоков, которые все вместе лопатят кучу.
Concurrent - значит работает ОДНОВРЕМЕННО с потоками пользователя. Т.е. не требуется делать паузу всей системы(stop-the-world).
Как видно, понятия совершенно независимые. Т.е. каждая конкретная реализация уборщика может обладать этими свойствами независимо.
Некоторые заметки о прохождении интервью при устройстве на работу в Праге
"... Устраивался я на должность Ведущего Разработчика J2EE."
"Сениор — 50000-80000крон (1800-3000евро), Архитект или Тим Лидер около 85000крон (3200евро)."
"1.Чем отличается абстрактный класс от интерфейса? (Да, такие вопросы тоже задают)
2.Для чего в классе Object есть метод hashCode() и как он связан с методом equals()?
3.Вы строите кэш. Вам нужно удалять из кэша некоторые объекты при каждой сборке мусора. Как это сделать?
PJP: Доктор, холодеют ноги ...
- 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
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 г.
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
Карантин окончен.
- Пн 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.
Основным отличием школы было большее погружение в проблему, в которой естественным образом появляются технологии НРС. А именно, через цепочку задача - методы - алгоритмы - архитектуры - код ... показать современные технологии в работе.
Программа школы
Аннотации лекций
Презентации лекций
Методические материалы
Бизнес презентации
четверг, 12 ноября 2009 г.
Медведев и суперкомпьютеры.
...
О суперкомпьютерах
И, наконец, пятая приоритетная задача — развитие стратегических и информационных технологий. В России должен быть в полном объеме задействован потенциал суперкомпьютеров, суперкомпьютерных систем, которые объединены высокоскоростными каналами передачи данных. С их помощью уже в пятилетней перспективе станет возможным проектирование новейших самолетов и космических аппаратов, автомобилей и ядерных реакторов. Ведь сложная техника, не прошедшая суперкомпьютерного моделирования, что называется, не положенная в цифру, через несколько лет просто не будет востребована рынком. И для завоевания здесь конкурентных позиций мы обязаны настойчиво работать.
..."
среда, 11 ноября 2009 г.
Lecture: Safe Publication
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
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
Azul vega supermachine
"...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
воскресенье, 1 ноября 2009 г.
3 недели - карантин
На время перерыва рекомендую Вам:
- почитать литературу с concurrentlib.livejournal.com (я туда еще добавлю книг);
- самостоятельно пописать многопоточные программки (скажем, копипастом из книг).
пятница, 30 октября 2009 г.
OpenMP Does Not Scale - Or Does It?
"- 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
"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
- 129.600 cores
- 1.105.000 GFlops
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 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
Сегодняшний пример - два потока перебрасывающиеся объектом.
----------
Guava-libraries from Google
Там мало, всего четыре пакета:
- com.google.common.base
- com.google.common.primitives
- com.google.common.io
- com.google.common.util.concurrent
пятница, 23 октября 2009 г.
Link: What Every Programmer Should Know About Memory (114 pages)
Вот ссылка на один из них - 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 софисты :)
"У древнегреческого софиста Протагора учился софистике и в том числе судебному красноречию некий Эватл (Еватл, Эвафл; др.-греч. Εὔαθλος). По заключенному между ними договору Эватл должен был заплатить за обучение 10 тысяч драхм только в том случае, если выиграет свой первый судебный процесс. В случае проигрыша первого судебного дела он вообще не был обязан платить.
Однако, закончив обучение, Эватл не стал участвовать в судебных тяжбах. Как следствие, он считал себя свободным от уплаты за учебу. Это длилось довольно долго, терпение Протагора иссякло, и он сам подал на своего ученика в суд. Таким образом, должен был состояться первый судебный процесс Эватла.
Протагор привёл следующую аргументацию: «Каким бы ни было решение суда, Эватл должен будет заплатить. Он либо выиграет свой первый процесс, либо проиграет. Если выиграет, то заплатит по договору, если проиграет, заплатит по решению суда».
Эватл возражал: «Ни в том, ни в другом случае я не должен платить. Если я выиграю, то я не должен платить по решению суда, если проиграю, то по договору»."
Немного о транзакциях БД и уровнях их изолированности
Транзакция (Transaction) - некоторая последовательность действий, выполняемая над объектами БД (в первую очередь над таблицами), которая рассматривается как одно целое и поэтому либо должна быть корректно завершена (Commit), либо полностью игнорирована (Rollback).
Основные требования к транзакциям сформулировал Джим Грей. Это свойства Atomicity (Атомарность), Consistency (Согласованность) и Durability (Долговечность). Позднее к ним присоединилось свойство Isolation (Изолированность), образуя четверку свойств ACID.
среда, 21 октября 2009 г.
Kharkov Concurrency Group at Twitter now!
воскресенье, 18 октября 2009 г.
Пара в Пн переносится на Вт
Предлагаю провести ее во Вторник в 17.00.
Передайте кому возможно.
четверг, 15 октября 2009 г.
ReentrantLock vs synchronized (15 oct lecture)
- 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
SPECIAL POPL ISSUE: The Java Memory Model
Testing Race Conditions in Java
/** Maintains a list of names. */
public class NameManager {
private Listnames = new ArrayList ();
/** Stores a new list of names. This method is threadsafe. */
public void setNames(ListnewNames) {
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
http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus-2009/slides/SimonPeyton-Jones_DataParallelHaskell.pdf
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
http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus-2009/slides/RichHickey_TheClojureConcurrencyStory.pdf
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
http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus-2009/slides/DaveThomas_and_KrestenKrabThorup_ActorsAndTheForgottenArtOfModelingConcurrentSystems.pdf
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
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.
Если кто заинтересуется, возможно, есть смысл посмотреть и другие статьи от 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
Рассказывают про будущее многопоточности для 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 г.
Наши пацаны(Oracle+SUN) отделали соседских(IBM)!
Так вот! Наши пацаны их сделали!
"Конфигурация Oracle-Sun потребляла в 4 раза меньше електроэнергии, чем конфигурация IBM, работая при этом на 26% быстрее.
Тест Oracle-Sun продемонстрировал в 16 раз лучшие показатели времени отклика при проведении транзакции, чем тест IBM."
Книги на LJ
Там уже есть, качайте.
понедельник, 12 октября 2009 г.
Уважаемые читатели - несите Благую Весть страждущим!
Чем большему количеству друзей Вы порекомендуете блог и чем больше у нас станет постоянных подписчиков - тем выше мы будем в рейтинге Гугла, и тем скорее мы завоюем мировое господство!
PJP: Spring (Пн, 12окт)
- ключевая статья Мартина Фаулера "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
GPU: Top 10 Innovations and Top 3 Next Challenges in Fermi
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
- 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.
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
http://rsim.cs.illinois.edu/Pubs/popl05.pdf
P.S. Моя точка зрения там немного радикальна, просто я пляшу от того как МОЖНО программировать, а не от того как НАДО. Т.е. не смоит мои слова воспринимать как руководство к действию. Естественно, ВНЕДРЯТЬ НАМЕРЕННО в свой код data race - дурной тон.
среда, 7 октября 2009 г.
[орг.вопросы] Дополнительная встреча
комментируем.
вторник, 6 октября 2009 г.
Нить, которую разбудит HotSpot
- при реализации HotSpot JVM явно делалась возможность не FIFO получения доступа к монитору
- оказывается !!!можно менять политики доступа к монитору!!!
понедельник, 5 октября 2009 г.
PJP: GRASP Patterns: Pure Fabrication
Applying UML and Patterns, 3ed.
Применение UML 2.0 и шаблонов проектирования
Книгу я бы не советовал читать, вода для будущих менеджеров. И паттерны там не кодирования, а распределения ролей:
- Information Expert
- Creator
- Controller
- Low Coupling
- High Cohesion
- Polymorphism
- Pure Fabrication
- Indirection
- Protected Variations
PJP: словарь: Bean vs Entity
Java Bean - не путать с EJB и Web beans.
---
Bean(Java Bean): имеет свою страницу на САНе -> тут, скачать спеку можно -> тут, tutorial -> тут.
Если совсем кратко - это класс
- имеющий публичный конструктор без аргументов
- доступ к полям обеспечивается через getter/setter
Entity: класс в той или иной степени соответствующий сущности (не процессу, не роли, не ...) реального мира.
---
Пример Bean and Entity:
PJP: jcp.org
Все JSR-ки в формате pdf можно скачать отсюда.
Пример для JSP:
JavaServer Pages 1.2 (JSR 53)
JavaServer Pages 2.1 (JSR 245)
JSR - это основной источник информации по предмету. Зачастую написаны достаточно легко. Снабжены примерами.
PJP: Code Conventions for the Java Programming Language
Документ от САНа, соглашение о форматировании, наименовании, оформлениии кода:
- Download HTML (zip, ~62K)
- Download PDF (~127K)
Новые тематики: PJP, Matlab, GPU
По PJP буду писать я, Головач Иван.
По Matlab буду писать я, Головач Иван. Подключится(надеюсь) к.т.н. Колупаев Игорь Николаевич, специалист по металлофизике, бооольшой любитель Матлаба.
По GPU пока буду писать я, Головач Иван. Возможно найду спеца по этой тематике.
воскресенье, 4 октября 2009 г.
Concurrency lessons from eBay engineers
- 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:)
Рядом со Стенфордом!!!
Наше дело правое, враг будет разбит, победа будет за нами!
P.S. Ну да в запросах из Украины, знаю ...
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
"... HotSpot тоже использует spin locks. В коде есть множество настраиваемых параметров. Перечислим эвристики, которые применяет Hotspot по умолчанию:
- Количество нитей, крутящихся в ожидании одной блокировки ограничено количеством процессоров (-XX:SyncKnobs=MaxSpinners=n)
- Если ожидаемая блокировка, захвачена нитью, которая сейчас не выполняется на процессоре, то крутиться не нужно (OState=0|1)
- Если блокировка поменяла хозяина, пока нить крутилась, то дальше крутиться не стоит. То же, если мы заметили освободившуюся блокировку, но ее захватили перед нашим CAS. ..."
PAUSE instruction in Pentium 4
Погрузитесь в мир C + Asm:
четверг, 1 октября 2009 г.
Большой Брат следит за Дмитрием :)
вторник, 29 сентября 2009 г.
Знакомьтесь - Дмитрий Вьюков
Первое знакомство с атомарными переменными
Работа с атомарными переменными также приводит к установлению отношения happend-before между потоками. Детальнее смотрите по ссылке выше.
Микро-курс по concurrency от SUN
P.S. Кстати тут и тут просто множество коротеньких курсов от SUN по разнообразным базовым темам из Явы.
Материалы по lock-free
Тут в Вики часть статьи "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
понедельник, 28 сентября 2009 г.
Заметка о теоретических основах многопоточности
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
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
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
- Threads/Locks
- Actors
- Dataflow
- Tuple spaces
concurrency-interest
В данной переписке, например, авторы java.util.concurrent обсуждают собственную библиотеку.
Matlab: Parallel Computing Toolbox 4.2
1) параллелить приложения с помощью Parallel Computing Toolbox, data sheet
2) растягивать на кластер с помощью Distributed Computing Server, data sheet
Я работал одно время на Матлабе, простой втроеный язык M, возможность компилировать программы в исполнимый код, возможность писать методы на C, возможность использовать java прямо в Матлабе. +естественно, куча математических библиотек и неповторимая визуализация чего-угодно из матфизики.
В Группу добавлены Роман Николаенко и Игорь Волков.
Авторами блога KharkovConcurencyGroup.blogspot.com теперь являются Головач Иван, Роман Николаенко, Игорь Волков.
Я, Головач Иван, теперь буду постить новости от своего имени (не от KhCGroup).
P.S. Роман и Игорь - примите приглашения на своих gmail-ящиках.
пятница, 25 сентября 2009 г.
лекция #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
"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.
лекция #1: happend-before
1. Если один поток записал в volatile переменную, а другой считал из нее же (две записи, два чтения, чтение потом запись не устанавливают отношние).
2. Если один поток выполнил Thread.start(), а второй - это стартонувший поток. Если один поток вышел из своего метода run() а второй ожидал его окончания по Thread.join().
3. Если один поток освободил монитор объекта(вышел из синхронизированной секции), а второй захватил монитор того же объекта (вошел в синхронизированную секцию).
лекция #1: java.lang.Thread, java.lang.Runnable
- Thread.start()
- Thread.run()
- Thread.join()
- Thread.sleep(1000)
Использовался интерфейс java.lang.Runnable.
Что читать в интернете
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: принципы группы
2. Честность. Никокой лжи и обмана, никаких манипуляций внутри группы. Плагиат жестоко карается.
3. Равноправие. Структура группы горизонтальна, все равноправны, отсутствуют лидеры, менеджеры, вожди.
devx.com: Go Parallel: Parallel and Multi-Core Articles
- 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: Что такое модель памяти? И с чем её едят?
"Более детальную информацию по вопросу можно найти в документации по процессорам.
Например
для архитектур 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® Software Network: Оттенки FIFO
"В однопоточном окружении всё очень просто - у нас либо есть 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)
"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
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
"... на новейшие аппаратные разработки этой компании Oracle имеет «большие планы». Эллисон признает, что одним из мотивов, побудивших его корпорацию купить Sun, являются именно аппаратные разработки. ..."
"... Определенно, что мы будем развивать существующий аппаратный бизнес, это самое главное, на чем мы намерены сейчас сосредоточиться. Этот подход не противоречит стратегии Oracle ...".
А вся соль в том, что новейшие разработки SUNа - это в том числе Hardware Transaction Memory (HTM).
Sun's chip multithreading (CMT)
Datasheet
Brochure
Вот более свежая разработка Rainbow Falls - 16 ядер по 8 потоков, итого 128 потоков одновременно.
пятница, 18 сентября 2009 г.
Intel Hyper Threading
"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
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
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
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
Стенфорд получил 6$ миллионов от Sun, AMD, Nvidia, IBM, HP and Intel на создание лаборатории по многопоточности/многоядерности.
Universal Parallel Computing Research Center at Berkeley
Университет Беркли получил 10$ миллионов от Intel и Microsoft на исследования в области мультипоточности/мультиядерности.
Universal Parallel Computing Research Center at Illinois University
Иллинойский Университет получил 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
Встреча разработчиков процессоров от 02/06/2008:
"I would like to call it a corollary of Moore's Law that the number of cores will double every 18 months, said Agarwal whose company currently ships a 64-core embedded processor."
"Agarwal estimated by 2017 embedded processors could sport 4,096 cores, server CPUs might have 512 cores and desktop chips could use 128 cores."
"Hetherington also suggested today's software model will survive through the next decade. I think we can support 500 to 1,000 threads per core. In fact, that may even happen in the next five or six years, he said."
"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..."!