Following a recent post I wrote about Cray’s Chapel language, Patrick Viry got in touch to tell me about his company Ateji, which develops programming languages in Paris, especially the Ateji PX Java extensions. I asked him to tell me more, so here’s our interview…
Hello Patrick. Tell me, why was Ateji created?
I created Ateji in 2005, after a career in academia and industry, in Europe and in Japan. The idea behind the Ateji project was to provide the software development community with languages that are close to the problems they have to solve, while remaining compatible with existing languages. This is a challenge that requires complex language engineering techniques.
How does Ateji make parallel programming easy?
Firstly, we extend an existing language (Java, probably others in the future), so there’s no need to learn a new language. Secondly, we designed the parallel extension based on a strong mathematical basis called pi-calculus. In this model, parallelism is expressed by a simple composition operator. If you want to run a and b in parallel, just write a || b.
What parallel programming models does Ateji support?
Oh, many of them:
- Task parallelism (e.g. Cilk) : just use the || operator as in task1 || task2 || …
- Data parallelism (e.g. OpenMP) : quantify the || operator, as in ||(int i: I) a[i]++; — read this as forall
- Recursive parallelism: combine || and recursion
- Speculative parallelism: combine || and non-local exit statements (return, throw)
- Message-passing (e.g. MPI) : synchronous and asynchronous message passing primitives are part of the language (c!x send x on channel c, c?x receives x on channel c)
- Distribution: parallel branches can be physically distributed using location annotations that do not otherwise change the behaviour of the program). For instance, || task1 || #remote(“192.168.0.2”) task2 || #gpu(1) task3 will run task1 on the current CPU, task2 on a remote computer and task3 on the first GPU.
How does Ateji differ from other parallel programming language extensions and dedicated languages, such as Chapel?
- Chapel, X10, Fortress, etc., are targeted at HPC specialists using supercomputers. Ateji PX is targeted at Java developers who use standard multicore servers and clusters.
- It is a language extension, compatible with Java legacy code.
- A simple and intuitive || operator makes it possible to express many patterns of parallelism in one language.
- It is based on a strong mathematical foundation (pi-calculus) so we know what we’re talking about and what the proper behaviour is (example: what to do when you have multiple exceptions in parallel ?). It also means that the compiler will be able to help identify problems such as data races (work in progress).
Are there any compatibility issues with the Java run time?
Ateji PX is 100% Java compatible, since it generates standard Java source code behind the scenes. There are no external dependencies. It requires a JVM version 1.6.
How have Java programmers reacted to Ateji so far?
From my perspective, our claim that we make parallel programming easy has been validated. Users generally are able to write and run their first parallel program within half a day, including downloading the software and reading the manual. And we have seen a large bank achieve a 5x speedup on a major Java application within only two days.
We received many requests from teachers to use this language as part of their curriculum, because it exposes a very intuitive model of parallelism and it is based on Java, which is a language that most CS students are familiar with.
Additionally, Ateji PX has been designated as a Disruptive Technology at the SuperComputing’2010 conference in New Orleans.
Where can people find out more?
The best place to start is the Ateji PX white paper (PDF) or the Ateji PX web page. There is also a white paper showing how a single || keyword delivered a 12.5x speedup on a 16-core server (PDF), an online demo, and my blog.