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

MPSoCBench仿真输出无法通过Bash脚本重定向至文件的问题

问题排查与修复方案

看起来你的脚本里有几个容易忽略的问题,导致输出没法正常写入文件,甚至部分命令根本没正确执行。咱们一步步来梳理和修复:

首先说几个核心问题

  • 命令语法错误:你第一行写的source env.sh echo "Simulation start"是错的!source会把后面的echo和字符串当成env.sh的参数,而不是先加载环境变量再执行echo。这会导致环境变量加载失败,后续的MPSoCBench可能找不到依赖,echo也不会正常输出。必须把这两个命令分开(换行或者用分号隔开)。
  • 输出目录不存在:如果output/MIPS/stringsearch这类嵌套目录没提前创建,Bash的重定向>会直接报错,根本生成不了文件。得先把所有需要的目录建好。
  • 只重定向了标准输出:很多仿真程序会把错误信息或者关键日志输出到标准错误(stderr),你只用>的话,只会把标准输出(stdout)写到文件,stderr还是会跑到终端里,等于丢了一部分日志。得把stderr也重定向进去。
  • 重复代码太多,容易出错:你的脚本里一堆重复的命令,不仅写起来麻烦,还容易漏写(比如最后一行的./MPSoCBench根本不完整),用循环简化后能少很多错误。

修复后的完整脚本

#!/bin/bash

# 先加载环境变量,再打印启动提示
source env.sh
echo "Simulation start"

# 定义所有需要测试的参数,后续改参数直接改这里就行
ARCH_LIST=("mips" "arm")
BENCHMARK_LIST=("stringsearch" "dijkstra" "sha" "basicmath" "susanedges" "susansmoothing" "susancorners")
CORE_COUNT_LIST=(1 2 4 8)
CONFIG_FILE="noc.lt"

# 递归创建所有需要的输出目录,避免目录不存在的问题
for arch in "${ARCH_LIST[@]}"; do
    for benchmark in "${BENCHMARK_LIST[@]}"; do
        mkdir -p "output/${arch}/${benchmark}"
    done
done

# 批量执行所有仿真任务
for arch in "${ARCH_LIST[@]}"; do
    echo "=== 开始执行${arch}架构的仿真任务 ==="
    for benchmark in "${BENCHMARK_LIST[@]}"; do
        for core_num in "${CORE_COUNT_LIST[@]}"; do
            output_path="output/${arch}/${benchmark}/${benchmark}-${core_num}.out"
            echo "正在运行:${benchmark} (${arch}, ${core_num}核),日志写入${output_path}"
            # 同时重定向stdout和stderr到文件,用&>或者2>&1都可以
            ./MPSoCBench -p="${arch}" -s="${benchmark}" -i="${CONFIG_FILE}" -n="${core_num}" -r &> "${output_path}"
            
            # 检查命令是否执行成功,方便排查问题
            if [ $? -ne 0 ]; then
                echo "⚠️  错误:${benchmark} (${arch}, ${core_num}核) 执行失败,请查看${output_path}获取详情"
            fi
        done
    done
done

echo "=== 所有仿真任务执行完成 ==="

几个关键改进的说明

  • mkdir -p:递归创建目录,不管父目录存在与否都能生成完整的路径,彻底解决目录缺失导致的重定向失败问题。
  • &>:一次性把标准输出和标准错误都重定向到文件,确保所有日志都被保存下来,不会漏掉错误信息。
  • 参数化循环:用数组定义所有测试组合,后续要加新的基准测试、核心数或者架构,直接修改数组就行,不用复制粘贴一堆命令。
  • 执行状态检查:每次仿真后检查退出码,要是执行失败会立刻提示,方便你快速定位有问题的任务。
  • 过程提示:添加了清晰的执行日志,你能实时看到当前在跑哪个任务,不用瞎等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:53:45