1 Introduction 1.2 The Programming Model 2/13
The OMPSs programming model
An example
void baz(int *k, int *l) {*k = *l;}
void foo(int *x, int *y, int *z) {
#pragma omp task in(z) out(x)
baz(x, z);
#pragma omp task in(z) out(y)
baz(y, z);
}
void bar(int *k, int *l) {
#pragma omp task in(l) out(k)
baz(k, l);
}
int main(void) {
// ...
#pragma omp task in(z) out(x, y)
foo(x, y, z);
#pragma omp task in(x) out(k)
bar(k, x);
#pragma omp task in(m) out(l)
baz(l, m);
// ...
}
Spawn Graph
foo(x, y, z)
out: x, y
in: z
Task 1
baz(y, z)
out: y
in: z
Task 1.1
baz(x, z)
out: x
in: z
Task 1.2
bar(k, x)
out: k
in: x
Task 2
baz(k, x)
out: k
in: x
Task 2.1
baz(l, m)
out: l
in: m
Task 3
main()
inout: x,y,z,k,l,m
Root Task
Spawn
Dependency
F. Zakkak -
[email protected]