Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test bench #127

Open
wants to merge 116 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
93a5cda
add all_reduce_group test
Panlichen Jul 8, 2022
725b0d7
simple group allreduce
Panlichen Jul 13, 2022
06c97da
nccl group bigger
Panlichen Jul 14, 2022
560f9eb
log for ncclGroupStart/End
Panlichen Jul 16, 2022
abe8f5c
add non group all_reduce in simple
Panlichen Jul 16, 2022
6990dc3
half ofccl_all_reduce
Panlichen Jul 16, 2022
44c40d8
Merge branch 'master' of github.com:Panlichen/nccl-tests
Panlichen Jul 16, 2022
b8a749a
Simple not really necessary, yet no harm to keep it
Panlichen Jul 16, 2022
02a914e
ofccl test file
Panlichen Jul 18, 2022
8eba16f
run startColl exactly as we want
Panlichen Jul 18, 2022
d6a4d47
ofccl_all_reduce.cu
Panlichen Jul 18, 2022
5e3c98d
add log
Panlichen Jul 19, 2022
d3de021
add -M option: use seprate ncclComm for different coll op, even with …
Panlichen Jul 19, 2022
76b1cd7
remove log
Panlichen Jul 19, 2022
a466914
use prepare and done in nccl-tests
Panlichen Jul 28, 2022
9b362b5
check no reused ncclComm in ofcclCommList
Panlichen Aug 9, 2022
818c8e3
invoke ofcclDestroy
Panlichen Aug 9, 2022
67e70b9
use ofcclRunAllReduce
Panlichen Aug 23, 2022
97f58bc
use callback
Panlichen Aug 26, 2022
8a3d5f8
use func-ptr for callback, instead of std::function and lambda
Panlichen Aug 26, 2022
a3a1aea
stuck
Panlichen Aug 28, 2022
7ff3ea5
completeColl in warmup result in stuck
Panlichen Aug 28, 2022
8c5df9e
Merge pull request #1 from Panlichen/aggregate_waiting_cqes
Panlichen Aug 28, 2022
ee76beb
+lock
Panlichen Aug 28, 2022
3f0a8fe
tidy log
Panlichen Aug 29, 2022
0bd6d6a
nccl-tests run exactly once
Panlichen Sep 5, 2022
9a35e7f
ad-hoc check
Panlichen Sep 8, 2022
22b869f
wierd check
Panlichen Sep 9, 2022
732f8bd
activate -n, can run multi-iters
Panlichen Sep 9, 2022
85d5cbd
+ warmup
Panlichen Sep 26, 2022
090185c
fix completeColl in warmup
Panlichen Sep 26, 2022
17197fa
try context
Panlichen Sep 30, 2022
5f399fd
bugfix: seenCqe[miter] = 0; in warmup
Panlichen Oct 2, 2022
5cd2cb8
polish callback
Panlichen Oct 6, 2022
0148628
check OK
Panlichen Oct 9, 2022
b6027be
check ok
Panlichen Oct 9, 2022
24290c6
restore semi-original NCCL's BenchTime
Panlichen Oct 9, 2022
d609039
run check smoothly
Panlichen Oct 12, 2022
4cd2091
finalize check
Panlichen Oct 13, 2022
b8dc018
adapt to volunteer quit
Panlichen Oct 13, 2022
4ebe9e5
Merge branch 'master' of github.com:Panlichen/nccl-tests
Panlichen Oct 13, 2022
bd10523
adapt to volunteer quit
Panlichen Oct 13, 2022
74d4f0d
keep the report log
Panlichen Oct 14, 2022
ed7f645
try pure inplace
Panlichen Oct 17, 2022
eed57ca
log format
Panlichen Oct 17, 2022
0ef76cc
manual buffer size done
Panlichen Oct 18, 2022
d6cad8e
adjust log
Panlichen Oct 19, 2022
cec88ef
+ nccl_manual_size
Panlichen Oct 20, 2022
34f1b12
nccl manual size seems ok
Panlichen Oct 20, 2022
c84dd89
fix manual size bug
Panlichen Oct 20, 2022
93668dc
non-homogeneous nccl manual size
Panlichen Oct 20, 2022
71b40c7
+ cudadev in cbArgs for ofccl manual size
Panlichen Oct 22, 2022
f2b285d
161 maunal size from resnet
Panlichen Oct 24, 2022
a32587b
accurate damie
Panlichen Oct 24, 2022
5d07bca
.
Panlichen Oct 24, 2022
4f06775
aggressive no sync
Panlichen Oct 31, 2022
40fbb70
a new permutation from oneflow
Panlichen Nov 7, 2022
e98b271
log
Panlichen Nov 12, 2022
3598de4
suit 8 cards
Panlichen Nov 14, 2022
bcf3b87
use prepareDone
Panlichen Nov 18, 2022
0ccfcc9
nccl ms different order
Panlichen Nov 20, 2022
2b19a59
usleep
Panlichen Nov 26, 2022
b3b6323
+ ofccl_test.sh
Panlichen Nov 26, 2022
e2bfe2e
scripts
Panlichen Nov 29, 2022
34cd275
script
Panlichen Nov 30, 2022
4e81620
scripts
Panlichen Dec 1, 2022
0c3718e
scripts
Panlichen Dec 5, 2022
dba5947
scripts
Panlichen Dec 7, 2022
10fefc6
scripts
Panlichen Dec 8, 2022
7a79d98
little ms
Panlichen Dec 9, 2022
7b37cea
+ nccl_test.sh
Panlichen Dec 19, 2022
5bb88a1
fix bug in nccl_tests.sh
Panlichen Dec 19, 2022
d9f1a55
+ run multi test scripts
Panlichen Dec 21, 2022
f505977
+order
Panlichen Dec 21, 2022
1c9a007
28 is occupied
Panlichen Dec 22, 2022
54ff526
fix bug in nccl-tests/src_manual_size/ofccl_all_reduce_ms.cu
Panlichen Dec 22, 2022
57875d6
第一次完成 auto_test 开发
Panlichen Dec 23, 2022
23a25ea
文件命名bug修复
Panlichen Dec 23, 2022
9daa76c
deltaSec看起来统计得偏大了
Panlichen Dec 23, 2022
1f58d48
meaningless NEW_TIMER
Panlichen Dec 23, 2022
fc09438
check frequency
Panlichen Dec 23, 2022
266d3c8
update xls name and ndev
Panlichen Dec 23, 2022
b034d10
Merge branch 'master' into auto_test
Panlichen Dec 23, 2022
f0cf272
Merge pull request #2 from Panlichen/auto_test
Panlichen Dec 23, 2022
4702178
add log
Panlichen Dec 23, 2022
5f7b4bf
update env
Panlichen Dec 23, 2022
5ced1a0
+nccl ofccl run.sh
Panlichen Dec 24, 2022
875d1d5
report rank 0 avg time
Panlichen Dec 25, 2022
386ee92
scripts
Panlichen Dec 25, 2022
13567f2
nccl show each kernel time
Panlichen Dec 25, 2022
12969b5
能处理均值
Dec 27, 2022
29d300b
time页表 R列-O列
Dec 27, 2022
2b4b937
nccl kern 求平均
Dec 27, 2022
93b9ddc
输出 ori
Dec 28, 2022
4321b54
编译 QE_oricpp 增加一列实际的byte数,增加 Ex-Ox,修改average
Dec 28, 2022
d3f652d
+ in order ms
Panlichen Dec 29, 2022
5135aa3
输出 totalCnt
Dec 29, 2022
ffcbfba
script
Panlichen Dec 29, 2022
8dab62a
Merge branch 'master' into auto_test2
Panlichen Dec 29, 2022
c0454ff
Merge pull request #3 from Panlichen/auto_test2
Panlichen Dec 29, 2022
57ee21f
scripts
Panlichen Dec 30, 2022
9ee7202
scripts
Panlichen Jan 1, 2023
665de43
scripts
Panlichen Jan 6, 2023
b5a42cc
scripts
Panlichen Jan 6, 2023
1970187
scripts
Panlichen Jan 8, 2023
ceb3a5a
scripts
Panlichen Jan 10, 2023
ac30fd4
datatype in cmd; MY_NUM_DEV as cmd line param
Panlichen Jan 11, 2023
82c2a8e
scripts
Panlichen Jan 13, 2023
c760c82
+ occl AllGather
Panlichen Jan 14, 2023
abd0c14
5555 remove NCCL_MIN_NCHANNELS limit T^T TAT T_T T-T
Panlichen Jan 14, 2023
bbb04c6
+ ofccl ReduceScatter
Panlichen Jan 15, 2023
1f099a1
+ occl reduce
Panlichen Jan 15, 2023
6c075fd
+ofccl_broadcast; fix DEBUG_NT
Panlichen Jan 15, 2023
37b2463
精简前
Jan 19, 2023
d81c257
测试 五种操作
Jan 20, 2023
3bfb750
去除 xlrd
Jan 27, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,11 @@
#
# See LICENCE.txt for license information
/build

