Posts and how to...

Many useful articles and instructions!

    AMD Optimizing C/C++ Compiler(AOCC) optimization CPUminer for Ryzen

    We will test the new AMD compiler with optimization for Ryzen processors. In various miners.

    How to install AOCC in ubuntu 16.04 (18.04, 19.04) and compile cpuminer with optimization for AMD Ryzen

    AOCC Docs - https://developer.amd.com/wp-content/resources/AOCC-2.1-Install-Guide.pdf

    1. Install depends

      sudo apt-get install -y git
      sudo apt-get install -y automake autoconf pkg-config libcurl4-openssl-dev libjansson-dev libssl-dev libgmp-dev make g++
      sudo apt-get install -y lib32z1-dev
    2. download aocc-compiler-2.1.0_1_amd64.deb from https://developer.amd.com/amd-aocc/

    3. install AOCC in Ubuntu

      sudo dpkg -i aocc-compiler-2.1.0_1_amd64.deb
      source /opt/AMD/aocc-compiler-2.1.0/setenv_AOCC.sh
    4. check the installed AOCC compiler

      clang -v
    5. Download cpuminer

      git clone https://github.com/bitzeny/cpuminer.git bitzeny-miner
      cd bitzeny-miner
      ./autogen.sh

    Compile and test with gcc

    ./configure CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer"
    make
    ./minerd --benchmark -a yescrypt -t 1

    Ryzen 2600 = 0.79 khash/s

    Compile and test with AOCC

    make clean
    ./configure CC=clang CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer"
    make
    ./minerd --benchmark -a yescrypt -t 1

    Ryzen 2600 = 0.794 khash/s

    make clean
    ./configure CC=clang CFLAGS="-O3 -march=znver2 -funroll-loops -fomit-frame-pointer"
    make
    ./minerd --benchmark -a yescrypt -t 1

    Ryzen 2600 = 0.796 khash/s

    Test Bitzeny Cpuminer with yespower 0.5 (yescrypt compatibility)

    Install bitzeny cpuminer

    git clone https://github.com/BitzenyCoreDevelopers/cpuminer.git bitzeny-yespower
    cd bitzeny-yespower
    ./autogen.sh

    with gcc

    ./configure CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer"
    make 
    ./minerd --benchmark -a yespower -t 1

    with AOCC

    make clean
    ./configure CC=clang CFLAGS="-O3 -march=native -mno-avx2"
    make
    ./minerd --benchmark -a yespower -t 1

    speed AOCC in yespower < gcc

    Test Bitzeny Cpuminer for Bellcoin with yespower 1.0

    Change line https://github.com/BitzenyCoreDevelopers/cpuminer/blob/master/yespower/yespower.c#L45 to

     static const yespower_params_t yespower_BITZENY = {YESPOWER_1_0, 2048, 32, NULL, 0};

    with gcc

    make clean
    ./configure CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer"
    make 
    ./minerd --benchmark -a yespower -t 1

    Ryzen 2600 = 0.276 khash/s

    make clean
    ./configure CFLAGS="-O3 -msse2 -Wall -funroll-loops -fomit-frame-pointer"
    make 
    ./minerd --benchmark -a yespower -t 1

    Ryzen 2600 = 0.278 khash/s

    make clean
    ./configure CFLAGS="-O3 -msse2 -Wall"
    make 
    ./minerd --benchmark -a yespower -t 1

    Ryzen 2600 = 0.277 khash/s

    with AOCC

    make clean
    ./configure CC=clang CFLAGS="-O3 -march=native -mno-avx2"
    make
    ./minerd --benchmark -a yespower -t 1

    Ryzen 2600 = 0.258 khash/s

    ./configure CC=clang CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer"
    ./configure CC=clang CFLAGS="-O3 -march=znver2 -funroll-loops -fomit-frame-pointer"
    ./configure CC=clang CFLAGS="-O3 -march=znver1 -funroll-loops -fomit-frame-pointer"

    Ryzen 2600 = 0.256 khash/s

    Test cpuminer-opt with AOCC

    you need to remove all algorithms from the miner, except yespower

    git clone https://github.com/cpu-pool/cpuminer-opt-cpupower.git
    chmod +x autogen.sh
    ./autogen.sh || echo done

    before every configure

    make clean

    after configure

    make
    ./cpuminer --benchmark -a yespower -t 1

    with gcc

    CFLAGS="-O3 -msse2 -Wall" ./configure --with-curl

    Ryzen 2600 = 0.276 khash/s

    CFLAGS="-O3 -msse2 -Wall -funroll-loops -fomit-frame-pointer" ./configure --with-curl

    Ryzen 2600 = 0.278 khash/s

    with AOCC

    ./configure --with-curl CC=clang CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer"

    Ryzen 2600 = 0.253 khash/s

    ./configure --with-curl CC=clang CFLAGS="-O3 -msse2 -Wall"

    Ryzen 2600 = 0.267 khash/s

    Test Koto Miner on optimization for Ryzen (better AOCC or GCC?)

    install Koto Miner

    https://github.com/KotoDevelopers/cpuminer-yescrypt

    results:

    with gcc

    CFLAGS="-O3 -msse2 -Wall" ./configure

    Ryzen 2600 - 0.88 khash/s

    CFLAGS="-O3 -msse2 -Wall -funroll-loops -fomit-frame-pointer" ./configure

    Ryzen 2600 - 0.88 khash/s

    with AOCC

    ./configure CC=clang CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer"

    Ryzen 2600 - 0.80 khash/s

    ./configure CC=clang CFLAGS="-O3 -msse2 -Wall"

    Ryzen 2600 - 0.87 khash/s

    ./configure CC=clang CFLAGS="-O3 -march=znver1"
    ./configure CC=clang CFLAGS="-O3 -march=znver2"

    Ryzen 2600 - 0.82 khash/s

    Results For algorithms yespower and yescrypt - the new optimized compiler from AMD does not give a gain.

    p.s. - Thanks to cpu-pool.com for the material provided.