Advertisement
bunghole

FFdecsa optimization helper V9d

Sep 19th, 2011
950
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 18.55 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. echo ""
  4. echo "### FFdecsa optimization helper/benchmark "
  5. echo "### Version 9d"
  6. echo ""
  7. echo ""
  8.  
  9. #   gcc-2.95   = i386, i486, i586,pentium, i686,pentiumpro, k6
  10. #   gcc-3.0   += athlon
  11. #   gcc-3.1   += pentium-mmx, pentium2, pentium3, pentium4, k6-2, k6-3, athlon-{tbird, 4,xp,mp}
  12. #   gcc-3.3   += winchip-c6, winchip2, c3
  13. #   gcc-3.4.0 += k8,opteron,athlon64,athlon-fx, c3-2
  14. #   gcc-3.4.1 += pentium-m, pentium3m, pentium4m, prescott, nocona
  15. #   gcc-4.3   += core2, amdfam10, geode
  16. #   gcc-4.5   += atom
  17. #   gcc-4.6   += corei7, corei7-avx, bdver1, btver1
  18.  
  19.  
  20. # customize here
  21. FFdecsaDIR="./FFdecsa"
  22. OwnFlags=""
  23.  
  24. # compiler
  25. CC=g++
  26.  
  27. # some initial values
  28. OLevel=""
  29. PMode=""
  30. MTimes=10
  31.  
  32. _FLAGS=""
  33. _CPU=""
  34. _VERB=1
  35. _SHORT=1
  36. _NOTEST=0
  37. _CANNAT=0
  38. _NONAT=0
  39. _DONAT=0
  40.  
  41. print_usage() {
  42.   echo ""
  43.   echo "Usage: $0 [OPTION [ARG]]..."
  44.   echo ""
  45.   echo "Options:"
  46.   echo "-D [PATH]     path to FFdecsa source directory"
  47.   echo "-O [LEVEL]    set custom optimization level e.g. S, 2 or 3"
  48.   echo "-P [MODE]     test only the given PARALLEL_MODE"
  49.   echo "-T [N]        number of tests per mode"
  50.   echo "-e            extended - test all PARALLEL_MODEs"
  51.   echo "-i            print system info - do not perform FFdecsa test"
  52.   echo "-n            disable \"native\" flags if gcc/g++ >=4.2"
  53.   echo "-q            be quiet - only results, warnings and errors"
  54.   echo "-h            this output"
  55.   echo ""
  56. }
  57.  
  58.  
  59. while getopts "D:O:P:T:einqh" options; do
  60.   case $options in
  61.     D ) if [ -d $OPTARG ]; then
  62.           FFdecsaDIR=$OPTARG
  63.         fi
  64.         ;;
  65.     O ) if [ -n $OPTARG ]; then
  66.           OLevel=$OPTARG
  67.         fi
  68.         ;;
  69.     P ) if [ -n $OPTARG ]; then
  70.           PMode=$OPTARG
  71.         fi
  72.         ;;
  73.     T ) if [[ $OPTARG =~ ^[0-9]+$ ]]; then
  74.           MTimes=$OPTARG
  75.         fi
  76.         ;;
  77.     e ) _SHORT=0
  78.         ;;
  79.     i ) _NOTEST=1
  80.         ;;
  81.     n ) _NONAT=1
  82.         ;;
  83.     q ) _VERB=0
  84.         ;;
  85.     h ) print_usage
  86.         exit 0
  87.         ;;
  88.    \? ) print_usage
  89.         exit 1;;
  90.   esac
  91. done
  92.  
  93. if [ "$OLevel" != "" ]; then
  94.   case $OLevel in
  95.     S|s) OptFlag="-Os";;
  96.     0)   OptFlag="-O0";;
  97.     1)   OptFlag="-O1";;
  98.     2)   OptFlag="-O2";;
  99.     3)   OptFlag="-O3";;
  100.     *)   OptFlag="-O2";;
  101.   esac
  102. fi
  103.  
  104.  
  105. source_check() {
  106.   testpath=$1
  107.   if [ -f "${testpath}/FFdecsa.c" ] && [ -f "${testpath}/FFdecsa_test.c" ]; then
  108.     return 0
  109.   else
  110.     return 1
  111.   fi
  112. }
  113.  
  114.  
  115. if [ $_NOTEST -lt 1 ]; then
  116.  
  117.   if [ ! -d $FFdecsaDIR ] ;then
  118.     echo "Warning: No valid path specified"
  119.     echo "Searching..."
  120.     echo ""
  121.     SRCPaths="/usr/src /usr/local/src /home"
  122.     PathFound=0
  123.  
  124.     for vpth in $SRCPaths; do
  125.       FFtmpDIR="`find $vpth -name 'FFdecsa' -type d | grep -v -m 1 contrib`"
  126.       if [ ! -z $FFtmpDIR ]; then
  127.         FFdecsaDIR=$FFtmpDIR
  128.         PathFound=1
  129.       fi
  130.     done
  131.  
  132.     if [ $PathFound -eq 0 ] ;then
  133.       echo "Error: FFdecsa not found!"
  134.       echo "Please specify the correct path to FFdecsa source directory using option \"-D\""
  135.       echo "FFdecsa test disabled!"
  136.       echo ""
  137.       _NOTEST=1
  138.     else
  139.       echo "Found possible FFdecsa source at:"
  140.       echo "$FFdecsaDIR"
  141.       if source_check "$FFdecsaDIR"; then
  142.         echo "...and source files looks valid."
  143.         echo "proceed..."
  144.         echo ""
  145.         echo ""
  146.       else
  147.         echo "...but no valid source files found."
  148.         echo "FFdecsa test disabled!"
  149.         echo ""
  150.         echo ""
  151.         _NOTEST=1
  152.       fi
  153.     fi
  154.  
  155.   elif ! source_check "$FFdecsaDIR"; then
  156.         echo ""
  157.         echo "Error: No valid FFdecsa source files found at:"
  158.         echo "$FFdecsaDIR"
  159.         echo "FFdecsa test disabled!"
  160.         echo ""
  161.         _NOTEST=1
  162.   fi
  163.  
  164. fi
  165.  
  166. [ -z "$CC" ] && CC=g++
  167.  
  168. try_gcc_options() {
  169.     $CC $* -S -o /dev/null -xc /dev/null >/dev/null 2>&1
  170. }
  171.  
  172. if ! try_gcc_options; then
  173.     echo "Error: Couldn't execute your compiler ($CC)" >&2
  174.     exit 1
  175. fi
  176.  
  177. if try_gcc_options -march=i386; then
  178.     is_x86_64=0
  179. else
  180.     is_x86_64=1
  181. fi
  182.  
  183. try_line() {
  184.     skip=0
  185.     for arch in $1; do
  186.         if try_gcc_options -march=$arch; then
  187.             echo $arch
  188.             return
  189.         fi
  190.     done
  191.     return 1
  192. }
  193.  
  194. read_cpu_data_linux() {
  195.     IFS=":"
  196.     while read name value; do
  197.         unset IFS
  198.         name=`echo $name` #strip spaces
  199.         if [ "$name" != "flags" ]; then
  200.             value=`echo $value | sed 's/\([^ ]*\).*/\1/'` #take first word
  201.         fi
  202.         IFS=":"
  203.         if [ "$name" = "vendor_id" ]; then
  204.             vendor_id="$value"
  205.         elif [ "$name" = "cpu family" ]; then
  206.             cpu_family="$value"
  207.         elif [ "$name" = "model" ]; then
  208.             cpu_model="$value"
  209.         elif [ "$name" = "flags" ]; then
  210.             flags="$value"
  211.             break #flags last so break early
  212.         fi
  213.     done < /proc/cpuinfo
  214.     unset IFS
  215. }
  216.  
  217. read_cpu_data() {
  218.     # Default values
  219.     vendor_id="NotFound"
  220.     cpu_family="-1"
  221.     cpu_model="-1"
  222.     flags=""
  223.     read_cpu_data_linux
  224. }
  225.  
  226.  
  227. ### gcc arch detection
  228.  
  229. find_cpu_flags() {
  230. if [ "$vendor_id" = "AuthenticAMD" ]; then
  231.     if [ $cpu_family -eq 4 ]; then
  232.         _CPU="i486"
  233.     elif [ $cpu_family -eq 5 ]; then
  234.         if [ $cpu_model -lt 4 ]; then
  235.             _CPU="pentium"
  236.         elif [ \( $cpu_model -eq 6 \) -o \( $cpu_model -eq 7 \) ]; then
  237.             _CPU="k6"
  238.         elif [ \( $cpu_model -eq 8 \) -o \( $cpu_model -eq 12 \) ]; then
  239.             line="k6-2 k6"
  240.         elif [ \( $cpu_model -eq 9 \) -o \( $cpu_model -eq 13 \) ]; then
  241.             line="k6-3 k6-2 k6"
  242.         elif [ $cpu_model -eq 10 ]; then #geode LX
  243.             line="geode k6-2 k6"
  244.             #The LX supports 3dnowext in addition to the k6-2 instructions,
  245.             #however gcc doesn't support explicitly selecting that.
  246.         fi
  247.     elif [ $cpu_family -eq 6 ]; then
  248.         if [ $cpu_model -le 3 ]; then
  249.             line="athlon k6-3 k6-2 k6"
  250.         elif [ $cpu_model -eq 4 ]; then
  251.             line="athlon-tbird athlon k6-3 k6-2 k6"
  252.         elif [ $cpu_model -ge 6 ]; then #athlon-{4,xp,mp} (also geode NX)
  253.             line="athlon-4 athlon k6-3 k6-2 k6"
  254.         fi
  255.     elif [ $cpu_family -eq 15 ]; then #k8,opteron,athlon64,athlon-fx
  256.         line="k8 athlon-4 athlon k6-3 k6-2 k6"
  257.     elif [ $cpu_family -eq 16 ] ||    #barcelona,amdfam10
  258.          [ $cpu_family -eq 17 ]; then #griffin
  259.         line="amdfam10 k8 athlon-4 athlon k6-3 k6-2 k6"
  260.     elif [ $cpu_family -eq 20 ]; then #bobcat
  261.         line="btver1 amdfam10 k8 athlon-4 athlon k6-3 k6-2 k6"
  262.     elif [ $cpu_family -eq 21 ]; then #bulldozer
  263.         line="bdver1 btver1 amdfam10 k8 athlon-4 athlon k6-3 k6-2 k6"
  264.     fi
  265. elif [ "$vendor_id" = "CentaurHauls" ]; then
  266.     if [ $cpu_family -eq 5 ]; then
  267.         if [ $cpu_model -eq 4 ]; then
  268.             line="winchip-c6 pentium"
  269.         elif [ $cpu_model -eq 8 ]; then
  270.             line="winchip2 winchip-c6 pentium"
  271.         elif [ $cpu_model -ge 9 ]; then
  272.             line="winchip2 winchip-c6 pentium" #actually winchip3 but gcc doesn't support this currently
  273.         fi
  274.     elif [ $cpu_family -eq 6 ]; then
  275.         if echo "$flags" | grep -q cmov; then
  276.             fallback=pentiumpro
  277.         else
  278.             fallback=pentium #gcc incorrectly assumes i686 always has cmov
  279.         fi
  280.         if [ $cpu_model -eq 6 ]; then
  281.             _CPU="pentium" # ? Cyrix 3 (samuel)
  282.         elif [ $cpu_model -eq 7 ] || [ $cpu_model -eq 8 ]; then
  283.             line="c3 winchip2 winchip-c6 $fallback"
  284.         elif [ $cpu_model -ge 9 ]; then
  285.             line="c3-2 c3 winchip2 winchip-c6 $fallback"
  286.         fi
  287.     fi
  288. elif [ "$vendor_id" = "GenuineIntel" ]; then
  289.     if [ $cpu_family -eq 3 ]; then
  290.         _CPU="i386"
  291.     elif [ $cpu_family -eq 4 ]; then
  292.         _CPU="i486"
  293.     elif [ $cpu_family -eq 5 ]; then
  294.         if [ $cpu_model -ne 4 ]; then
  295.             _CPU="pentium"
  296.         else
  297.             line="pentium-mmx pentium" #No overlap with other vendors
  298.         fi
  299.     elif [ $cpu_family -eq 6 ]; then
  300.         if [ \( $cpu_model -eq 0 \) -o \( $cpu_model -eq 1 \) ]; then
  301.             _CPU="pentiumpro"
  302.         elif [ \( $cpu_model -ge 3 \) -a \( $cpu_model -le 6 \) ]; then #4=TM5600 at least
  303.             line="pentium2 pentiumpro pentium-mmx pentium i486 i386"
  304.         elif [ \( $cpu_model -eq 9 \) -o \( $cpu_model -eq 13 \) ]; then #centrino
  305.             line="pentium-m pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
  306.         elif [ \( $cpu_model -eq 14 \) ]; then #Core
  307.             line="prescott pentium-m pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
  308.         elif [ \( $cpu_model -eq 28 \) -o \( $cpu_model -eq 38 \) ]; then #Atom
  309.             line="atom core2 pentium-m pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
  310.         elif [ $cpu_model -eq 26 ] ||
  311.              [ $cpu_model -eq 30 ] ||
  312.              [ $cpu_model -eq 31 ] ||
  313.              [ $cpu_model -eq 46 ] ||
  314.              # ^ Nehalem ^
  315.              [ $cpu_model -eq 37 ] ||
  316.              [ $cpu_model -eq 44 ] ||
  317.              [ $cpu_model -eq 47 ]; then
  318.              # ^ Westmere ^
  319.             line="corei7 core2 pentium-m pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
  320.         elif [ $cpu_model -eq 42 ]; then #Sandy Bridge
  321.             line="corei7-avx corei7 core2 pentium-m pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
  322.         elif [ $cpu_model -eq 15 ] ||
  323.              # ^ Merom ^
  324.              [ $cpu_model -eq 23 ] ||
  325.              [ $cpu_model -eq 29 ]; then
  326.              # ^ Penryn ^
  327.             line="core2 pentium-m pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
  328.         elif [ \( $cpu_model -ge 7 \) -a \( $cpu_model -le 11 \) ]; then
  329.             line="pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
  330.         fi
  331.     elif [ $cpu_family -eq 15 ]; then
  332.         line="pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
  333.         if [ $cpu_model -ge 3 ]; then
  334.             line="prescott $line"
  335.         fi
  336.     fi
  337. elif [ "$vendor_id" = "Geode" ]; then #by NSC
  338.     if [ $cpu_family -eq 5 ]; then
  339.         if [ \( $cpu_model -eq 4 \) -o \( $cpu_model -eq 9 \) ]; then
  340.             # Note both models 4 and 9 have cmov.
  341.             # In addition, model 9 has cxmmx.
  342.             # Note also, the "geode" gcc arch is for newer AMD geode cores
  343.             # and is not appropriate for this older core.
  344.             line="pentium-mmx pentium"
  345.         fi
  346.     fi
  347. fi
  348.  
  349. if [ \( -z "$_CPU" \) -a \( -z "$line" \) ]; then
  350.     echo "\
  351. Unrecognised CPU.
  352.  Vendor:$vendor_id family:$cpu_family model:$cpu_model
  353.  flags:$flags" >&2
  354.     exit 1
  355. fi
  356.  
  357. [ -z "$_CPU" ] && _CPU="`try_line "$line"`"
  358.  
  359. if echo "$_CPU" | grep -q "amdfam10"; then
  360.     if echo "$flags" | grep -q "sse5"; then
  361.         if try_gcc_options "-msse5"; then #gcc >= 4.3
  362.             _FLAGS=" -msse5"
  363.         fi
  364.     fi
  365. elif echo "$_CPU" | grep -E -q "(k8|c3-2)"; then
  366.     if echo "$flags" | grep -q "sse3"; then
  367.         if try_gcc_options "-msse3"; then #gcc >= 3.3.3
  368.             _FLAGS=" -msse3"
  369.         fi
  370.     fi
  371. elif echo "$_CPU" | grep -q "core2"; then
  372.     if echo "$flags" | grep -q "sse4_2"; then
  373.         if try_gcc_options "-msse4"; then #gcc >= 4.3
  374.             _FLAGS=" -msse4"
  375.         fi
  376.     elif echo "$flags" | grep -q "sse4_1"; then
  377.         if try_gcc_options "-msse4.1"; then #gcc >= 4.3
  378.             _FLAGS=" -msse4.1"
  379.         fi
  380.     fi
  381. fi
  382.  
  383. }
  384.  
  385.  
  386. read_cpu_data
  387.  
  388. # look if "native" flag is supported
  389. if try_gcc_options "-march=native"; then
  390.   _CANNAT=1
  391. fi
  392.  
  393. if [ "$OwnFlags" == "" ]; then
  394.     find_cpu_flags
  395. else
  396.   _NONAT=1
  397.   if try_gcc_options $OwnFlags; then
  398.     echo "Custom compiler flags accepted by $CC"
  399.     echo ""
  400.   else
  401.     echo "Custom compiler flags rejected by $CC"
  402.     echo "FFdecsa_Test will not be performed"
  403.     echo ""
  404.     exit 1
  405.   fi
  406. fi
  407.  
  408. if [ $_VERB -ge 1 ]; then
  409.     gcc_ver=`$CC -v 2>&1 | grep -i "gcc version" | head -n 1`
  410.    
  411.     echo "### CPU-INFO ###"
  412.     if [ $is_x86_64 -eq 0 ]; then
  413.       echo "System: x86"
  414.     else
  415.       echo "System: x86_64"
  416.     fi
  417.     if [ "$_CPU" != "" ]; then
  418.       echo "Auto detected arch: $_CPU"
  419.     fi
  420.     echo ""
  421.     echo "Vendor-ID: $vendor_id"
  422.     echo "CPU-Family: $cpu_family"
  423.     echo "CPU-Model: $cpu_model"
  424.     echo "Flags: $flags"
  425.     echo ""
  426.     echo "$gcc_ver"
  427. fi
  428.  
  429. if [ $_CANNAT -ge 1 ] && [ $_NONAT -eq 0 ]; then
  430.   _DONAT=1
  431.   _CPU="native"
  432.   if [ $_VERB -ge 1 ]; then
  433.     echo "Using compilers \"native\" flags"
  434.     echo ""
  435.     echo ""
  436.   fi
  437. elif [ $_VERB -ge 1 ] && [ "$OwnFlags" == "" ]; then
  438.   echo "Compilers \"native\" flags disabled or unsupported"
  439.   echo ""
  440.   echo ""
  441. fi
  442.  
  443. if [ $is_x86_64 -eq 1 ]; then
  444.     if [ "$_FLAGS" != "" ]; then
  445.         _FLAGS="$_FLAGS -fPIC"
  446.     else
  447.         _FLAGS=" -fPIC"
  448.     fi
  449. fi
  450.  
  451. # complete flags for FFdesca_Test
  452. if [ "$OwnFlags" != "" ]; then
  453.   IFLAGS=$OwnFlags
  454. elif [ "$OLevel" == "" ]; then
  455.   IFLAGS="-march=${_CPU}${_FLAGS} -fexpensive-optimizations -fomit-frame-pointer -funroll-loops"
  456. else
  457.   IFLAGS="$OptFlag -march=${_CPU}${_FLAGS} -fexpensive-optimizations -fomit-frame-pointer -funroll-loops"
  458. fi
  459.  
  460.  
  461. ###
  462. ### FFdecsa Test - get best PARALLEL_MODE
  463. ###
  464.  
  465. ffdecsa_test() {
  466.  
  467.   if [ "$PMode" == "" ]; then
  468.     if [ $_SHORT -lt 1 ]; then
  469.       FFDECSA_MODES="PARALLEL_32_INT PARALLEL_32_4CHAR PARALLEL_32_4CHARA \
  470.                     PARALLEL_64_8CHAR PARALLEL_64_8CHARA PARALLEL_64_2INT \
  471.                     PARALLEL_64_LONG PARALLEL_64_MMX PARALLEL_128_16CHAR \
  472.                     PARALLEL_128_16CHARA PARALLEL_128_4INT PARALLEL_128_2LONG \
  473.                     PARALLEL_128_2MMX PARALLEL_128_SSE PARALLEL_128_SSE2"
  474.     else
  475.       FFDECSA_MODES="PARALLEL_32_INT PARALLEL_64_2INT PARALLEL_64_LONG \
  476.                     PARALLEL_64_MMX PARALLEL_128_2LONG PARALLEL_128_2MMX \
  477.                     PARALLEL_128_SSE PARALLEL_128_SSE2"
  478.     fi
  479.   else
  480.     FFDECSA_MODES=$PMode
  481.   fi
  482.  
  483.   if test "x${TMPDIR}" = "x"; then
  484.     TMPDIR="/tmp/FFdecsa"
  485.   fi
  486.  
  487.   if [ -d "${TMPDIR}" ]; then
  488.     rm -rf "${TMPDIR}"
  489.   fi
  490.  
  491.   mkdir "${TMPDIR}"
  492.   TMPOUT="${TMPDIR}/out"
  493.  
  494.   cp $FFdecsaDIR/*.c $FFdecsaDIR/*.h $FFdecsaDIR/Makefile "${TMPDIR}"
  495.  
  496.   if [ "$OwnFlags" != "" ]; then
  497.     FLAGS="$IFLAGS"
  498.   else
  499.     FLAGS="$1 $IFLAGS"
  500.   fi
  501.  
  502.   COMPILER=$CC
  503.   export FLAGS
  504.   export COMPILER
  505.  
  506.   for var in ${FFDECSA_MODES}; do
  507.     if [ $_VERB -ge 1 ]; then
  508.       echo "    ${var}"
  509.     fi
  510.     make -C "${TMPDIR}" -e FFdecsa_test "PARALLEL_MODE=${var}" >/dev/null 2>&1
  511.     if test $? -ne 0 ; then
  512.       if [ $_VERB -ge 1 ]; then
  513.         echo "    ${var}: build failed"
  514.       fi
  515.     else
  516.       MAX_M_val=0
  517.       rm -f ${TMPOUT}
  518.       sync;sleep 2; "${TMPDIR}/FFdecsa_test" > /dev/null 2>"${TMPOUT}"
  519.       if test $? -ne 0; then
  520.         if [ $_VERB -ge 1 ]; then
  521.           echo "    ...failed!"
  522.         fi
  523.       else
  524.         grep FAILED "${TMPOUT}" >/dev/null 2>&1
  525.         if test $? -ne 1; then
  526.           if [ $_VERB -ge 1 ]; then
  527.             echo "    ...failed!"
  528.           fi
  529.         else
  530.           MAX_M_val=`grep "speed=.*Mbit" "${TMPOUT}" | sed -e 's/^.*=\([0-9]*\)\.[0-9]* Mbit.*$/\1/'`
  531.           if [ $_VERB -ge 1 ]; then
  532.             printf "      - $MAX_M_val"
  533.           fi
  534.          
  535.           if [ $MTimes -ge 2 ]; then
  536.             for i in `seq 2 $MTimes`; do
  537.               # sync;
  538.               # sleep 1;
  539.               "${TMPDIR}/FFdecsa_test" > /dev/null 2>"${TMPOUT}"
  540.               res=`grep "speed=.*Mbit" "${TMPOUT}" | sed -e 's/^.*=\([0-9]*\)\.[0-9]* Mbit.*$/\1/'`
  541.               if test $res -gt $MAX_M_val; then
  542.                 MAX_M_val=$res
  543.               fi
  544.               if [ $_VERB -ge 1 ]; then
  545.                 printf ", $res"
  546.               fi
  547.             done
  548.           fi
  549.  
  550.           if [ $_VERB -ge 1 ]; then
  551.             printf "\n"
  552.             echo "      - $MAX_M_val Mbit/s max."
  553.           fi
  554.  
  555.           if [ "$1" == "-O2" ]; then          
  556.             if test $MAX_M_val -gt $MAX_val_2; then
  557.               MAX_val_2=$MAX_M_val
  558.               MAX_MODE_2=$var
  559.               MAX_val=$MAX_M_val
  560.               MAX_MODE=$var
  561.             fi
  562.           elif [ "$1" == "-O3" ]; then
  563.             if test $MAX_M_val -gt $MAX_val_3; then
  564.               MAX_val_3=$MAX_M_val
  565.               MAX_MODE_3=$var
  566.               MAX_val=$MAX_M_val
  567.               MAX_MODE=$var
  568.             fi
  569.           elif test $MAX_M_val -gt $MAX_val; then
  570.             MAX_val=$MAX_M_val
  571.             MAX_MODE=$var
  572.           fi
  573.  
  574.         fi
  575.       fi
  576.     fi
  577.  
  578.     make -C "${TMPDIR}" clean >/dev/null 2>&1
  579.  
  580.   done
  581.  
  582.   unset
  583.  
  584.   if [ $_VERB -ge 1 ]; then
  585.     echo "  Fastest PARALLEL_MODE = ${MAX_MODE} (${MAX_val} Mbit/s)"
  586.     echo ""
  587.   fi
  588.  
  589.   rm -rf "${TMPDIR}"
  590. }
  591.  
  592. MAX_val=0
  593. MAX_val_2=0
  594. MAX_val_3=0
  595. MAX_MODE="PARALLEL_64_MMX"
  596. MAX_MODE_2="PARALLEL_64_MMX"
  597. MAX_MODE_3="PARALLEL_64_MMX"
  598.  
  599. if [ $_NOTEST -eq 0 ]; then
  600.  
  601.   if [ $_VERB -ge 1 ]; then
  602.       echo "### FFdeCSA TEST ###"
  603.       echo "Using compiler: $CC"
  604.       echo "Flags: $IFLAGS"
  605.       echo ""
  606.   fi
  607.  
  608.   if [ "$OwnFlags" != "" ]; then
  609.     ffdecsa_test
  610.   elif [ "$OLevel" != "" ]; then
  611.     ffdecsa_test "$OptFlag"
  612.   else
  613.     if [ $_VERB -ge 1 ]; then
  614.       echo "Testing optimization levels 2 and 3"
  615.       echo ""
  616.     else
  617.       echo "This may take a while..."
  618.     fi
  619.     for i in `seq 2 3`; do
  620.       if [ $_VERB -ge 1 ]; then
  621.         echo "  Level -O${i}:"
  622.       fi
  623.       ffdecsa_test "-O${i}"
  624.     done
  625.     if [ $MAX_val_3 -ge $MAX_val_2 ]; then
  626.       MAX_MODE=$MAX_MODE_3
  627.       MAX_val=$MAX_val_3
  628.       OptFlag="-O3"
  629.     else
  630.       MAX_MODE=$MAX_MODE_2
  631.       MAX_val=$MAX_val_2
  632.       OptFlag="-O2"
  633.     fi
  634.     echo ""
  635.     echo "Best result with $OptFlag and $MAX_MODE at $MAX_val Mbit/s"
  636.     echo ""
  637.     echo ""
  638.   fi
  639.  
  640. fi
  641.  
  642. if [ $_VERB -ge 1 ]; then
  643.   echo "### VDR-SC Makefile FFdeCSA OPTS ###"
  644.   if [ "$OwnFlags" != "" ]; then
  645.     echo "Custom compiler flags are set."
  646.     echo "Adapt the Makefile yourself!"
  647.   else
  648.     echo "CPUOPT     ?= $_CPU"
  649.     if [ $_NOTEST -eq 0 ]; then
  650.       echo "PARALLEL   ?= $MAX_MODE"
  651.     else
  652.       echo "PARALLEL   ?= $MAX_MODE   # untested!"
  653.     fi
  654.     if [ "$_FLAGS" == "" ]; then
  655.       echo "CSAFLAGS   ?= $OptFlag -fexpensive-optimizations -fomit-frame-pointer -funroll-loops"
  656.     else
  657.       echo "CSAFLAGS   ?= ${OptFlag}${_FLAGS} -fexpensive-optimizations -fomit-frame-pointer -funroll-loops"
  658.     fi
  659.   fi
  660.   echo ""
  661.   echo "### GENERIC FFdeCSA make OPTS ###"
  662. fi
  663.  
  664. if [ "$OwnFlags" != "" ] || [ "$OLevel" != "" ]; then
  665.   echo "FLAGS=\"${IFLAGS}\" PARALLEL_MODE=${MAX_MODE}"
  666. else
  667.   echo "FLAGS=\"$OptFlag ${IFLAGS}\" PARALLEL_MODE=${MAX_MODE}"
  668. fi
  669. echo ""
  670.  
  671. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement