All pastes #732338 Raw Edit

ffdecsa optimization kaffeine-sc

public shellscript v1 · immutable
·published 2007-10-10 21:46 UTC
rendered paste body
#! /bin/sh# ffdecsa optimization#check whether option is supported by this cpucheck_cpu(){    ok=0    grep "^flags.* $1 " /proc/cpuinfo >/dev/null 2>&1    if test $? -eq 0; then      ok=1    else      grep "^flags.* $1\$" /proc/cpuinfo >/dev/null 2>&1      if test $? -eq 0; then        ok=1      fi    fi    eval test $ok -eq 1}#try to figure out best FFdecsa compiler optionsget_cpu_optimization() {   FLAGS="FLAGS=-O3 -fexpensive-optimizations -funroll-loops"   arch=`uname -m`   processors_flags=`cat /proc/cpuinfo | grep "flags" | head -n 1`   vendor=`cat /proc/cpuinfo |grep "vendor_id" | head -n 1 | sed -e "s/.*:\W*//"`   gcc_ver=`$CXX -v 2>&1 | grep "gcc version" | head -n 1`   gcc_major=`echo $gcc_ver | sed -e 's/^gcc version \([0-9]*\)\..*/\1/'`   gcc_minor=`echo $gcc_ver | sed -e 's/^gcc version [0-9]*\.\([0-9]*\).*/\1/'`   if test $gcc_major -gt 4; then     ARCH="native"   elif test $gcc_major -eq 4 && test $gcc_minor -ge 2; then     ARCH="native"   elif test "x$arch" = "xx86_64"; then     if test "x$vendor" = "xAuthenticAMD"; then        ARCH="k8"     elif test "x$vendor" = "xGenuineIntel"; then        ARCH="nocona"     else        echo **WARNING** - Unknown vendor $vendor - assuming nocona        ARCH="nocona"     fi     FLAGS="$FLAGS -finline-limit=6000000 --param max-unrolled-insns=500"   elif test "x$arch" = "xathlon-xp"; then     ARCH="athlon-xp"     FLAGS="$FLAGS -finline-limit=6000000 --param max-unrolled-insns=500"   else     ARCH="pentium"   fi   OPTS=""   for opt in mmx sse sse2; do     if check_cpu $opt; then       OPTS="$OPTS $opt"       FLAGS="$FLAGS -m$opt"     fi   done   FLAGS="$FLAGS -march=$ARCH"   echo "Processor capabilities: $ARCH ($OPTS )"}ffdecsa_opt="yes"for opt do  optval="${opt#*=}"  case "$opt" in  --dvb-dir=*) dvb_path=`eval echo $optval`  ;;  --cxx=*) CXX="$optval"  ;;  --optimize=*) ffdecsa_opt="$optval"  ;;  --help) show_help  ;;  *)  die_unknown $opt  ;;  esacdoneif test "x$CXX" = "x"; then  CXX=g++fiecho "Using C++ compiler: $CXX"if test "x$ffdecsa_opt" = "xlong"; then  FFDECSA_MODES="PARALLEL_32_INT PARALLEL_32_4CHAR PARALLEL_32_4CHARA \                 PARALLEL_64_8CHAR PARALLEL_64_8CHARA PARALLEL_64_2INT \                 PARALLEL_64_LONG PARALLEL_64_MMX PARALLEL_128_16CHAR \                 PARALLEL_128_16CHARA PARALLEL_128_4INT PARALLEL_128_2LONG \                 PARALLEL_128_2MMX PARALLEL_128_SSE PARALLEL_128_SSE2"elif test "x$ffdecsa_opt" = "xyes"; then  FFDECSA_MODES="PARALLEL_32_INT PARALLEL_64_2INT PARALLEL_64_LONG \                 PARALLEL_64_MMX PARALLEL_128_2LONG PARALLEL_128_2MMX \                 PARALLEL_128_SSE PARALLEL_128_SSE2"elif test "x$ffdecsa_opt" != "xno"; then  echo "Bad option to --optimize '$ffdecsa_opt'.  Should be 'yes, no, long'"  exit 1fiif test "x${TMPDIR}" = "x"; then  TMPDIR="/tmp"fiTMPDIR="${TMPDIR}/kaffeine-sc-${RANDOM}"mkdir ${TMPDIR}#Test FFDECSA compileMAX_MODE=PARALLEL_32_INTMAX_val=0if test "x$ffdecsa_opt" != "xno"; then   if test -f /proc/cpuinfo; then     get_cpu_optimization   fi   TMPOUT="${TMPDIR}/FFdecsa/out"   mkdir "${TMPDIR}/FFdecsa"   cp src/FFdecsa/*.c src/FFdecsa/*.h src/FFdecsa/Makefile "${TMPDIR}/FFdecsa/"   echo "Trying various FFdecsa optimizations..."   for var in ${FFDECSA_MODES}; do     make -C "${TMPDIR}/FFdecsa" FFdecsa_test "PARALLEL_MODE=${var}" "${FLAGS}" "COMPILER=$CXX" >/dev/null 2>&1     if test $? -ne 0 ; then       echo "    ${var}: build failed"     else       rm -f ${TMPOUT}       sync;sleep 2; "${TMPDIR}/FFdecsa/FFdecsa_test" > /dev/null 2>"${TMPOUT}"       if test $? -ne 0; then         echo "    ${var}: test failed"       else         grep FAILED "${TMPOUT}" >/dev/null 2>&1         if test $? -ne 1; then           echo "    ${var}: test failed"         else           res=`grep "speed=.*Mbit" "${TMPOUT}" | sed -e 's/^.*=\([0-9]*\)\.[0-9]* Mbit.*$/\1/'`           echo "    ${var}: $res"           if test $res -gt $MAX_val; then             MAX_val=$res             MAX_MODE=$var           fi         fi       fi     fi     make -C "${TMPDIR}/FFdecsa" clean >/dev/null 2>&1   done   echo "best guess = ${MAX_MODE}"   echo "writing FFdecsa compile options to FFdecsa.make"   echo "# Use this Flags for FFdecsa Makefile" > FFdecsa.make   echo "COMPILER=$CXX" >> FFdecsa.make   echo "$FLAGS" >> FFdecsa.make   echo "# Set Paralell Mode in src/FFdecsa/FFdecsa.c Line 53" >> FFdecsa.make   echo "PARALLEL_MODE=${MAX_MODE}" >> FFdecsa.makefirm -rf "${TMPDIR}"