You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写针对多组文件对运行带指定参数的MPI程序的脚本需求

我来帮你写一个实用的Bash脚本来批量处理这些MPI程序的运行任务,两种方案供你选择,看哪种更符合你的需求:

方案一:静态配置文件组的脚本

这个方案适合你提前知道所有要处理的文件组和对应SIZE值的情况,把配置直接写在脚本里,运行起来很方便:

#!/bin/bash

# -------------------------- 配置区 --------------------------
# 设置MPI并行进程数
MPI_NP=4
# 指定你的MPI可执行文件路径(如果不在当前目录,写绝对路径)
EXE="./myexe"

# 定义所有要处理的文件组:每行格式为 "文件前缀 对应SIZE值"
# 比如"abc 10"对应abc.mtx、abc.txt和-SIZE 10
file_groups=(
    "abc 10"
    "def 20"
    "ghi 15"
    "jkl 25"
)
# -----------------------------------------------------------

# 循环处理每个文件组
for group in "${file_groups[@]}"; do
    # 拆分出文件前缀和SIZE值
    prefix=$(echo "$group" | awk '{print $1}')
    size=$(echo "$group" | awk '{print $2}')
    
    # 构造对应的两个输入文件名
    file_mtx="${prefix}.mtx"
    file_txt="${prefix}.txt"
    
    # 提前检查文件是否存在,避免程序报错
    if [[ ! -f "$file_mtx" ]]; then
        echo "⚠️ 警告:文件 $file_mtx 不存在,跳过该组"
        continue
    fi
    if [[ ! -f "$file_txt" ]]; then
        echo "⚠️ 警告:文件 $file_txt 不存在,跳过该组"
        continue
    fi
    
    # 打印要执行的命令(方便调试)
    echo "🚀 正在运行:mpirun -np $MPI_NP $EXE $file_mtx $file_txt -SIZE $size"
    # 实际执行MPI命令
    mpirun -np "$MPI_NP" "$EXE" "$file_mtx" "$file_txt" -SIZE "$size"
    
    # 检查命令执行结果,给出反馈
    if [[ $? -ne 0 ]]; then
        echo "❌ 错误:该组运行失败(前缀:$prefix,SIZE:$size)"
    else
        echo "✅ 成功完成:前缀 $prefix,SIZE $size"
    fi
    echo "--------------------------------------------------------"
done

使用方法

  1. 把上面的代码保存为run_mpi_batch.sh
  2. 修改配置区的MPI_NP、EXE和file_groups,匹配你的实际需求
  3. 给脚本添加执行权限:chmod +x run_mpi_batch.sh
  4. 运行脚本:./run_mpi_batch.sh

方案二:命令行传入文件组的脚本

如果你的文件组经常变动,不想每次修改脚本,这个方案更灵活——直接在运行脚本时传入要处理的文件组:

#!/bin/bash

# -------------------------- 配置区 --------------------------
MPI_NP=4
EXE="./myexe"
# -----------------------------------------------------------

# 检查用户是否传入了参数
if [[ $# -eq 0 ]]; then
    echo "用法:$0 <文件前缀:SIZE> [<文件前缀:SIZE> ...]"
    echo "示例:$0 abc:10 def:20 ghi:15"
    exit 1
fi

# 处理每个传入的参数
for arg in "$@"; do
    # 用冒号拆分前缀和SIZE值
    IFS=':' read -r prefix size <<< "$arg"
    
    file_mtx="${prefix}.mtx"
    file_txt="${prefix}.txt"
    
    if [[ ! -f "$file_mtx" ]]; then
        echo "⚠️ 警告:$file_mtx 不存在,跳过"
        continue
    fi
    if [[ ! -f "$file_txt" ]]; then
        echo "⚠️ 警告:$file_txt 不存在,跳过"
        continue
    fi
    
    echo "🚀 正在运行:mpirun -np $MPI_NP $EXE $file_mtx $file_txt -SIZE $size"
    mpirun -np "$MPI_NP" "$EXE" "$file_mtx" "$file_txt" -SIZE "$size"
    
    if [[ $? -ne 0 ]]; then
        echo "❌ 错误:$prefix:$size 运行失败"
    else
        echo "✅ 成功完成:$prefix:$size"
    fi
    echo "--------------------------------------------------------"
done

使用方法

  1. 保存为run_mpi_batch.sh,添加执行权限
  2. 运行时直接传入文件组,比如:
    ./run_mpi_batch.sh abc:10 def:20 ghi:15
    

额外实用技巧

  1. 日志记录:如果需要把每个运行的输出保存到日志文件,可以修改MPI命令行,把输出重定向:

    mpirun -np "$MPI_NP" "$EXE" "$file_mtx" "$file_txt" -SIZE "$size" > "${prefix}_run.log" 2>&1
    

    这样每个文件组的运行日志会保存到abc_run.log、def_run.log这类文件里,方便后续排查问题。

  2. 并行运行多个MPI任务:如果你想同时运行多个MPI任务(注意系统资源是否足够),可以在命令末尾加&让它后台运行,比如:

    mpirun -np "$MPI_NP" "$EXE" "$file_mtx" "$file_txt" -SIZE "$size" > "${prefix}_run.log" 2>&1 &
    

    不过这种情况下要注意进程管理,避免系统负载过高。

内容的提问来源于stack exchange,提问作者Mani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:05:38