59 lines
1.9 KiB
Bash
Executable File
59 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 快速测试脚本 - 验证run_experiments.sh的基本功能
|
|
|
|
echo "=========================================="
|
|
echo "快速实验测试"
|
|
echo "=========================================="
|
|
|
|
# 设置较小的测试参数
|
|
MATRIX_SIZES="512 1024"
|
|
MPI_PROCESSES="1 2"
|
|
OPENMP_THREADS="1 2"
|
|
|
|
OUTPUT_FILE="test_experiment_results.csv"
|
|
SERIAL_OUTPUT="test_serial_results.csv"
|
|
|
|
# 创建输出文件
|
|
echo "Experiment,M,N,K,MPI_Processes,OpenMP_Threads,Time_ms,Speedup,Efficiency" > $OUTPUT_FILE
|
|
echo "M,N,K,Time_ms" > $SERIAL_OUTPUT
|
|
|
|
echo "1. 串行基准测试..."
|
|
for SIZE in $MATRIX_SIZES; do
|
|
echo " 测试 ${SIZE}x${SIZE}x${SIZE}"
|
|
TIME=$(./gemm_serial $SIZE $SIZE $SIZE 0 | grep "matmul:" | awk '{print $2}')
|
|
echo "$SIZE,$SIZE,$SIZE,$TIME" >> $SERIAL_OUTPUT
|
|
done
|
|
|
|
echo ""
|
|
echo "2. MPI并行测试..."
|
|
export OMP_NUM_THREADS=1
|
|
for SIZE in $MATRIX_SIZES; do
|
|
SERIAL_TIME=$(grep "^$SIZE," $SERIAL_OUTPUT | cut -d',' -f4)
|
|
echo " 矩阵 ${SIZE}x${SIZE}x${SIZE}, 串行时间: ${SERIAL_TIME} ms"
|
|
|
|
for NP in $MPI_PROCESSES; do
|
|
echo " 测试 $NP 个MPI进程..."
|
|
TIME=$(mpirun --oversubscribe -np $NP ./gemm_parallel $SIZE $SIZE $SIZE | grep "mpi matmul:" | awk '{print $3}')
|
|
|
|
if [ ! -z "$TIME" ]; then
|
|
SPEEDUP=$(echo "scale=4; $SERIAL_TIME / $TIME" | bc)
|
|
EFFICIENCY=$(echo "scale=4; $SPEEDUP / $NP" | bc)
|
|
echo " 时间: ${TIME} ms, 加速比: $SPEEDUP, 效率: $EFFICIENCY"
|
|
echo "Exp1,$SIZE,$SIZE,$SIZE,$NP,1,$TIME,$SPEEDUP,$EFFICIENCY" >> $OUTPUT_FILE
|
|
fi
|
|
done
|
|
done
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "快速测试完成!"
|
|
echo "结果文件: $OUTPUT_FILE"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "查看结果:"
|
|
cat $OUTPUT_FILE
|
|
echo ""
|
|
echo "如果以上测试正常,则可以运行完整的实验:"
|
|
echo " ./run_experiments.sh"
|