#!/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"