.clangd

.vscode

*result*/
*.xls
*.out
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ All tests support the same set of arguments :
* `-n,--iters <iteration count>` number of iterations. Default : 20.
* `-w,--warmup_iters <warmup iteration count>` number of warmup iterations (not timed). Default : 5.
* `-m,--agg_iters <aggregation count>` number of operations to aggregate together in each iteration. Default : 1.
* `-M,--multi_iters <multi seprate ncclComm iteration count>` number of operations with seprate ncclComm in each iteration. Default : 1.
* `-a,--average <0/1/2/3>` Report performance as an average across all ranks (MPI=1 only). <0=Rank0,1=Avg,2=Min,3=Max>. Default : 1.
* Test operation
* `-p,--parallel_init <0/1>` use threads to initialize NCCL in parallel. Default : 0.
Expand Down
87 changes: 87 additions & 0 deletions nccl_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
clear

export MY_NUM_DEV=$1

cd /home/panlichen/work2/nccl-tests
export LD_LIBRARY_PATH=/home/panlichen/work2/ofccl/build/lib
export NCCL_PROTO=Simple
export NCCL_ALGO=Ring
# export NCCL_MAX_NCHANNELS=1
# export NCCL_MIN_NCHANNELS=1
# export NCCL_NTHREADS=64

