20141111

1. Simpoint 사용법 확인
BBV 생성 방법을 확인하고, SimPoint 실행 방법도 확인했으나 몇 가지 의문이 있음.
1) Valgrind로 BBV를 생성해도 되는가?
2) BBV를 생성할 때 interval length 값이 중요하다고 하는데, 얼마로 해야 하는가?
3) 실행 옵션에 maxK(Maximum number of clusters to use)를 얼마로 주어야 하는가?
4) Simulation point * interval이 해당 cluster의 시작점을 의미하는 것이 맞는지? Simulation point 값은 0부터 시작하며, 0은 fast forwarding을 하지 않은 것을 의미. 100 million instruction을 instruction interval로 했을 때, 15 simulation point는 1500 million instruction을 fast forward 해야함을 의미.
5) Python script를 사용해 SPEC을 실행하는데, fast forwarding할 때 이것도 고려해야 하는가? 아니면 python 스크립트까지 포함한 simulation point를 사용하는 것은 어떤가?
6) weight를 확인할 수는 있는데, 어느 정도 weight 부터 interesting하다고 생각해야 하는가?
7) Fast-forwarding을 할 때,
– 무의미한 warm up만 건너뛰고, 그 이후부터 끝까지 실험할 것인지
– 가장 큰 weight을 갖는 cluster 하나에 대해서만 실험할 것인지
– 유의미한 weight를 갖는 cluster를 여러 개 찾고 평균을 내야 하는지


2. 교수님과 미팅
SimPoint 사용법에 대해
1) Valgrind로 BBV 생성해도 될 것.
2) interval length는 default 값 사용하자.
3) maxK도 default 값 사용하자.
4) Simulation point는 프로그램 실행 지점을 이야기하는 것. 각 0 simulation point는 0~interval까지의 instruction을 의미함. 1 simulation point는 interval~2*interval까지의 instruction을 의미함.
5) python script로 인한 instruction count를 고려해야 함.
6) 무의미한 warm up만 건너뛰고, 그 이후부터 실행하면 될 것이다.
simulation을 하면 매우 느려진다. 그러므로 각 workload에 대해 끝까지 실행하지 말라. SimPoint로 측정해보고, 기존의 SPEC workload의 특성과 비슷한지 확인해보라.


3. Workload setting
Fast forwarding을 하기 위해 파이썬 스크립트가 차지하는 instruction count를 확인해야 했다.
1) 파이썬 스크립트에서 SPEC 실행 명령어(bzip2 text.html 280) 찾기 이전에 sys.exit() 호출했을 때 instruction count 50544243
2) 파이썬 스크립트에서 SPEC 실행 명령어(bzip2 text.html 280) 찾는 것까지 한 다음 sys.exit() 호출했을 때 instruction count 50587842
3) 파이썬 스크립트에서 SPEC 실행 명령어(zeusmp) 찾는 것까지 한 다음 sys.exit() 호출했을 때 instruction count 50587838
4) 파이썬 스크립트에서 SPEC 실행 명령어(bwaves) 찾는 것까지 한 다음 sys.exit() 호출했을 때 instruction count 50587838
5) 파이썬 스크립트에서 SPEC 실행 명령어(bzip2 text.html 280) 찾고, os.system(”)으로 빈 명령어 호출한 뒤, sys.exit() 호출했을 때 50607729
6) 파이썬 스크립트에서 SPEC 실행 명령어(bwaves) 찾고, os.system(”)으로 빈 명령어 호출한 뒤, sys.exit() 호출했을 때 instruction count 50607725

SPECCPU2006 각각의 ROI를 확인해, 얼마나 fast forwarding 해야하는지 확인하고, 그 값에 50608000을 더해 fast forwarding하면 된다. 약 50608000 instruction을 더해주면 될 듯.

runspec.py

import sys

#PATH_CONFIGURATION----------------------------------------------#
SPEC_RUN_PATH = "/path/to/SPECCPU2006"   #FIXME
#----------------------------------------------------------------#

SPECINT = [ "perlbench", "bzip2", "gcc", "mcf", "gobmk",\
            "hmmer", "sjeng", "libquantum", "h264ref", "omnetpp",\
            "astar", "xalancbmk" ]
SPECFP = [ "bwaves", "gamess", "milc", "zeusmp", "gromacs",\
           "cactusADM", "leslie3d", "namd", "dealII", "soplex",\
           "povray", "calculix", "GemsFDTD", "tonto", "lbm", "wrf", "sphinx3" ]
SPEC_PATHs = {}
SPEC_CMD_LIST = [
                #SPECINT2006
                'perlbench_checkspam', 'perlbench_diffmail', 'perlbench_splitmail',\
                'bzip2_source','bzip2_program','bzip2_combined','bzip2_chicken','bzip2_liberty','bzip2_html',\
                'gcc_166','gcc_200','gcc_typcheck','gcc_decl','gcc_expr','gcc_expr2','gcc_g23','gcc_s04','gcc_scilab',\
                'mcf','gobmk_1313','gobmk_nngs','gobmk_score','gobmk_trevorc','gobmk_trevord','hmmer_nph3','hmmer_retro',\
                'sjeng','libquantum','h264ref_foreman_base','h264ref_foreman_main','h264ref_sss_main',\
                'omnetpp','astar_biglake','astar_river', 'xalancbmk',\
                #SPECFP2006
                'bwaves','gamess_cytosine','gamess_gradient','gamess_triazolium','milc',\
                'zeusmp','gromacs','cactusADM','leslie3d','namd',\
                'dealII','soplex_pds','soplex_ref','povray','calculix',\
                'GemsFDTD','tonto','lbm','wrf','sphinx3'
                ]
