For many years, the increase in the number of transistors on a chip, as predicted by Moore’s Law, has resulted in higher clock speeds, and thus, greater performance; without any changes to software.  This has enabled the creation of advanced, performance-hungry applications, as well as an increase in software developer productivity through high-level programming languages that are enabled by these performance increases.

Due to power constraints, mainstream computer vendors have announced two significant changes in their future architectures. First, the dramatic increase in clock speeds they have provided in the past will no longer continue and the relative amount of cache memory per processor will decrease. Second, there will be an exponentially increasing number of processor cores on a chip.

These changes present two challenges to the software stack. Namely, how does the software deal with the stagnation of single threaded performance and cache memory, and how can the software utilize the additional capabilities provided by multiple cores on a chip?

For some classes of applications, such as transaction-based systems, these trends are not problematic.  These applications have natural parallelism and thus, can easily adapt to the multicore trend by having appropriate middleware map their parallelism to the multicore chips.  However, for other classes of applications, the shift to requiring parallelism to obtain performance is a significant unwanted challenge.

Utilizing  the cloud has emerged as an attractive and viable application development and deployment framework for commercial applications that must process vast amounts of data, utilizing hundreds of (possibly heterogeneous) cores. For these applications, parallelism – once an option – is now a requirement – and must be exploited to achieve historical increases in application performance that have also led to developer productivity improvements, which are key for developing more robust, sophisticated software applications.

These challenges are one of the hardest problems facing the computer industry today.

The X10 Project

IBM Research is developing the open-source X10 programming language to provide a programming model that can address the architectural challenge of multiples cores, hardware accelerators, clusters, and supercomputers in a manner that provides scalable performance in a productive manner.  The project leverages over nine years of language research funded, in part, by the DARPA/HPCS program.

X10 is a class-based, strongly-typed, garbage-collected, object-oriented language. To support concurrency and distribution, X10 uses the Asynchronous Partitioned Global Address Space programming model (APGAS). This model introduces two key concepts -- places and asynchronous tasks -- and a few mechanisms for coordination. With these, APGAS can express both regular and irregular parallelism, message-passing-style and active-message-style computations, fork-join and bulk-synchronous parallelism. In contrast to hybrid models like MPI+OpenMP, the same constructs underpin both intra- and inter-place concurrency.

Both its modern, type-safe sequential core and simple programming model for concurrency and distribution contribute to making X10 a high-productivity language in the HPC and Big Data spaces. User productivity is further enhanced by providing tools such as an Eclipse-based IDE (X10DT). Implementations of X10 are available for a wide variety of hardware and software platforms ranging from laptops, to commodity clusters, to supercomputers.

IBM Research has significantly invested in the language design and implementation, tooling, developing applications, as well as working closely with over 35 universities around the world to improve the language and its implementation, developing course materials, and applications.  Through a series of X10 Innovation Grants, IBM Research awarded over $750K to grow the community around the language.  An X10 Birds-of-a-Feather session at the October 2010 ACM SPLASH conference drew over 100 researchers (video).  Courses and tutorials have been taught based on X10 at universities and major conferences in the US and abroad.  The first X10 workshop,  X10'11, was held at PLDI'11 in San Jose, CA on June 4, 2011.  Subsequent X10 workshops (X10'12, X10'13, X10'14) were also co-located with PLDI; we plan to continue this tradition in 2015. 

Read on: Getting started with X10