if [ -z $BINARY ];then
BINARY="DEBUG"
# BINARY="MS"
# BINARY="PERF"
fi

FUNC=$2

if [ "$FUNC" == "AR" ]; then
target="./build/all_reduce_perf"
elif [ "$FUNC" == "AG" ]; then
target="./build/all_gather_perf"
elif [ "$FUNC" == "RS" ]; then
target="./build/reduce_scatter_perf"
elif [ "$FUNC" == "R" ]; then
target="./build/reduce_perf"
elif [ "$FUNC" == "B" ]; then
target="./build/broadcast_perf"
fi


if [ "$BINARY" == "DEBUG" ];then
if [ $MY_NUM_DEV = 4 ]; then
export CUDA_VISIBLE_DEVICES=0,1,4,5
fi
export NITER=5
export NBYTES=64M
export WARMITER=2
export MITER=1
export CHECK=0
elif [ "$BINARY" == "PERF" ];then
if [ $MY_NUM_DEV = 4 ]; then
export CUDA_VISIBLE_DEVICES=0,1,4,5
fi
export NITER=4
export NBYTES=8K
export WARMITER=2
export MITER=4
export CHECK=0
elif [ "$BINARY" == "MS" ];then
if [ $MY_NUM_DEV = 4 ]; then
export CUDA_VISIBLE_DEVICES=0,1,4,5
fi
# export NITER=200
# export SHOW_ALL_PREPARED_COLL=1
# export WARMITER=0
# export NBYTES=8K
# export MITER=4
fi

export NSYS_FILE="nccl"
export NCU_FILE="nccl"

if [ -z $RUN_TYPE ];then
RUN_TYPE="PURE"
# RUN_TYPE="GDB"
# RUN_TYPE="NSYS"
# RUN_TYPE="NCU"
fi