SPEC_CMDs = {
                #SPECINT2006
                'perlbench_checkspam' : ['perlbench', './perlbench -I./lib checkspam.pl 2500 5 25 11 150 1 1 1 1 > /dev/null'],
                'perlbench_diffmail' : ['perlbench', './perlbench -I./lib diffmail.pl 4 800 10 17 19 300 > /dev/null'],
                'perlbench_splitmail' : ['perlbench', './perlbench -I./lib splitmail.pl 1600 12 26 16 4500 > /dev/null'],
                'bzip2_source': ['bzip2', './bzip2 input.source 280 > /dev/null'],
                'bzip2_program': ['bzip2', './bzip2 input.program 280 > /dev/null'],
                'bzip2_combined': ['bzip2', './bzip2 input.combined 200 > /dev/null'],
                'bzip2_chicken': ['bzip2', './bzip2 chicken.jpg 30 > /dev/null'],
                'bzip2_liberty': ['bzip2', './bzip2 liberty.jpg 30 > /dev/null'],
                'bzip2_html': ['bzip2', './bzip2 text.html 280 > /dev/null'],
                'gcc_166': ['gcc', './gcc 166.i -o 166.s > /dev/null'],
                'gcc_200': ['gcc', './gcc 200.i -o 200.s > /dev/null'],
                'gcc_typecheck': ['gcc', './gcc c-typeck.i -o c-typeck.s > /dev/null'],
                'gcc_decl': ['gcc', './gcc cp-decl.i -o cp-decl.s > /dev/null'],
                'gcc_expr': ['gcc', './gcc expr.i -o expr.s > /dev/null'],
                'gcc_expr2': ['gcc', './gcc expr.i -o expr.s > /dev/null'],
                'gcc_g23': ['gcc', './gcc expr.i -o expr.s > /dev/null'],
                'gcc_s04': ['gcc', './gcc s04.i -o s04.s > /dev/null'],
                'gcc_scilab': ['gcc', './gcc scilab.i -o scilab.s > /dev/null'],
                'mcf': ['mcf', './mcf inp.in > /dev/null'],
                'gobmk_1313': ['gobmk', './gobmk --quiet --mode gtp < 13x13.tst > /dev/null'],
                'gobmk_nngs': ['gobmk', './gobmk --quiet --mode gtp < nngs.tst > /dev/null'],
                'gobmk_score': ['gobmk', './gobmk --quiet --mode gtp < score2.tst > /dev/null'],
                'gobmk_trevorc': ['gobmk', './gobmk --quiet --mode gtp < trevorc.tst > /dev/null'],
                'gobmk_trevord': ['gobmk', './gobmk --quiet --mode gtp < trevord.tst > /dev/null'],
                'hmmer_nph3': ['hmmer', './hmmer nph3.hmm swiss41 > /dev/null'],
                'hmmer_retro': ['hmmer', './hmmer --fixed 0 --mean 500 --num 500000 --sd 350 --seed 0 retro.hmm > /dev/null'],
                'sjeng': ['sjeng', './sjeng ref.txt > /dev/null'],
                'libquantum': ['libquantum', './libquantum 1397 8 > /dev/null'],
                'h264ref_foreman_base': ['h264ref', './h264ref -d foreman_ref_encoder_baseline.cfg > /dev/null'],
                'h264ref_foreman_main': ['h264ref', './h264ref -d foreman_ref_encoder_main.cfg > /dev/null'],
                'h264ref_sss_main': ['h264ref', './h264ref -d sss_encoder_main.cfg > /dev/null'],
                'omnetpp': ['omnetpp', './omnetpp omnetpp.ini > /dev/null'],
                'astar_biglake': ['astar', './astar BigLakes2048.cfg > /dev/null'],
                'astar_river': ['astar', './astar rivers.cfg > /dev/null'],
                'xalancbmk': ['xalancbmk', './Xalan -v t5.xml xalanc.xsl > /dev/null'],
                #SPECFP2006
                'bwaves': ['bwaves', './bwaves > /dev/null'],
                'gamess_cytosine': ['gamess', './gamess < cytosine.2.config > /dev/null'],
                'gamess_gradient': ['gamess', './gamess < h2ocu2+.gradient.config > /dev/null'],
                'gamess_triazolium': ['gamess', './gamess < triazolium.config > /dev/null'],
                'milc': ['milc', './milc < su3imp.in > /dev/null'],
                'zeusmp': ['zeusmp', './zeusmp > /dev/null'],
                'gromacs': ['gromacs', './gromacs -silent -deffnm gromacs -nice 0 > /dev/null'],
                'cactusADM': ['cactusADM', './cactusADM benchADM.par > /dev/null'],
                'leslie3d': ['leslie3d', './leslie3d < leslie3d.in > /dev/null'],
                'namd': ['namd', './namd --input namd.input --iterations 38 --output namd.out > /dev/null'],
                'dealII': ['dealII', './dealII 23 > /dev/null'],
                'soplex_pds': ['soplex', './soplex -s1 -e -m45000 pds-50.mps > /dev/null'],
                'soplex_ref': ['soplex', './soplex -m3500 ref.mps > /dev/null'],
                'povray': ['povray', './povray SPEC-benchmark-ref.ini > /dev/null'],
                'calculix': ['calculix', './calculix -i hyperviscoplastic > /dev/null'],
                'GemsFDTD': ['GemsFDTD', './GemsFDTD > /dev/null'],
                'tonto': ['tonto', './tonto > /dev/null'],
                'lbm': ['lbm', './lbm 3000 reference.dat 0 0 100_100_130_ldc.of > /dev/null'],
                'wrf': ['wrf', './wrf > /dev/null'],
                'sphinx3': ['sphinx3', './sphinx_livepretend ctlfile . args.an4 > /dev/null'],
        }

def mkSPEC_PATHs():
    for benchmark in SPECINT+SPECFP:
        SPEC_PATHs[benchmark] = SPEC_RUN_PATH + '/' + benchmark

def main(argv=None):
    mkSPEC_PATHs()

    benchmark = sys.argv[1]
    os.chdir(SPEC_PATHs[SPEC_CMDs[benchmark][0]]) # change directory
    os.system(SPEC_CMDs[benchmark][1])            # run benchmark

main()

getSPEC.py

#!/bin/python
import sys

#PATH_CONFIGURATION----------------------------------------------#
SPEC_RUN_PATH = "/path/to/SPECCPU2006"   #FIXME
#----------------------------------------------------------------#

SPECINT = [ "perlbench", "bzip2", "gcc", "mcf", "gobmk",\
            "hmmer", "sjeng", "libquantum", "h264ref", "omnetpp",\
            "astar", "xalancbmk" ]
