05.08.2014 Views

here - Stefan-Marr.de

here - Stefan-Marr.de

here - Stefan-Marr.de

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

2.4. Common Approaches to Concurrent and Parallel Programming<br />

ations, but also inclu<strong>de</strong>s collective operations such as scatter and gather. In<br />

general, these operations have ren<strong>de</strong>zvous semantics. Thus, every sending operation<br />

requires a matching receive operation and vice versa. MPI-2 [Message<br />

Passing Interface Forum, 2009] ad<strong>de</strong>d operations for one-si<strong>de</strong>d communication<br />

to introduce a restricted notion of shared memory in addition to the main<br />

message passing, for situations w<strong>here</strong> ren<strong>de</strong>zvous semantics are not flexible<br />

enough.<br />

While MPI is wi<strong>de</strong>ly used, and still consi<strong>de</strong>red the standard in HPC applications<br />

when it comes to performance, it is also criticized for not being<br />

<strong>de</strong>signed with productivity in mind [Lusk and Yelick, 2007]. Its low-level API<br />

does not fit well with common HPC applications. In addition to offering comparably<br />

low-level APIs and data types, t<strong>here</strong> is a potential misfit between<br />

message-passing-based programming and data-centric applications.<br />

APGAS (Asynchronous PGAS) languages were conceived with the same<br />

goals as PGAS languages to solve the problems MPI has with regard to programmer<br />

productivity. The distinguishing feature of APGAS languages compared<br />

to PGAS languages is the notion that all operations on remote memory<br />

need to be realized via an asynchronous task that executes on the remote<br />

memory. Thus, APGAS language try to make the cost of such remote memory<br />

accesses more explicit than in PGAS languages. This programming mo<strong>de</strong>l<br />

is supposed to gui<strong>de</strong> <strong>de</strong>velopers to utilize data locality efficiently and to structure<br />

data and communication to reduce costly operations.<br />

Languages such as X10 [Charles et al., 2005] and Habanero [Cavé et al.,<br />

2010] realize that i<strong>de</strong>a by making locality explicit as part of the type system.<br />

X10’s specification [Saraswat et al., 2012] goes so far as to <strong>de</strong>fine remote accesses<br />

as having a by-value semantics for the whole lexical scope. This results<br />

in a programming mo<strong>de</strong>l very similar to message-passing. X10 combines this<br />

with a fork/join-like task-based parallelism mo<strong>de</strong>l, which makes is a hybrid<br />

language in terms of our categorization. X10 differentiates between different<br />

places as its notion of locality. Across places, it enforces isolation, but insi<strong>de</strong> a<br />

single place it provi<strong>de</strong>s a programming mo<strong>de</strong>l that corresponds to our <strong>de</strong>finition<br />

of communicating threads.<br />

2.4.5. Data Parallelism<br />

Approaches for data parallelism provi<strong>de</strong> abstractions to handle data <strong>de</strong>pen<strong>de</strong>ncies.<br />

In general, the ten<strong>de</strong>ncy in these approaches is to move from control<br />

33

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!