source: trunk/IPs/systemC/processor/Morpheo/Script/distexe_execute.sh @ 138

Last change on this file since 138 was 138, checked in by rosiere, 14 years ago

1) add counters_t type for interface
2) fix in check load in load_store_unit
3) add parameters (but not yet implemented)
4) change environment and add script (distcc_env.sh ...)
5) add warning if an unser change rename flag with l.mtspr instruction
6) ...

  • Property svn:keywords set to Id
File size: 5.5 KB
RevLine 
[85]1#!/bin/bash
2
[82]3#-----------------------------------------------------------
4# $Id: distexe_execute.sh 138 2010-05-12 17:34:01Z rosiere $
5#-----------------------------------------------------------
[2]6
[112]7#-----[ global variable ]-----------------------------------
[138]8declare -i TRAP=0;
[78]9
[138]10#-----[ distexe_execute_usage ]-----------------------------
11function distexe_execute_usage ()
[2]12{
[138]13    echo "Usage     : ${0} path_work file_cmd file_cpt file_host lock_process id";
14    echo "Arguments : ";
15    echo " * path_work    : directory to execute command";
16    echo " * file_cmd     : list of command";
17    echo " * file_cpt     : file with the index of next command to execute";
18    echo " * file_process : if file is present, station is running";
19    echo " * lock_process : file to lock process";
20    echo " * id           : identification";
21    exit;
[2]22}
23
[138]24#-----[ distexe_execute_test_usage ]------------------------
25function distexe_execute_test_usage ()
[2]26{
[138]27    if test ${#} -ne 6; then
28        distexe_execute_usage;
29    fi;
30
31    if test -z "${MORPHEO_SCRIPT}"; then
32        echo "Environment variable MORPHEO_SCRIPT is not set";
33        distexe_execute_usage;
34    fi;
35
36    if test ! -d ${1}; then
37        echo "Directory ${1} is invalid";
38    fi;
[2]39}
40
[138]41#-----[ distexe_execute_end ]----------------------------
42function distexe_execute_end()
[2]43{
[138]44    ${MORPHEO_SCRIPT}/lock.sh   ${LOCK_PROCESS};
45    rm -f ${FILE_PROCESS};
46    ${MORPHEO_SCRIPT}/unlock.sh ${LOCK_PROCESS};
[112]47}
[2]48
[138]49#-----[ distexe_execute_no_trap ]------------------------
50function distexe_execute_no_trap()
[112]51{
[138]52    TRAP=1;
[112]53}
54
[138]55#-----[ distexe_execute_trap ]---------------------------
56function distexe_execute_trap()
[112]57{
[138]58#    echo "  * {"$(${MORPHEO_SCRIPT}/date.sh)"} <${HOSTNAME}> %%%%%%%%%%%%%%%% HITTTTTTTTTTTTTTTTTT %%%%%%%%%%%%%%%%";
[2]59
[138]60    rm -f ${LOCK_CPT}
61
62    distexe_execute_end;
63    exit 1;
[112]64}
65
[138]66#-----[ distexe_execute ]-----------------------------------
67function distexe_execute ()
[112]68{
[138]69    trap distexe_execute_no_trap INT TERM;
70
[112]71    # test_usage
[138]72    distexe_execute_test_usage ${*};
[112]73
74    local -a COMMAND;
75    local -i CPT_OLD;
76    local -i CPT;
[124]77    local    PATH_WORK=${1};
[112]78    local    FILE_CMD=${2};
79    local    FILE_CPT=${3};
[138]80    local    FILE_PROCESS=${4};
81    local    LOCK_PROCESS=${5};
82    local    ID=${6};
83    local    LOCK_CPT="${PATH_WORK}/distexe-cpt-lock";
[124]84    local    OUTPUT_FILE_INFO="distexe.info";
85    local    OUTPUT_FILE_CMD="distexe.command";
86    local    OUTPUT_FILE_OUT="distexe.output";
[112]87
[138]88    echo $$ > ${FILE_PROCESS};
[112]89
[138]90#   echo "  * {"$(${MORPHEO_SCRIPT}/date.sh)"} <${ID}> pid is $$";
[112]91    # Init CPT if this thread is the first
[138]92    ${MORPHEO_SCRIPT}/lock.sh   ${LOCK_CPT};
[112]93    if test ! -s ${FILE_CPT}; then
[138]94        echo "  * {"$(${MORPHEO_SCRIPT}/date.sh)"} <${ID}> create counter file ${FILE_CPT}";
[112]95        echo "0" > ${FILE_CPT};
96    fi;
[138]97    ${MORPHEO_SCRIPT}/unlock.sh ${LOCK_CPT};
[112]98
[138]99    trap distexe_execute_trap INT TERM;
100
101    if test ${TRAP} -eq 1; then
102        distexe_execute_trap;
103    fi;
104
[112]105    # read, line by line, the command file and write in array
[2]106    CPT=0;
107
108    while read line; do
[112]109        COMMAND[${CPT}]="${line}";
110        CPT=$((${CPT}+1));
111    done < ${FILE_CMD};
[2]112
[127]113    local -i NB_DIGIT=0;
[128]114    local -i NB_COMMAND=${#COMMAND[*]};
115    local -i x=${NB_COMMAND};
[127]116
117    while test ${x} -ne 0; do
118        NB_DIGIT=$((${NB_DIGIT} + 1));
119        x=$((${x} / 10));
120    done;
121
[138]122    echo "  * {"$(${MORPHEO_SCRIPT}/date.sh)"} <${ID}> is ready";
[2]123
124    # infinite loop
125    CPT_OLD=0;
126    CPT=0;
127
128    while test 1; do
129        # Take a number
[112]130        CPT_OLD=${CPT};
[2]131
[112]132        # Read the index, and increase
[138]133        ${MORPHEO_SCRIPT}/lock.sh   ${LOCK_CPT};
[112]134        CPT=$(cat ${FILE_CPT});
135        echo "$((${CPT}+1))" > ${FILE_CPT};
[138]136        ${MORPHEO_SCRIPT}/unlock.sh ${LOCK_CPT};
[2]137
[124]138        # test if this number is valid
[128]139        if test ${CPT} -ge ${NB_COMMAND}; then
140            CPT=${NB_COMMAND};
[2]141        fi;
142
143        # test if between the cpt_old and cpt, there are a synchronisation command
144
[112]145#       local -i CPT_SYNC=${CPT}_OLD;
[2]146#
[112]147#       while test ${CPT}_SYNC -lt ${CPT}; do
148#           if test -z "${COMMAND[${CPT}_SYNC]}"; then
[138]149#               echo "  * {"$(${MORPHEO_SCRIPT}/date.sh)"} <${ID}> synchronisation [${CPT}_SYNC]";
[2]150#           fi;
[112]151#           CPT_SYNC=$((${CPT}_SYNC+1));
[2]152#       done;
153
154        # test if this number is valid
[128]155        if test ${CPT} -eq ${NB_COMMAND}; then
[2]156            break;
157        fi;
158
159        # Test if command is empty !
[112]160        if test ! -z "${COMMAND[${CPT}]}"; then
[127]161            local NUM=$(printf %.${NB_DIGIT}d ${CPT});
[136]162            local MAX=$((${NB_COMMAND}-1));
[127]163
[138]164#           echo "  * {"$(${MORPHEO_SCRIPT}/date.sh)"} <${ID}> execute command [${NUM}] : ${COMMAND[${CPT}]}";
165            echo "  * {"$(${MORPHEO_SCRIPT}/date.sh)"} <${ID}> command [${NUM}/${MAX}] : execute";
[124]166            local PATH_CURRENT=${PWD};
[127]167
[124]168            cd    ${PATH_WORK}        &> /dev/null;
[127]169            mkdir "Task_${NUM}"       &> /dev/null;
170            cd    "Task_${NUM}"       &> /dev/null;
[124]171            echo "id   : ${ID}"        >  ${OUTPUT_FILE_INFO};
172            echo "host : ${HOSTNAME}" >>  ${OUTPUT_FILE_INFO};
173            echo "pid  : $$"          >>  ${OUTPUT_FILE_INFO};
[138]174            echo "date : "$(${MORPHEO_SCRIPT}/date.sh)  >>  ${OUTPUT_FILE_INFO};
[124]175            echo "#!/bin/bash"         >  ${OUTPUT_FILE_CMD};
176            echo 'source ${HOME}/.bashrc;' >>  ${OUTPUT_FILE_CMD};
177            echo "${COMMAND[${CPT}]}" >>  ${OUTPUT_FILE_CMD};
178            chmod +x                      ${OUTPUT_FILE_CMD};
179            ./${OUTPUT_FILE_CMD}      &${OUTPUT_FILE_OUT};
180            cd    ${PATH_CURRENT}     &> /dev/null;
[138]181            echo "  * {"$(${MORPHEO_SCRIPT}/date.sh)"} <${ID}> command [${NUM}/${MAX}] : done";
[2]182        fi;
183    done;
184
[138]185    echo "  * {"$(${MORPHEO_SCRIPT}/date.sh)"} <${ID}> is done";
[2]186   
[138]187    distexe_execute_end;
[2]188}
189
190#-----[ Corps ]---------------------------------------------
[138]191distexe_execute ${*};
Note: See TracBrowser for help on using the repository browser.