11CXX =clang++
2+ CC =clang++
23GPUCPP ?= $(PWD ) /../..
34LIBDIR ?= $(GPUCPP ) /third_party/lib
45LIBSPEC ?= . $(GPUCPP ) /source
@@ -9,21 +10,68 @@ ifeq ($(shell $(CXX) -std=c++17 -x c++ -E -include array - < /dev/null > /dev/nu
910else
1011 STDLIB := -stdlib=libc++
1112endif
12- FLAGS=-std =c++17 $(STDLIB ) -I$(GPUCPP ) -I$(GPUCPP ) /third_party/headers -L$(GPUCPP ) /third_party/lib run.cpp -ldl -ldawn
13+
14+ CXXFLAGS=-std =c++17 -I$(GPUCPP ) -I$(GPUCPP ) /third_party/headers -I. -Iunittest_llmc
15+ CFLAGS =-Ofast -march=native -I. -Iunittest_llmc
16+
17+ LDFLAGS =$(STDLIB ) -L$(GPUCPP ) /third_party/lib -ldl -ldawn
18+ FLAGS =$(CXXFLAGS ) $(LDFLAGS )
19+
20+ ifeq ($(shell [ -d /opt/homebrew/opt/libomp/lib ] && echo "exists") , exists)
21+ CFLAGS += -Xclang -fopenmp -DOMP -I/opt/homebrew/opt/libomp/include
22+ LDFLAGS += -L/opt/homebrew/opt/libomp/lib -lomp
23+ $(info ✓ OpenMP found)
24+ else
25+ $(info ✗ OpenMP not found)
26+ endif
1327
1428run : ./build/$(TARGET ) dawnlib
1529 $(LIBSPEC ) && ./build/$(TARGET )
1630
31+ run_llm.c : ./build/test_gpt2 dawnlib
32+ $(LIBSPEC ) && $<
33+ llm.c :
34+ if [ ! -d llm.c ]; then git clone git@github.com:karpathy/llm.c.git ; fi
35+
36+ gpt2_124M.bin : llm.c
37+ if [ ! -f $@ ]; then ./llm.c/dev/download_starter_pack.sh ; \
38+ ln -s ./llm.c/gpt2_124M.bin ; \
39+ ln -s ./llm.c/gpt2_124M_debug_state.bin ; \
40+ fi
41+
42+ build/test_gpt2 : llm.c build/unittest_kernels.o gpt2_124M.bin
43+ mkdir -p build
44+ sed -i -e ' s/void encoder_forward(/void ENCODER_FORWARD_CPU(/g' llm.c/train_gpt2.c
45+ sed -i -e ' s/void layernorm_forward(/void LAYERNORM_FORWARD_CPU(/g' llm.c/train_gpt2.c
46+ sed -i -e ' s/void matmul_forward(/void MATMUL_FORWARD_CPU(/g' llm.c/train_gpt2.c
47+ sed -i -e ' s/void attention_forward(/void ATTENTION_FORWARD_CPU(/g' llm.c/train_gpt2.c
48+ sed -i -e ' s/void gelu_forward(/void GELU_FORWARD_CPU(/g' llm.c/train_gpt2.c
49+ sed -i -e ' s/void residual_forward(/void RESIDUAL_FORWARD_CPU(/g' llm.c/train_gpt2.c
50+ sed -i -e ' s/void softmax_forward(/void SOFTMAX_FORWARD_CPU(/g' llm.c/train_gpt2.c
51+ sed -i -e ' s/void crossentropy_forward(/void CROSSENTROPY_FORWARD_CPU(/g' llm.c/train_gpt2.c
52+ sed -i -e ' s/void encoder_backward(/void ENCODER_BACKWARD_CPU(/g' llm.c/train_gpt2.c
53+ sed -i -e ' s/void layernorm_backward(/void LAYERNORM_BACKWARD_CPU(/g' llm.c/train_gpt2.c
54+ sed -i -e ' s/void matmul_backward(/void MATMUL_BACKWARD_CPU(/g' llm.c/train_gpt2.c
55+ sed -i -e ' s/void attention_backward(/void ATTENTION_BACKWARD_CPU(/g' llm.c/train_gpt2.c
56+ sed -i -e ' s/void gelu_backward(/void GELU_BACKWARD_CPU(/g' llm.c/train_gpt2.c
57+ sed -i -e ' s/void residual_backward(/void RESIDUAL_BACKWARD_CPU(/g' llm.c/train_gpt2.c
58+ sed -i -e ' s/void crossentropy_softmax_backward(/void CROSSENTROPY_SOFTMAX_BACKWARD_CPU(/g' llm.c/train_gpt2.c
59+ grep -q " ^#include \" unittest_kernels.h\" " llm.c/train_gpt2.c || sed -i ' 1i#include \"unittest_kernels.h\"' llm.c/train_gpt2.c
60+ $(CC ) $(CFLAGS ) $(LDFLAGS ) -o $@ llm.c/test_gpt2.c build/unittest_kernels.o
61+
62+ build/unittest_kernels.o : unittest_llmc/unittest_kernels.cpp unittest_llmc/unittest_kernels.h kernels.h
63+ mkdir -p build && $(CXX ) $(CXXFLAGS ) -DNDEBUG -c -o $@ $<
64+
1765dawnlib : $(if $(wildcard $(GPUCPP ) /third_party/lib/libdawn.so $(GPUCPP ) /third_party/lib/libdawn.dylib) ,,run_setup)
1866
1967run_setup : check-python
2068 cd $(GPUCPP ) && python3 setup.py
2169
2270build/$(TARGET ) : run.cpp
23- mkdir -p build && $(CXX ) $(FLAGS ) -DNDEBUG -o ./build/ $( TARGET )
71+ mkdir -p build && $(CXX ) $(FLAGS ) -DNDEBUG -o $@ $<
2472
2573debug : run.cpp
26- mkdir -p build && $(CXX ) $(FLAGS ) -g -o ./build/$(TARGET )
74+ mkdir -p build && $(CXX ) $(FLAGS ) -g -o ./build/$(TARGET ) $<
2775
2876clean :
2977 read -r -p " This will delete the contents of build/*. Are you sure? [CTRL-C to abort] " response && rm -rf build/*
0 commit comments