if [ "$RUN_TYPE" == "PURE" ];then
cmd="$target -b $NBYTES -e $NBYTES -f 2 -t $MY_NUM_DEV -g 1 -n $NITER -w $WARMITER -c $CHECK -m $MITER"
elif [ "$RUN_TYPE" == "GDB" ];then
cmd="cuda-gdb $target"
# set args -b 8M -e 8M -f 2 -t 2 -g 1 -n 1 -w 0 -c 0
elif [ "$RUN_TYPE" == "NSYS" ];then
cmd="nsys profile -f true --trace=cuda,cudnn,cublas,osrt,nvtx -o /home/panlichen/work2/ofccl/log/nsys/$NSYS_FILE $target -b $NBYTES -e $NBYTES -f 2 -t $MY_NUM_DEV -g 1 -n $NITER -w $WARMITER -c $CHECK -m $MITER"
elif [ "$RUN_TYPE" == "NCU" ];then
# cmd="ncu --nvtx -f -o /home/panlichen/work2/ofccl/log/nsys/$NCU_FILE $target -b $NBYTES -e $NBYTES -f 2 -t $MY_NUM_DEV -g 1 -n $NITER -w $WARMITER -c $CHECK -m $MITER"
cmd="ncu $target -b $NBYTES -e $NBYTES -f 2 -t $MY_NUM_DEV -g 1 -n $NITER -w $WARMITER -c $CHECK -m $MITER"
fi

echo cmd=$cmd
$cmd #> /home/panlichen/work2/ofccl/log/ofccl-2ms-coll-master.log

166 changes: 166 additions & 0 deletions ofccl_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
clear

export MY_NUM_DEV=$1

export DEBUG_CC=1
export DEBUG_ENQ=1

unset DEBUG_CC
unset DEBUG_ENQ

export DEBUG_NT=1
unset DEBUG_NT

cd /home/panlichen/work2/nccl-tests
export LD_LIBRARY_PATH=/home/panlichen/work2/ofccl/build/lib
export NCCL_PROTO=Simple
export NCCL_ALGO=Ring
# export NCCL_MAX_NCHANNELS=1
# export NCCL_MIN_NCHANNELS=1
# export NCCL_NTHREADS=64

export CHECK=0
export SHOW_ALL_PREPARED_COLL=0

export TRAVERSE_TIMES=10
export TOLERANT_UNPROGRESSED_CNT=10000
export BASE_CTX_SWITCH_THRESHOLD=80
export BOUNS_SWITCH_4_PROCESSED_COLL=0
export DEV_TRY_ROUND=10
export CHECK_REMAINING_SQE_INTERVAL=10000
export DEBUG_FILE="/home/panlichen/work2/ofccl/log/oneflow_cpu_rank_"

rm -rf /home/panlichen/work2/ofccl/log
mkdir -p /home/panlichen/work2/ofccl/log

# export ENABLE_VQ=1 # volunteer quit
# export TOLERANT_FAIL_CHECK_SQ_CNT=5000
# export CNT_BEFORE_QUIT=5

echo TRAVERSE_TIMES=$TRAVERSE_TIMES
echo TOLERANT_UNPROGRESSED_CNT=$TOLERANT_UNPROGRESSED_CNT
echo BASE_CTX_SWITCH_THRESHOLD=$BASE_CTX_SWITCH_THRESHOLD
echo BOUNS_SWITCH_4_PROCESSED_COLL=$BOUNS_SWITCH_4_PROCESSED_COLL
echo DEV_TRY_ROUND=$DEV_TRY_ROUND
echo CHECK_REMAINING_SQE_INTERVAL=$CHECK_REMAINING_SQE_INTERVAL
echo DEBUG_FILE=$DEBUG_FILE

if [ ! -z $ENABLE_VQ ];then
echo TOLERANT_FAIL_CHECK_SQ_CNT=$TOLERANT_FAIL_CHECK_SQ_CNT
echo CNT_BEFORE_QUIT=$CNT_BEFORE_QUIT
fi

FUNC=$2
if [ -z $FUNC ]; then
FUNC="AR"
fi

if [ "$FUNC" == "AR" ]; then
target="./build/ofccl_all_reduce_perf"
elif [ "$FUNC" == "AG" ]; then
target="./build/ofccl_all_gather_perf"
elif [ "$FUNC" == "RS" ]; then
target="./build/ofccl_reduce_scatter_perf"
elif [ "$FUNC" == "R" ]; then
target="./build/ofccl_reduce_perf"
elif [ "$FUNC" == "B" ]; then
target="./build/ofccl_broadcast_perf"
fi

if [ -z $BINARY ];then
BINARY="DEBUG"
# BINARY="MS"
# BINARY="PERF"
fi

if [ "$BINARY" == "DEBUG" ];then
if [ $MY_NUM_DEV = 4 ]; then
export CUDA_VISIBLE_DEVICES=0,1,4,5
fi
if [ $MY_NUM_DEV = 2 ]; then
export CUDA_VISIBLE_DEVICES=4,5
fi
export NITER=5
export NBYTES=64M
export WARMITER=2
export MITER=1
elif [ "$BINARY" == "PERF" ];then
if [ $MY_NUM_DEV = 4 ]; then
export CUDA_VISIBLE_DEVICES=0,1,4,5
fi
export NITER=8
export NBYTES=8K
export WARMITER=2
export MITER=1
elif [ "$BINARY" == "MS" ];then
target="./build/ofccl_all_reduce_ms_perf"
if [ $MY_NUM_DEV = 4 ]; then
export CUDA_VISIBLE_DEVICES=0,1,4,5
fi
export NITER=200
export SHOW_ALL_PREPARED_COLL=1
export WARMITER=0
export NBYTES=8K
export MITER=4
export CHECK=0
fi

export NSYS_FILE="ofccl"
export NCU_FILE="ofccl"

if [ -z $RUN_TYPE ];then
RUN_TYPE="PURE"
# RUN_TYPE="GDB"
# RUN_TYPE="NSYS"
# RUN_TYPE="NCU"
fi

# typedef enum { ncclInt8 = 0, ncclChar = 0,
# ncclUint8 = 1,
# ncclInt32 = 2, ncclInt = 2,
# ncclUint32 = 3,
# ncclInt64 = 4,
# ncclUint64 = 5,
# ncclFloat16 = 6, ncclHalf = 6,
# ncclFloat32 = 7, ncclFloat = 7,
# ncclFloat64 = 8, ncclDouble = 8,
# #if defined(__CUDA_BF16_TYPES_EXIST__)
# ncclBfloat16 = 9,
# ncclNumTypes = 10
# #else
# ncclNumTypes = 9
# #endif
# } ncclDataType_t;

# 用这个:
# const char *test_typenames[ncclNumTypes] = {"int8",
# "uint8",
# "int32",
# "uint32",
# "int64",
# "uint64",
# "half",
# "float",
# "double"
# #if defined(__CUDA_BF16_TYPES_EXIST__) && \
# NCCL_VERSION_CODE >= NCCL_VERSION(2, 10, 0)
# ,
# "bfloat16"
# #endif
# };

if [ "$RUN_TYPE" == "PURE" ];then
cmd="$target -b $NBYTES -e $NBYTES -f 2 -t $MY_NUM_DEV -g 1 -n $NITER -w $WARMITER -c $CHECK -M $MITER" # -d half
elif [ "$RUN_TYPE" == "GDB" ];then
cmd="cuda-gdb $target"
# set args -b 64 -e 64 -f 2 -t 2 -g 1 -n 1 -w 0 -c 0
elif [ "$RUN_TYPE" == "NSYS" ];then
cmd="nsys profile -f true --trace=cuda,cudnn,cublas,osrt,nvtx -o /home/panlichen/work2/ofccl/log/nsys/$NSYS_FILE $target -b $NBYTES -e $NBYTES -f 2 -t $MY_NUM_DEV -g 1 -n $NITER -w $WARMITER -c $CHECK -M $MITER"
elif [ "$RUN_TYPE" == "NCU" ];then
# cmd="ncu --nvtx -f -o /home/panlichen/work2/ofccl/log/nsys/$NCU_FILE $target -b $NBYTES -e $NBYTES -f 2 -t $MY_NUM_DEV -g 1 -n $NITER -w $WARMITER -c $CHECK -M $MITER"
cmd="ncu $target -b $NBYTES -e $NBYTES -f 2 -t $MY_NUM_DEV -g 1 -n $NITER -w $WARMITER -c $CHECK -M $MITER"
fi

echo cmd=$cmd
$cmd #> /home/panlichen/work2/ofccl/log/ofccl.log

42 changes: 28 additions & 14 deletions src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
CUDA_HOME ?= /usr/local/cuda
PREFIX ?= /usr/local
VERBOSE ?= 0
DEBUG ?= 0
DEBUG_NT ?= 0

CUDA_LIB ?= $(CUDA_HOME)/lib64
CUDA_INC ?= $(CUDA_HOME)/include
Expand All @@ -19,27 +19,39 @@ CUDA_MAJOR = $(shell echo $(CUDA_VERSION) | cut -d "." -f 1)

# Better define NVCC_GENCODE in your environment to the minimal set
# of archs to reduce compile time.
ifeq ($(shell test "0$(CUDA_MAJOR)" -ge 11; echo $$?),0)
NVCC_GENCODE ?= -gencode=arch=compute_60,code=sm_60 \
-gencode=arch=compute_61,code=sm_61 \
-gencode=arch=compute_70,code=sm_70 \
-gencode=arch=compute_80,code=sm_80 \
-gencode=arch=compute_80,code=compute_80
# ifeq ($(shell test "0$(CUDA_MAJOR)" -ge 11; echo $$?),0)
# NVCC_GENCODE ?= -gencode=arch=compute_60,code=sm_60 \
# -gencode=arch=compute_61,code=sm_61 \
# -gencode=arch=compute_70,code=sm_70 \
# -gencode=arch=compute_80,code=sm_80 \
# -gencode=arch=compute_80,code=compute_80
# else
# NVCC_GENCODE ?= -gencode=arch=compute_35,code=sm_35 \
# -gencode=arch=compute_50,code=sm_50 \
# -gencode=arch=compute_60,code=sm_60 \
# -gencode=arch=compute_61,code=sm_61 \
# -gencode=arch=compute_70,code=sm_70 \
# -gencode=arch=compute_70,code=compute_70
# endif

CUDA_GENCODE_3080 = -gencode=arch=compute_86,code=sm_86
CUDA_GENCODE_2080 = -gencode=arch=compute_75,code=sm_75

CARDNAME ?= 3080
ifeq ($(CARDNAME), 3080)
NVCC_GENCODE ?= $(CUDA_GENCODE_3080) $(CUDA_PTX_INUSE)
else
NVCC_GENCODE ?= -gencode=arch=compute_35,code=sm_35 \
-gencode=arch=compute_50,code=sm_50 \
-gencode=arch=compute_60,code=sm_60 \
-gencode=arch=compute_61,code=sm_61 \
-gencode=arch=compute_70,code=sm_70 \
-gencode=arch=compute_70,code=compute_70
NVCC_GENCODE ?= $(CUDA_GENCODE_2080) $(CUDA_PTX_INUSE)
endif
$(info CARDNAME $(CARDNAME))
$(info NVCC_GENCODE $(NVCC_GENCODE))

NVCUFLAGS := -ccbin $(CXX) $(NVCC_GENCODE) -std=c++11

LDFLAGS := -L${CUDA_LIB} -lcudart -lrt
NVLDFLAGS := -L${CUDA_LIB} -l${CUDARTLIB} -lrt

ifeq ($(DEBUG), 0)
ifeq ($(DEBUG_NT), 0)
NVCUFLAGS += -O3 -g
CXXFLAGS += -O3 -g
else
Expand Down Expand Up @@ -72,6 +84,8 @@ endif
LIBRARIES += nccl
NVLDFLAGS += $(LIBRARIES:%=-l%)

$(info CARDNAME $(NVCUFLAGS))

DST_DIR := $(BUILDDIR)
SRC_FILES := $(wildcard *.cu)
OBJ_FILES := $(SRC_FILES:%.cu=${DST_DIR}/%.o)
Expand Down
Loading