Skip to content

Commit e975792

Browse files
author
fmorac
committed
Initial commit
1 parent 769113b commit e975792

File tree

211 files changed

+24662
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

211 files changed

+24662
-1
lines changed

Makefile

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
threads?=4
2+
ver?=omp
3+
args?=
4+
BDX?=
5+
BDY?=
6+
BDZ?=
7+
BDO?=
8+
arch?=cc70
9+
dvo?=
10+
dv?=
11+
av?=
12+
13+
all: preprocessor/preprocessor omp serial
14+
15+
omp: wave-dag-omp/bin
16+
wave-dag-omp/bin: preprocessor/preprocessor
17+
cp -R wavebench-dag wave-dag-omp
18+
cd wave-dag-omp; ./cmake.sh
19+
20+
serial: wave-dag-serial/bin
21+
wave-dag-serial/bin: preprocessor/preprocessor
22+
cp -R wavebench-dag wave-dag-serial
23+
cd wave-dag-serial; opts="-s" ./cmake.sh
24+
25+
graph: wave-dag-graph/bin
26+
wave-dag-graph/bin: preprocessor/preprocessor
27+
cp -R wavebench-dag wave-dag-graph
28+
cd wave-dag-graph; opts="-p" ./cmake.sh
29+
30+
timing: wave-dag-timing/bin
31+
wave-dag-timing/bin: preprocessor/preprocessor
32+
cp -R wavebench-dag wave-dag-timing
33+
cd wave-dag-timing; opts="-t" ./cmake.sh
34+
35+
graph-timing: wave-dag-graph-timing/bin
36+
wave-dag-graph-timing/bin: preprocessor/preprocessor
37+
cp -R wavebench-dag wave-dag-graph-timing
38+
cd wave-dag-graph-timing; opts="-t -p" ./cmake.sh
39+
40+
preprocessor/preprocessor :
41+
make -C preprocessor
42+
43+
acc-gpu: wave-acc-gpu/bin
44+
wave-acc-gpu/bin:
45+
cp -R wavebench wave-acc-gpu
46+
cd wave-acc-gpu; TARCH=${arch} ./cmake_gpu.sh
47+
48+
omp-block: wavebench-omp-block/bin
49+
wavebench-omp-block/bin:
50+
cd wavebench-omp-block; ./cmake.sh
51+
52+
omp-naive: wavebench-omp-naive/bin
53+
wavebench-omp-naive/bin:
54+
cd wavebench-omp-naive; ./cmake.sh
55+
56+
acc-cpu: wave-acc-cpu/bin
57+
wave-acc-cpu/bin:
58+
cp -R wavebench wave-acc-cpu
59+
cd wave-acc-cpu; TARCH=${arch} ./cmake_cpu.sh
60+
61+
run: wave-dag-${ver}/bin
62+
OMP_NUM_THREADS=${threads} \
63+
OMP_BLOCK_DIMX=${BDX} \
64+
OMP_BLOCK_DIMY=${BDY} \
65+
OMP_BLOCK_DIMZ=${BDZ} \
66+
OMP_BLOCK_DIMO=${BDO} \
67+
wave-dag-${ver}/bin/wavebench ${args}
68+
69+
run-omp: wavebench-omp-${ver}/bin
70+
OMP_NUM_THREADS=${threads} \
71+
OMP_BLOCK_DIMX=${BDX} \
72+
OMP_BLOCK_DIMY=${BDY} \
73+
OMP_BLOCK_DIMZ=${BDZ} \
74+
OMP_BLOCK_DIMO=${BDO} \
75+
wavebench-omp-${ver}/bin/wavebench ${args}
76+
77+
run-acc: wave-acc-${ver}/bin
78+
ACC_NUM_CORES=${threads} \
79+
wave-acc-${ver}/bin/wavebench ${args}
80+
81+
compare-acc: wave-acc-${av}/bin wave-dag-${dv}/bin
82+
wave-acc-${av}/bin/wavebench ${args} > acc.txt
83+
OMP_NUM_THREADS=${threads} \
84+
OMP_BLOCK_DIMX=${BDX} \
85+
OMP_BLOCK_DIMY=${BDY} \
86+
OMP_BLOCK_DIMZ=${BDZ} \
87+
OMP_BLOCK_DIMO=${BDO} \
88+
wave-dag-${dv}/bin/wavebench ${args} > dag.txt
89+
diff -U 0 acc.txt dag.txt | grep -v ^@ | wc -l
90+
91+
compare-dag: wave-dag-${dvo}/bin wave-dag-${dv}/bin
92+
OMP_NUM_THREADS=${threads} \
93+
OMP_BLOCK_DIMX=${BDX} \
94+
OMP_BLOCK_DIMY=${BDY} \
95+
OMP_BLOCK_DIMZ=${BDZ} \
96+
OMP_BLOCK_DIMO=${BDO} \
97+
wave-dag-${dv}/bin/wavebench ${args} > dag1.txt
98+
OMP_NUM_THREADS=${threads} \
99+
OMP_BLOCK_DIMX=${BDX} \
100+
OMP_BLOCK_DIMY=${BDY} \
101+
OMP_BLOCK_DIMZ=${BDZ} \
102+
OMP_BLOCK_DIMO=${BDO} \
103+
wave-dag-${dvo}/bin/wavebench ${args} > dag2.txt
104+
diff -U 0 dag1.txt dag2.txt | grep -v ^@ | wc -l
105+
106+
clean:
107+
rm -Rf wave-dag-omp wave-dag-serial wave-dag-graph wave-dag-timing wave-dag-graph-timing wave-acc-cpu wave-acc-gpu wavebench-omp-naive/build wavebench-omp-naive/bin wavebench-omp-block/build wavebench-omp-block/bin
108+
109+
purge:
110+
rm -Rf wave-dag-omp wave-dag-serial wave-dag-graph wave-dag-timing wave-dag-graph-timing wave-acc-cpu wave-acc-gpu wavebench-omp-naive/build wavebench-omp-naive/bin wavebench-omp-block/build wavebench-omp-block/bin
111+
make -C preprocessor purge

README.md

+53-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,53 @@
1-
# wavedag
1+
# Wave-DAG
2+
3+
Wave-DAG is a preprocessor for accelerating structured wavefront patterns on multi core architectures built on top of OpenMP 5.0, ensuing future portability across platforms.
4+
5+
The test cases used in Wave-DAG were taken from the Wavebench project. For more information about Wavebench see [wavebench/README.md](wavebench/README.md).
6+
7+
For more information about the underlying library see [wavebench-dag/include/Readme.md](wavebench-dag/include/Readme.md).
8+
9+
10+
## Example
11+
12+
Basic Smith-Waterman serial code.
13+
```
14+
for(int i = 1; i < n; ++i)
15+
for(int j = ; j < m; ++j) {
16+
int score = (A[i - 1] == B[j - 1])? match : miss;
17+
M[i * m + j] = max(M[(i - 1) * m + (j - 1)] + score,
18+
max(M[i * m +(j - 1)] + gap, M[(i - 1) * m + j] + gap));
19+
}
20+
```
21+
22+
Basic Smith-Waterman with Wave-DAG pragmas added.
23+
```
24+
#pragma omp dag coarsening(block, 512, 512)
25+
for(int i = 1; i < n; ++i)
26+
for(int j = ; j < m; ++j) {
27+
#pragma omp dag task depend({(i + 1) * m + j + 1,((i + 1) < n) && ((j + 1) < m)}, \
28+
{(i + 1) * m + j,(i + 1) < n}, \
29+
{i * m + j + 1,(j + 1) < m})
30+
{
31+
int score = (A[i - 1] == B[j - 1]) ? match : miss;
32+
M[i * m + j] = max(M[(i - 1) * m + (j - 1)] + score,
33+
max(M[i * m +(j - 1)] + gap, M[(i - 1) * m + j] + gap));
34+
}
35+
}
36+
```
37+
The resulting code then will be preprocessod by the Wave-DAG preprocessor and output a C++ OpenMP 5.0 compliant parallel code.
38+
39+
## Building and runninng
40+
To build Wave-DAG you need GCC 9.2 and in order to run the original wavebench code you need a working PGI compiler.
41+
To compile the tests use:
42+
```
43+
make omp # Compile the Wave-DAG version of the test cases
44+
make serial # Compile a serial version of the test cases
45+
make acc-gpu # Compile the Wavebench GPU version of the test cases
46+
```
47+
To run the samples use:
48+
```
49+
bash run.sh
50+
```
51+
52+
## License
53+
For more information see [LICENSE](LICENSE).

preprocessor/Makefile

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
BASE = preprocessor
2+
BISON = bison
3+
CXX = g++-9
4+
FLEX = flex
5+
CXXFLAGS ?= -std=c++17
6+
7+
all: $(BASE)
8+
9+
$(BASE):
10+
mkdir -v build
11+
$(MAKE) -C parser-lib CXX=$(CXX) CXXFLAGS=$(CXXFLAGS) BISON=$(BISON) FLEX=$(FLEX) static
12+
mv -v parser-lib/include build/include
13+
mv -v parser-lib/lib build/lib
14+
$(MAKE) -C parser-lib purge
15+
cp -Rv preprocessor-src/* build/
16+
$(MAKE) -C build CXX=$(CXX) CXXFLAGS=$(CXXFLAGS)
17+
mv -v build/preprocessor preprocessor
18+
$(MAKE) clean
19+
20+
clean:
21+
rm -Rf build
22+
$(MAKE) -C parser-lib purge
23+
24+
purge:
25+
rm -Rf build preprocessor
26+
$(MAKE) -C parser-lib purge

preprocessor/parser-lib/Makefile

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# This Makefile is designed to be simple and readable. It does not
2+
# aim at portability. It requires GNU Make.
3+
4+
BASE = pragma-parser
5+
BISON = bison
6+
CXX = g++-9
7+
FLEX = flex
8+
XSLTPROC = xsltproc
9+
CXXFLAGS ?= -std=c++17
10+
11+
all: static
12+
13+
%.cc %.hh %.xml %.gv: %.yy
14+
$(BISON) $(BISONFLAGS) --xml --graph=$*.gv -o $*.cc $<
15+
16+
%.cc: %.ll
17+
$(FLEX) $(FLEXFLAGS) -o$@ $<
18+
19+
%.o: %.cc
20+
$(CXX) $(CXXFLAGS) -c -o$@ $<
21+
22+
shared: CXXFLAGS = -std=c++17 -fPIC
23+
shared: $(BASE).o parser.o driver.o scanner.o
24+
$(CXX) -shared astextent.o parser.o driver.o scanner.o $(BASE).o -o libpragma-parser.so
25+
mkdir -v lib
26+
mv -v libpragma-parser.so lib/
27+
mkdir -v include
28+
cp -v pragma-parser.hh include/
29+
cp -v parser.hh include/
30+
cp -v location.hh include/
31+
cp -v driver.hh include/
32+
ln -sv ${PWD}/ast include/
33+
$(MAKE) clean
34+
35+
static: astextent.o parser.o driver.o scanner.o $(BASE).o
36+
ar rcs libpragma-parser.a astextent.o parser.o driver.o scanner.o $(BASE).o
37+
mkdir -v lib
38+
mv -v libpragma-parser.a lib/
39+
mkdir -v include
40+
cp -v pragma-parser.hh include/
41+
cp -v parser.hh include/
42+
cp -v location.hh include/
43+
cp -v driver.hh include/
44+
cp -Rv ast include/
45+
$(MAKE) clean
46+
47+
astextent.o: ast/astextent.cc
48+
$(CXX) $(CXXFLAGS) -c -o$@ $<
49+
$(BASE).o: parser.hh
50+
parser.o: parser.hh
51+
scanner.o: parser.hh
52+
53+
html: parser.html
54+
%.html: %.xml
55+
$(XSLTPROC) $(XSLTPROCFLAGS) -o $@ $$($(BISON) --print-datadir)/xslt/xml2xhtml.xsl $<
56+
57+
CLEANFILES = \
58+
$(BASE) *.o \
59+
parser.hh parser.cc parser.output parser.xml parser.html parser.gv location.hh \
60+
scanner.cc position.hh stack.hh
61+
62+
clean:
63+
rm -f $(CLEANFILES)
64+
purge:
65+
rm -f $(CLEANFILES)
66+
rm -rf ./lib
67+
rm -rf ./include

0 commit comments

Comments
 (0)