SPECFP = [ "bwaves", "gamess", "milc", "zeusmp", "gromacs",\
           "cactusADM", "leslie3d", "namd", "dealII", "soplex",\
           "povray", "calculix", "GemsFDTD", "tonto", "lbm", "wrf", "sphinx3" ]

SPEC_CMDs = {
                #SPECINT2006
                'perlbench_checkspam' : ['perlbench', './perlbench -I./lib checkspam.pl 2500 5 25 11 150 1 1 1 1 > /dev/null'],
                'perlbench_diffmail' : ['perlbench', './perlbench -I./lib diffmail.pl 4 800 10 17 19 300 > /dev/null'],
                'perlbench_splitmail' : ['perlbench', './perlbench -I./lib splitmail.pl 1600 12 26 16 4500 > /dev/null'],
                'bzip2_source': ['bzip2', './bzip2 input.source 280 > /dev/null'],
                'bzip2_program': ['bzip2', './bzip2 input.program 280 > /dev/null'],
                'bzip2_combined': ['bzip2', './bzip2 input.combined 200 > /dev/null'],
                'bzip2_chicken': ['bzip2', './bzip2 chicken.jpg 30 > /dev/null'],
                'bzip2_liberty': ['bzip2', './bzip2 liberty.jpg 30 > /dev/null'],
                'bzip2_html': ['bzip2', './bzip2 text.html 280 > /dev/null'],
                'gcc_166': ['gcc', './gcc 166.i -o 166.s > /dev/null'],
                'gcc_200': ['gcc', './gcc 200.i -o 200.s > /dev/null'],
                'gcc_typecheck': ['gcc', './gcc c-typeck.i -o c-typeck.s > /dev/null'],
                'gcc_decl': ['gcc', './gcc cp-decl.i -o cp-decl.s > /dev/null'],
                'gcc_expr': ['gcc', './gcc expr.i -o expr.s > /dev/null'],
                'gcc_expr2': ['gcc', './gcc expr.i -o expr.s > /dev/null'],
                'gcc_g23': ['gcc', './gcc expr.i -o expr.s > /dev/null'],
                'gcc_s04': ['gcc', './gcc s04.i -o s04.s > /dev/null'],
                'gcc_scilab': ['gcc', './gcc scilab.i -o scilab.s > /dev/null'],
                'mcf': ['mcf', './mcf inp.in > /dev/null'],
                'gobmk_1313': ['gobmk', './gobmk --quiet --mode gtp < 13x13.tst > /dev/null'],
                'gobmk_nngs': ['gobmk', './gobmk --quiet --mode gtp < nngs.tst > /dev/null'],
                'gobmk_score': ['gobmk', './gobmk --quiet --mode gtp < score2.tst > /dev/null'],
                'gobmk_trevorc': ['gobmk', './gobmk --quiet --mode gtp < trevorc.tst > /dev/null'],
                'gobmk_trevord': ['gobmk', './gobmk --quiet --mode gtp < trevord.tst > /dev/null'],
                'hmmer_nph3': ['hmmer', './hmmer nph3.hmm swiss41 > /dev/null'],
                'hmmer_retro': ['hmmer', './hmmer --fixed 0 --mean 500 --num 500000 --sd 350 --seed 0 retro.hmm > /dev/null'],
                'sjeng': ['sjeng', './sjeng ref.txt > /dev/null'],
                'libquantum': ['libquantum', './libquantum 1397 8 > /dev/null'],
                'h264ref_foreman_base': ['h264ref', './h264ref -d foreman_ref_encoder_baseline.cfg > /dev/null'],
                'h264ref_foreman_main': ['h264ref', './h264ref -d foreman_ref_encoder_main.cfg > /dev/null'],
                'h264ref_sss_main': ['h264ref', './h264ref -d sss_encoder_main.cfg > /dev/null'],
                'omnetpp': ['omnetpp', './omnetpp omnetpp.ini > /dev/null'],
                'astar_biglake': ['astar', './astar BigLakes2048.cfg > /dev/null'],
                'astar_river': ['astar', './astar rivers.cfg > /dev/null'],
                'xalancbmk': ['xalancbmk', './Xalan -v t5.xml xalanc.xsl > /dev/null'],
                #SPECFP2006
                'bwaves': ['bwaves', './bwaves > /dev/null'],
                'gamess_cytosine': ['gamess', './gamess < cytosine.2.config > /dev/null'],
                'gamess_gradient': ['gamess', './gamess < h2ocu2+.gradient.config > /dev/null'],
                'gamess_triazolium': ['gamess', './gamess < triazolium.config > /dev/null'],
                'milc': ['milc', './milc < su3imp.in > /dev/null'],
                'zeusmp': ['zeusmp', './zeusmp > /dev/null'],
                'gromacs': ['gromacs', './gromacs -silent -deffnm gromacs -nice 0 > /dev/null'],
                'cactusADM': ['cactusADM', './cactusADM benchADM.par > /dev/null'],
                'leslie3d': ['leslie3d', './leslie3d < leslie3d.in > /dev/null'],
                'namd': ['namd', './namd --input namd.input --iterations 38 --output namd.out > /dev/null'],
                'dealII': ['dealII', './dealII 23 > /dev/null'],
                'soplex_pds': ['soplex', './soplex -s1 -e -m45000 pds-50.mps > /dev/null'],
                'soplex_ref': ['soplex', './soplex -m3500 ref.mps > /dev/null'],
                'povray': ['povray', './povray SPEC-benchmark-ref.ini > /dev/null'],
                'calculix': ['calculix', './calculix -i hyperviscoplastic > /dev/null'],
                'GemsFDTD': ['GemsFDTD', './GemsFDTD > /dev/null'],
                'tonto': ['tonto', './tonto > /dev/null'],
                'lbm': ['lbm', './lbm 3000 reference.dat 0 0 100_100_130_ldc.of > /dev/null'],
                'wrf': ['wrf', './wrf > /dev/null'],
                'sphinx3': ['sphinx3', './sphinx_livepretend ctlfile . args.an4 > /dev/null'],
        }
if sys.argv[1] == 'SPECPATH':
    print SPEC_RUN_PATH + '/' + SPEC_CMDs[sys.argv[2]][0] + '/'
elif sys.argv[1] == 'CMD':
    print SPEC_CMDs[sys.argv[2]][1][:-11]

createBBV.sh

#!/bin/bash
SIMPOINT_PATH=/path/to/simpoint/SimPoint.3.2
BBV_OUTPUT_PATH=${SIMPOINT_PATH}/input
GETSPEC=/path/to/getSPEC/getSPEC.py

SPEC_LIST=('perlbench_checkspam' 'perlbench_diffmail' 'perlbench_splitmail'
           'bzip2_source' 'bzip2_program' 'bzip2_combined' 'bzip2_chicken' 'bzip2_liberty' 'bzip2_html'
           'gcc_166' 'gcc_200' 'gcc_typecheck' 'gcc_decl' 'gcc_expr' 'gcc_expr2' 'gcc_g23' 'gcc_s04' 'gcc_scilab'
           'mcf' 'gobmk_1313' 'gobmk_nngs' 'gobmk_score' 'gobmk_trevorc' 'gobmk_trevord' 'hmmer_nph3' 'hmmer_retro'
           'sjeng' 'libquantum' 'h264ref_foreman_base' 'h264ref_foreman_main' 'h264ref_sss_main' 'omnetpp'
           'astar_biglake' 'astar_river' 'xalancbmk' 'bwaves' 'gamess_cytosine' 'gamess_gradient' 'gamess_triazolium'
           'milc' 'zeusmp' 'gromacs' 'cactusADM' 'leslie3d' 'namd' 'dealII' 'soplex_pds' 'soplex_ref'
           'povray' 'calculix' 'GemsFDTD' 'tonto' 'lbm' 'wrf' 'sphinx3')

