Skip to content

Commit 28857f6

Browse files
author
btauro
committed
add sample configs
1 parent 00943d8 commit 28857f6

File tree

4 files changed

+233
-1
lines changed

4 files changed

+233
-1
lines changed

README.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,31 @@ cd fastswap
269269
**Note to reproduce fastswap, AIFM results, both the systems have to be first installed seperately in ```/home``` on both compute and memory server nodes.**. We provide installation scripts, instructions for both AIFM and fastswap in the root directory of TrackFM.
270270

271271
## Using TrackFM
272-
TODO: how do they get a new app running with TrackFM? What are the caveats?
272+
273+
TrackFM requires O1 opimized bitcode without vectorization.
274+
We provide sample make files in ```/home/TrackFM/sample_configs/TrackFM```.
275+
Example workflow
276+
```
277+
cd /home/TrackFM/sample_configs/TrackFM
278+
clang -c -O1 main.c -emit-llvm
279+
cp make_chunk Makefile
280+
make
281+
```
282+
TrackFM requires symbol rename of TrackFM binaries to distinguish between
283+
TrackFM std lib calls and the runtime std lib calls. If new symbols are used wich TrackFM does not recognize these symbols have to be added to ```/home/TrackFM/app_symbols```.
284+
285+
For large code bases, the code can be compiled using [wllvm](https://github.com/travitch/whole-program-llvm) and passing a single bitcode file to TrackFM
286+
is a possible workflow.
287+
288+
###Limitation
289+
TrackFM does not support external libraries that change memory pointers.
290+
However TrackFM can ignore memory allocations passed to external libraries,
291+
by annotating allocation sites (eg malloc) with ```__attribute__((annotate("local_malloc")))```.
292+
293+
TrackFM does not support mmap.
294+
TrackFM does not support multi-threading apps yet,
295+
adding support for multi threading in TrackFM is easy
296+
since AIFM runtime itself has support for multi threading.
273297

274298
## Code Structure
275299
TODO: give them a map of the codebase so they can grok it quickly

sample_configs/TrackFM/make_chunk

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
CARM_LLVM:=/home/llvm-project/build/bin
2+
AIFM_PATH:=../../runtime/AIFM/aifm
3+
CARM_PATH:=../../runtime
4+
5+
CARM_LDX_FLAGS=-filetype=obj -relocation-model=pic
6+
SHENANGO_PATH:=$(AIFM_PATH)/../shenango
7+
include $(SHENANGO_PATH)/shared.mk
8+
9+
librt_libs = $(SHENANGO_PATH)/bindings/cc/librt++.a
10+
INC += -I$(SHENANGO_PATH)/bindings/cc -I$(AIFM_PATH)/inc -I$(CARM_PATH)/inc -I$(SHENANGO_PATH)/ksched
11+
12+
main_src = main.cpp
13+
main_obj = $(main_src:.cpp=.o)
14+
15+
lib_src = $(wildcard $(CARM_PATH)/src/*.cpp $(AIFM_PATH)/src/*.cpp)
16+
lib_src := $(filter-out $(AIFM_PATH)/src/tcp_device_server.cpp,$(lib_src))
17+
lib_obj = $(lib_src:.cpp=.o)
18+
19+
src = $(main_src) $(lib_src)
20+
obj = $(src:.cpp=.o)
21+
dep = $(obj:.o=.d)
22+
23+
CXXFLAGS := $(filter-out -std=gnu++17,$(CXXFLAGS))
24+
override CXXFLAGS += -std=gnu++2a -fconcepts -Wno-unused-function -mcmodel=medium -g
25+
26+
#override CARMCXXFLAGS += -O1 -mllvm -disable-llvm-optzns -disable-llvm-passes -march=native -fPIC -fno-builtin -fno-vectorize
27+
#override CARMCXXFLAGS += -march=native -fPIC -O1 -Xclang -disable-llvm-passes -g -fno-vectorize
28+
override CARMCXXFLAGS += -march=native -fPIC -O3 -fno-vectorize -fno-slp-vectorize
29+
30+
#must be first
31+
all: main
32+
33+
main_lib:
34+
noelle-load -load ~/CAT/lib/TRACKFMINIT.so -CAT main.bc -o main_init.bc
35+
noelle-norm main_init.bc -o main_norm.bc
36+
#noelle-enable main_norm.bc main_e.bc -noelle-disable-inliner -noelle-disable-scev-simplification -noelle-disable-whilifier -noelle-disable-loop-distribution
37+
noelle-load -load ~/CAT/lib/TRACKFMCHECKS.so -CAT main_norm.bc -o main_check.bc
38+
noelle-norm main_check.bc -o main_check_norm.bc
39+
noelle-load -load ~/CAT/lib/TRACKFMLOOPCHECKS.so -CAT main_check_norm.bc -o main_loopcheck.bc
40+
noelle-norm main_loopcheck.bc -o main_loopcheck_norm.bc
41+
noelle-load -load ~/CAT/lib/TRACKFMLOOPTRANSFORM.so -CAT main_loopcheck_norm.bc -o main_looptransform.bc
42+
noelle-norm main_looptransform.bc -o main_looptransform_norm.bc
43+
#noelle-load -load ~/CAT/lib/TRACKFMTRANSFORM.so -CAT main_check_norm.bc -o main_transform.bc
44+
noelle-load -load ~/CAT/lib/TRACKFMTRANSFORM.so -CAT main_looptransform_norm.bc -o main_transform.bc
45+
noelle-norm main_transform.bc -o main_transform_norm.bc
46+
noelle-load -load ~/CAT/lib/TRACKFMLIBCTRANSFORM.so -CAT main_transform_norm.bc -o main_libctransform.bc
47+
noelle-norm main_libctransform.bc -o main_libctransform_norm.bc
48+
$(CARM_LLVM)/opt -O3 main_libctransform_norm.bc -o opt.bc
49+
$(CARM_LLVM)/llc $(CARM_LDX_FLAGS) opt.bc -o maint.o
50+
51+
main: $(librt_libs) $(RUNTIME_DEPS) $(lib_obj) main_lib
52+
objcopy --prefix-symbols=carm maint.o
53+
/home/TrackFM/symbol_redefine.sh
54+
$(CARM_LLVM)/clang -g -shared -o libcarmapp.so maint.o
55+
$(LDXX) -o $@ $(LDFLAGS) $(lib_obj) $(librt_libs) $(RUNTIME_LIBS) -L. -lcarmapp
56+
57+
ifneq ($(MAKECMDGOALS),clean)
58+
-include $(dep) # include all dep files in the makefile
59+
endif
60+
61+
#rule to generate a dep file by using the C preprocessor
62+
#(see man cpp for details on the - MM and - MT options)
63+
%.d: %.cpp
64+
@$(CXX) $(CXXFLAGS) $< -MM -MT $(@:.d=.o) >$@
65+
%.o: %.cpp
66+
$(CXX) $(CXXFLAGS) -c $< -o $@
67+
68+
.PHONY: clean
69+
clean:
70+
rm -f *.bc *.ll *.so *.o $(dep) main $(AIFM_PATH)/src/*.o $(CARM_PATH)/src/*.o
71+
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
CARM_LLVM:=/home/llvm-project/build/bin
2+
AIFM_PATH:=../../runtime/AIFM/aifm
3+
CARM_PATH:=../../runtime
4+
5+
CARM_LDX_FLAGS=-filetype=obj -relocation-model=pic
6+
SHENANGO_PATH:=$(AIFM_PATH)/../shenango
7+
include $(SHENANGO_PATH)/shared.mk
8+
9+
librt_libs = $(SHENANGO_PATH)/bindings/cc/librt++.a
10+
INC += -I$(SHENANGO_PATH)/bindings/cc -I$(AIFM_PATH)/inc -I$(CARM_PATH)/inc -I$(SHENANGO_PATH)/ksched
11+
12+
main_src = main.cpp
13+
main_obj = $(main_src:.cpp=.o)
14+
15+
lib_src = $(wildcard $(CARM_PATH)/src/*.cpp $(AIFM_PATH)/src/*.cpp)
16+
lib_src := $(filter-out $(AIFM_PATH)/src/tcp_device_server.cpp,$(lib_src))
17+
lib_obj = $(lib_src:.cpp=.o)
18+
19+
src = $(main_src) $(lib_src)
20+
obj = $(src:.cpp=.o)
21+
dep = $(obj:.o=.d)
22+
23+
CXXFLAGS := $(filter-out -std=gnu++17,$(CXXFLAGS))
24+
override CXXFLAGS += -std=gnu++2a -fconcepts -Wno-unused-function -mcmodel=medium -g
25+
26+
#override CARMCXXFLAGS += -O1 -mllvm -disable-llvm-optzns -disable-llvm-passes -march=native -fPIC -fno-builtin -fno-vectorize
27+
#override CARMCXXFLAGS += -march=native -fPIC -O1 -Xclang -disable-llvm-passes -g -fno-vectorize
28+
override CARMCXXFLAGS += -march=native -fPIC -O3 -fno-vectorize -fno-slp-vectorize
29+
30+
#must be first
31+
all: main
32+
33+
main_lib:
34+
noelle-load -load ~/CAT/lib/TRACKFMINIT.so -CAT main.bc -o main_init.bc
35+
noelle-norm main_init.bc -o main_norm.bc
36+
#noelle-enable main_norm.bc main_e.bc -noelle-disable-inliner -noelle-disable-scev-simplification -noelle-disable-whilifier -noelle-disable-loop-distribution
37+
noelle-load -load ~/CAT/lib/TRACKFMCHECKS.so -CAT main_norm.bc -o main_check.bc
38+
noelle-norm main_check.bc -o main_check_norm.bc
39+
noelle-load -load ~/CAT/lib/TRACKFMLOOPPROFCHECKS.so -CAT main_check_norm.bc -o main_loopcheck.bc
40+
noelle-norm main_loopcheck.bc -o main_loopcheck_norm.bc
41+
noelle-load -load ~/CAT/lib/TRACKFMLOOPTRANSFORM.so -CAT main_loopcheck_norm.bc -o main_looptransform.bc
42+
noelle-norm main_looptransform.bc -o main_looptransform_norm.bc
43+
#noelle-load -load ~/CAT/lib/TRACKFMTRANSFORM.so -CAT main_check_norm.bc -o main_transform.bc
44+
noelle-load -load ~/CAT/lib/TRACKFMTRANSFORM.so -CAT main_looptransform_norm.bc -o main_transform.bc
45+
noelle-norm main_transform.bc -o main_transform_norm.bc
46+
noelle-load -load ~/CAT/lib/TRACKFMLIBCTRANSFORM.so -CAT main_transform_norm.bc -o main_libctransform.bc
47+
noelle-norm main_libctransform.bc -o main_libctransform_norm.bc
48+
$(CARM_LLVM)/opt -O3 main_libctransform_norm.bc -o opt.bc
49+
$(CARM_LLVM)/llc $(CARM_LDX_FLAGS) opt.bc -o maint.o
50+
51+
main: $(librt_libs) $(RUNTIME_DEPS) $(lib_obj) main_lib
52+
objcopy --prefix-symbols=carm maint.o
53+
/home/TrackFM/symbol_redefine.sh
54+
$(CARM_LLVM)/clang -g -shared -o libcarmapp.so maint.o
55+
$(LDXX) -o $@ $(LDFLAGS) $(lib_obj) $(librt_libs) $(RUNTIME_LIBS) -L. -lcarmapp
56+
57+
ifneq ($(MAKECMDGOALS),clean)
58+
-include $(dep) # include all dep files in the makefile
59+
endif
60+
61+
#rule to generate a dep file by using the C preprocessor
62+
#(see man cpp for details on the - MM and - MT options)
63+
%.d: %.cpp
64+
@$(CXX) $(CXXFLAGS) $< -MM -MT $(@:.d=.o) >$@
65+
%.o: %.cpp
66+
$(CXX) $(CXXFLAGS) -c $< -o $@
67+
68+
.PHONY: clean
69+
clean:
70+
rm -f *.bc *.ll *.so *.o $(dep) main $(AIFM_PATH)/src/*.o $(CARM_PATH)/src/*.o
71+

sample_configs/TrackFM/make_no_chunk

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
CARM_LLVM:=/home/llvm-project/build/bin
2+
AIFM_PATH:=../../runtime/AIFM/aifm
3+
CARM_PATH:=../../runtime
4+
5+
CARM_LDX_FLAGS=-filetype=obj -relocation-model=pic
6+
SHENANGO_PATH:=$(AIFM_PATH)/../shenango
7+
include $(SHENANGO_PATH)/shared.mk
8+
9+
librt_libs = $(SHENANGO_PATH)/bindings/cc/librt++.a
10+
INC += -I$(SHENANGO_PATH)/bindings/cc -I$(AIFM_PATH)/inc -I$(CARM_PATH)/inc -I$(SHENANGO_PATH)/ksched
11+
12+
main_src = main.cpp
13+
main_obj = $(main_src:.cpp=.o)
14+
15+
lib_src = $(wildcard $(CARM_PATH)/src/*.cpp $(AIFM_PATH)/src/*.cpp)
16+
lib_src := $(filter-out $(AIFM_PATH)/src/tcp_device_server.cpp,$(lib_src))
17+
lib_obj = $(lib_src:.cpp=.o)
18+
19+
src = $(main_src) $(lib_src)
20+
obj = $(src:.cpp=.o)
21+
dep = $(obj:.o=.d)
22+
23+
CXXFLAGS := $(filter-out -std=gnu++17,$(CXXFLAGS))
24+
override CXXFLAGS += -std=gnu++2a -fconcepts -Wno-unused-function -mcmodel=medium -g
25+
26+
#override CARMCXXFLAGS += -O1 -mllvm -disable-llvm-optzns -disable-llvm-passes -march=native -fPIC -fno-builtin -fno-vectorize
27+
#override CARMCXXFLAGS += -march=native -fPIC -O1 -Xclang -disable-llvm-passes -g -fno-vectorize
28+
override CARMCXXFLAGS += -march=native -fPIC -O3 -fno-vectorize -fno-slp-vectorize
29+
30+
#must be first
31+
all: main
32+
33+
main_lib:
34+
noelle-load -load ~/CAT/lib/TRACKFMINIT.so -CAT main.bc -o main_init.bc
35+
noelle-norm main_init.bc -o main_norm.bc
36+
#noelle-enable main_norm.bc main_e.bc -noelle-disable-inliner -noelle-disable-scev-simplification -noelle-disable-whilifier -noelle-disable-loop-distribution
37+
noelle-load -load ~/CAT/lib/TRACKFMCHECKS.so -CAT main_norm.bc -o main_check.bc
38+
noelle-norm main_check.bc -o main_check_norm.bc
39+
noelle-load -load ~/CAT/lib/TRACKFMTRANSFORM.so -CAT main_check_norm.bc -o main_transform.bc
40+
noelle-norm main_transform.bc -o main_transform_norm.bc
41+
noelle-load -load ~/CAT/lib/TRACKFMLIBCTRANSFORM.so -CAT main_transform_norm.bc -o main_libctransform.bc
42+
noelle-norm main_libctransform.bc -o main_libctransform_norm.bc
43+
$(CARM_LLVM)/opt -O3 main_libctransform_norm.bc -o opt.bc
44+
$(CARM_LLVM)/llc $(CARM_LDX_FLAGS) opt.bc -o maint.o
45+
46+
main: $(librt_libs) $(RUNTIME_DEPS) $(lib_obj) main_lib
47+
objcopy --prefix-symbols=carm maint.o
48+
/home/TrackFM/symbol_redefine.sh
49+
$(CARM_LLVM)/clang -g -shared -o libcarmapp.so maint.o
50+
$(LDXX) -o $@ $(LDFLAGS) $(lib_obj) $(librt_libs) $(RUNTIME_LIBS) -L. -lcarmapp
51+
52+
ifneq ($(MAKECMDGOALS),clean)
53+
-include $(dep) # include all dep files in the makefile
54+
endif
55+
56+
#rule to generate a dep file by using the C preprocessor
57+
#(see man cpp for details on the - MM and - MT options)
58+
%.d: %.cpp
59+
@$(CXX) $(CXXFLAGS) $< -MM -MT $(@:.d=.o) >$@
60+
%.o: %.cpp
61+
$(CXX) $(CXXFLAGS) -c $< -o $@
62+
63+
.PHONY: clean
64+
clean:
65+
rm -f *.bc *.ll *.so *.o $(dep) main $(AIFM_PATH)/src/*.o $(CARM_PATH)/src/*.o
66+

0 commit comments

Comments
 (0)