首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash中两个嵌套循环的问题

bash中两个嵌套循环的问题
EN

Stack Overflow用户
提问于 2013-09-10 05:58:08
回答 1查看 255关注 0票数 0

我试图循环两个变量序列,并使用R统计软件对它们进行处理,以获得相关结果。

我搞不懂为什么更大的循环(在mica_headers上)不会发生,而内部循环每次都会结束。

代码语言:javascript
复制
#!/bin/sh
#set -e


micaHeaderList="tot_instruction ILP32 ILP64 ILP128 ILP256 total_ins_count_for_hpc_alignment totInstruction mem-read mem-write control-flow arithmetic floating-point stack shift string sse other nop InstrFootprint64 InstrFootprint4k DataFootprint64 DataFootprint4k mem_access memReuseDist0-2 memReuseDist2-4 memReuseDist4-8 memReuseDist8-16 memReuseDist16-32 memReuseDist32-64 memReuseDist64-128 memReuseDist128-256 memReuseDist256-512 memReuseDist512-1k memReuseDist1k-2k memReuseDist2k-4k memReuseDist4k-8k memReuseDist8k-16k memReuseDist16k-32k memReuseDist32k-64k memReuseDist64k-128k memReuseDist128k-256k memReuseDist256k-512k memReuseDist512k-00 GAg_mispred_cnt_4bits PAg_mispred_cnt_4bits GAs_mispred_cnt_4bits PAs_mispred_cnt_4bits GAg_mispred_cnt_8bits PAg_mispred_cnt_8bits GAs_mispred_cnt_8bits PAs_mispred_cnt_8bits GAg_mispred_cnt_12bits PAg_mispred_cnt_12bits GAs_mispred_cnt_12bits PAs_mispred_cnt_12bits total_brCount total_transactionCount total_takenCount total_num_ops instr_reg_cnt total_reg_use_cnt total_reg_age reg_age_cnt_1 reg_age_cnt_2 reg_age_cnt_4 reg_age_cnt_8 reg_age_cnt_16 reg_age_cnt_32 reg_age_cnt_64 mem_read_cnt mem_read_local_stride_0 mem_read_local_stride_8 mem_read_local_stride_64 mem_read_local_stride_512 mem_read_local_stride_4096 mem_read_local_stride_32768 mem_read_local_stride_262144 mem_read_global_stride_0 mem_read_global_stride_8 mem_read_global_stride_64 mem_read_global_stride_512 mem_read_global_stride_4096 mem_read_global_stride_32768 mem_read_global_stride_262144 mem_write_cnt mem_write_local_stride_0 mem_write_local_stride_8 mem_write_local_stride_64 mem_write_local_stride_512 mem_write_local_stride_4096 mem_write_local_stride_32768 mem_write_local_stride_262144 mem_write_global_stride_0 mem_write_global_stride_8 mem_write_global_stride_64 mem_write_global_stride_512 mem_write_global_stride_4096 mem_write_global_stride_32768 mem_write_global_stride_262144"
mhToBeReplaced="ILP32"


compilerOptionList="funsafe_math_optimizations fno_guess_branch_probability fno_ivopts fno_tree_loop_optimize fno_inline_functions funroll_all_loops fno_omit_frame_pointer falign_jumps fselective_scheduling fno_inline_small_functions fno_tree_pre ftracer fno_move_loop_invariants"
coToBeReplaced="fno_guess_branch_probability"

for mica_header in $micaHeaderList
do

    for compiler_option in $compilerOptionList
    do

        echo "Calculating $compiler_option correlation for $mica_header"
        sed -i "s/$coToBeReplaced/$compiler_option/g" r.scr
        coToBeReplaced=$compiler_option
        make
    done


    sed -i "s/$mhToBeReplaced/$mica_header/g" r.scr
    mhToBeReplaced=$mica_header

done

编辑:一般来说,为了避免迭代次数和源文件的值不一致,我如何能够将这两者从不同的文件链接在一起。例如,在ALL.scv文件中包含头文件的micaHeaderList?

EN

回答 1

Stack Overflow用户

发布于 2013-09-10 10:43:36

脚本中有一个错误,该错误回显了一个值$mica_header,该值将仅在下一次外部循环运行中被make调用所替代。这是因为第二个sed仅在make之后运行。它应该在内部循环之前被调用。这难道不会造成混乱吗?

此外,与其用一个参数值替换另一个参数值,不如创建一个r.src文件模板,其中包含要更改的参数的占位符。这样,我们可以确保参数的某些值不会与搜索模式冲突,并且拼写错误不会阻止替换。

下面是一个经过改进的脚本,代码相当简单。if test "$Test" = 1中的部分只是一个由Test=1激活的测试代码。对于此脚本,只需为r.scr创建一个名为r.scr.template的模板,并将占位符%%MicaHeader%%%%CompilerOption%%替换为应替换的参数。对于第一个测试,参数列表较短。

代码语言:javascript
复制
#!/bin/sh

micaHeaderList="tot_instruction ILP32 ILP64"
mhToBeReplaced=%%MicaHeader%%

compilerOptionList="funsafe_math_optimizations fno_guess_branch_probability fno_ivopts fno_tree_loop_optimize"
coToBeReplaced=%%CompilerOption%%

TemplateFile=r.scr.template
OutputFile=r.scr
Test=1

if test "$Test" = 1
then
    TemplateFile="${TemplateFile}-test"
    echo "$coToBeReplaced $mhToBeReplaced" >"$TemplateFile"
    make ()
    {
        echo -n ">>> make: "
        cat "$OutputFile"
    }
fi

for mica_header in $micaHeaderList
do
    for compiler_option in $compilerOptionList
    do
        echo "Calculating $compiler_option correlation for $mica_header"
        sed "s/$mhToBeReplaced/$mica_header/g;s/$coToBeReplaced/$compiler_option/g" "$TemplateFile" >"$OutputFile"
        make
    done
done

如果问题仍然存在:

  1. 检查生成的r.src文件。
  2. 检查make脚本是否确实使用了r.src.

中的替换参数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18707700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档