for benchmark in ${SPEC_LIST[@]}
do
    echo "Create BBV" $benchmark
    benchmark_PATH=`python $GETSPEC SPECPATH $benchmark`
    CMD=`python $GETSPEC CMD $benchmark`
    echo "cd $benchmark_PATH"
    echo "valgrind --tool=exp-bbv --bb-out-file=${BBV_OUTPUT_PATH}/${benchmark}.bb $CMD"
    cd $benchmark_PATH
    valgrind --tool=exp-bbv --bb-out-file=${BBV_OUTPUT_PATH}/${benchmark}.bb $CMD
done

Simpointing.sh

#!/bin/bash
SIMPOINT_PATH=/path/to/simpoint/SimPoint.3.2
SIMPOINT=${SIMPOINT_PATH}/bin/simpoint
BBV_OUTPUT_PATH=${SIMPOINT_PATH}/input
GETSPEC=/path/to/getSPEC/getSPEC.py

SPEC_LIST=('perlbench_checkspam' 'perlbench_diffmail' 'perlbench_splitmail'
           'bzip2_source' 'bzip2_program' 'bzip2_combined' 'bzip2_chicken' 'bzip2_liberty' 'bzip2_html'
           'gcc_166' 'gcc_200' 'gcc_typecheck' 'gcc_decl' 'gcc_expr' 'gcc_expr2' 'gcc_g23' 'gcc_s04' 'gcc_scilab'
           'mcf' 'gobmk_1313' 'gobmk_nngs' 'gobmk_score' 'gobmk_trevorc' 'gobmk_trevord' 'hmmer_nph3' 'hmmer_retro'
           'sjeng' 'libquantum' 'h264ref_foreman_base' 'h264ref_foreman_main' 'h264ref_sss_main' 'omnetpp'
           'astar_biglake' 'astar_river' 'xalancbmk' 'bwaves' 'gamess_cytosine' 'gamess_gradient' 'gamess_triazolium'
           'milc' 'zeusmp' 'gromacs' 'cactusADM' 'leslie3d' 'namd' 'dealII' 'soplex_pds' 'soplex_ref'
           'povray' 'calculix' 'GemsFDTD' 'tonto' 'lbm' 'wrf' 'sphinx3')

for benchmark in ${SPEC_LIST[@]}
do
    echo "Simpointing" $benchmark
    echo "$SIMPOINT -loadFVFile $SIMPOINT_PATH/input/${benchmark}.bb -maxK 30 -saveSimpoints $SIMPOINT_PATH/output/${benchmark}.simpoints -saveSimpointWeights $SIMPOINT_PATH/output/${benchmark}.weights"
    $SIMPOINT -loadFVFile $SIMPOINT_PATH/input/${benchmark}.bb -maxK 30 -saveSimpoints $SIMPOINT_PATH/output/${benchmark}.simpoints -saveSimpointWeights $SIMPOINT_PATH/output/${benchmark}.weights
done

원래 위의 createBBV.sh를 그대로 실행하려 했으나, 시간이 너무 오래 걸릴 것 같았다. 현재 내 ubuntu machine이 총 8개의 core를 쓰고 있으므로 8로 나누어, 7개씩 담당하도록 스크립트를 만들어 실행했다.

앞으로 해야할 것은
1) 모든 SPECCPU2006 workload에 대해 BBV 생성하기
2) SimPoint 실행해 유의미한 구간 확인하기
3) 유의미한 구간을 확인해, fast forwarding할 크기를 구하고 checkpoint 생성하기
4) 그 외 workload에 대해 반복하기 (NAS Parallel Benchmark, GUPS, graph500)


4. 강욱이 형이 알려준 SPECCPU2006 characterization 관련 사이트
1) SPEC CPU2006 Memory Characterization, CMP$im: A Pin Based Cache/Memory System Simulator, http://www.jaleels.org/ajaleel/workload/
2) SPECCPU 2006 Characterization Results, http://hpc.cs.tsinghua.edu.cn/research/cluster/SPEC2006Characterization/


5. bash shell에서 array의 legnth는 ${#ArrayName[@]}
References : How To Find BASH Shell Array Length ( number of elements ), NixCraft, http://www.cyberciti.biz/faq/finding-bash-shell-array-length-elements/

Advertisements
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 88,610 hits
%d bloggers like this: