GPUKernelContest/example/build_and_run.sh

149 lines
4.3 KiB
Bash

#!/bin/bash
# GPU高性能并行计算算法优化竞赛 - 统一编译脚本
# 调用各个独立的build_and_run脚本来编译所有算法
# 加载公共配置
source "$(dirname "$0")/build_common.sh"
# 显示帮助信息
show_help() {
echo "GPU算法竞赛统一编译和运行脚本"
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " --help 显示帮助信息"
echo " --build-only 仅编译所有算法,不运行测试"
echo " --run_reduce 编译并运行ReduceSum算法测试"
echo " --run_sort 编译并运行SortPair算法测试"
echo " --run_topk 编译并运行TopkPair算法测试"
echo ""
echo "示例:"
echo " $0 # 编译并运行所有测试(默认行为)"
echo " $0 --build-only # 仅编译所有算法"
echo " $0 --run_sort # 编译并运行SortPair测试"
echo ""
echo "单独算法脚本:"
echo " ./build_and_run_reduce_sum.sh # 仅处理ReduceSum"
echo " ./build_and_run_sort_pair.sh # 仅处理SortPair"
echo " ./build_and_run_topk_pair.sh # 仅处理TopkPair"
echo ""
}
# 解析命令行参数
RUN_MODE="run_all" # 默认为编译并运行所有测试
while [[ $# -gt 0 ]]; do
case $1 in
--help)
show_help
exit 0
;;
--build-only)
RUN_MODE="build_only"
shift
;;
--run_reduce)
RUN_MODE="run_reduce"
shift
;;
--run_sort)
RUN_MODE="run_sort"
shift
;;
--run_topk)
RUN_MODE="run_topk"
shift
;;
*)
print_error "未知选项: $1"
show_help
exit 1
;;
esac
done
if [ "$RUN_MODE" = "build_only" ]; then
print_info "开始编译所有算法..."
else
print_info "开始编译并运行所有算法..."
fi
print_info "工作目录: $(pwd)"
print_info "编译时间: $(date '+%Y-%m-%d %H:%M:%S')"
show_build_config
# 清理构建目录
if [ -d "$BUILD_DIR" ]; then
print_info "清理现有构建目录: $BUILD_DIR"
rm -rf "$BUILD_DIR"
fi
# 根据运行模式执行相应操作
case "$RUN_MODE" in
"build_only")
print_info "编译所有算法..."
print_info "[1/3] 编译ReduceSum..."
./build_and_run_reduce_sum.sh --build-only
if [ $? -ne 0 ]; then
print_error "ReduceSum编译失败"
exit 1
fi
print_info "[2/3] 编译SortPair..."
./build_and_run_sort_pair.sh --build-only
if [ $? -ne 0 ]; then
print_error "SortPair编译失败"
exit 1
fi
print_info "[3/3] 编译TopkPair..."
./build_and_run_topk_pair.sh --build-only
if [ $? -ne 0 ]; then
print_error "TopkPair编译失败"
exit 1
fi
print_success "所有算法编译完成!"
echo ""
echo "可执行文件:"
echo " $BUILD_DIR/test_reducesum - ReduceSum算法测试"
echo " $BUILD_DIR/test_sortpair - SortPair算法测试"
echo " $BUILD_DIR/test_topkpair - TopkPair算法测试"
echo ""
echo "使用方法:"
echo " ./$BUILD_DIR/test_reducesum [correctness|performance|all]"
echo " ./$BUILD_DIR/test_sortpair [correctness|performance|all]"
echo " ./$BUILD_DIR/test_topkpair [correctness|performance|all]"
;;
"run_all")
print_info "编译并运行所有算法测试..."
print_info "[1/3] ReduceSum..."
./build_and_run_reduce_sum.sh --run all
print_info "[2/3] SortPair..."
./build_and_run_sort_pair.sh --run all
print_info "[3/3] TopkPair..."
./build_and_run_topk_pair.sh --run all
print_success "所有测试完成!"
;;
"run_reduce")
print_info "编译并运行ReduceSum测试..."
./build_and_run_reduce_sum.sh --run all
;;
"run_sort")
print_info "编译并运行SortPair测试..."
./build_and_run_sort_pair.sh --run all
;;
"run_topk")
print_info "编译并运行TopkPair测试..."
./build_and_run_topk_pair.sh --run all
;;
esac