cpuminer-opt now supports HW SHA acceleration available on AMD Ryzen CPUs.
This feature requires recent SW including GCC version 5 or higher and
openssl version 1.1 or higher. It may also require using "-march=znver1"
compile flag.

HW SHA support is only available when compiled from source, Windows binaries
are not yet available.

cpuminer-opt is a console program, if you're using a mouse you're doing it
wrong.

Security warning
----------------

Miner programs are often flagged as malware by antivirus programs. This is
a false positive, they are flagged simply because they are miners. The source
code is open for anyone to inspect. If you don't trust the software, don't use
it.

The cryptographic code has been taken from trusted sources but has been
modified for speed at the expense of accepted security practices. This
code should not be imported into applications where secure cryptography is
required.

Compile Instructions
--------------------

Requirements:

Intel Core2 or newer, or AMD Steamroller or newer CPU. ARM CPUs are not
supported.
64 bit Linux or Windows operating system. Apple is not supported.

Building on linux prerequisites:

It is assumed users know how to install packages on their system and
be able to compile standard source packages. This is basic Linux and
beyond the scope of cpuminer-opt.

Make sure you have the basic development packages installed.
Here is a good start:

http://askubuntu.com/questions/457526/how-to-install-cpuminer-in-ubuntu

Install any additional dependencies needed by cpuminer-opt. The list below
are some of the ones that may not be in the default install and need to
be installed manually. There may be others, read the error messages they
will give a clue as to the missing package.

The following command should install everything you need on Debian based
distributions such as Ubuntu:

sudo apt-get install build-essential libssl-dev libcurl4-openssl-dev libjansson-dev libgmp-dev automake


build-essential  (for Ubuntu, Development Tools package group on Fedora)
automake
libjansson-dev
libgmp-dev
libcurl4-openssl-dev
libssl-dev
pthreads
zlib

SHA support on AMD Ryzen CPUs requires gcc version 5 or higher and openssl 1.1
or higher. Reports of improved performiance on Ryzen when using openssl 1.0.2
have been due to AVX and AVX2 optimizations added to that version.
Additional improvements are expected on Ryzen with openssl 1.1.
"-march-znver1" or "-msha".

Additional instructions for static compilalation can be found here:
https://lxadm.com/Static_compilation_of_cpuminer
Static builds should only considered in a homogeneous HW and SW environment.
Local builds will always have the best performance and compatibility.

Extract cpuminer source.

tar xvzf cpuminer-opt-x.y.z.tar.gz
cd cpuminer-opt-x.y.z

Run ./build.sh to build on Linux or execute the following commands.

./autogen.sh
CFLAGS="-O3 -march=native -Wall" CXXFLAGS="$CFLAGS -std=gnu++11" ./configure --with-curl
make

Additional optional compile flags, add the following to CFLAGS to activate:

-DUSE_SPH_SHA

SPH may give slightly better performance on algos that use sha256 when using
openssl 1.0.1 or older. Openssl 1.0.2 adds AVX2 and 1.1 adds SHA and perform
better than SPH.

Start mining.

./cpuminer -a algo -o url -u username -p password

Windows

Precompiled Windows binaries are built on a Linux host using Mingw
with a more recent compiler than the following Windows hosted procedure.

Building on Windows prerequisites:

msys
mingw_w64
Visual C++ redistributable 2008 X64
openssl

Install msys and mingw_w64, only needed once.

Unpack msys into C:\msys or your preferred directory.

Install mingw_w64 from win-builds.
Follow instructions, check "msys or cygwin" and "x86_64" and accept default
existing msys instalation.

Open a msys shell by double clicking on msys.bat.
Note that msys shell uses linux syntax for file specifications, "C:\" is
mounted at "/c/".

Add mingw bin directory to PATH variable
PATH="/c/msys/opt/windows_64/bin/:$PATH"

Instalation complete, compile cpuminer-opt.

Unpack cpuminer-opt source files using tar from msys shell, or using 7zip
or similar Windows program.

In msys shell cd to miner directory.
cd /c/path/to/cpuminer-opt

Run build.sh to build on Windows or execute the following commands.

./autogen.sh
CFLAGS="-O3 -march=native -Wall" CXXFLAGS="$CFLAGS -std=gnu++11 -fpermissive" ./configure --with-curl
make

Start mining

cpuminer.exe -a algo -o url -u user -p password

The following tips may be useful for older AMD CPUs.

AMD CPUs older than Steamroller, including Athlon x2 and Phenom II x4, are
not supported by cpuminer-opt due to an incompatible implementation of SSE2
on these CPUs. Some algos may crash the miner with an invalid instruction.
Users are recommended to use an unoptimized miner such as cpuminer-multi.

Some users with AMD CPUs without AES_NI have reported problems compiling
with build.sh or "-march=native". Problems have included compile errors
and poor performance. These users are recommended to compile manually
specifying "-march=btver1" on the configure command line.

Support for even older x86_64 without AES_NI or SSE2 is not availble.


Change Log
----------

v3.8.1

Fixes x16r on CPUs with only SSE2.
More Optimizations for X algos, qubit & deep.
Corrected algo optimizations for scrypt and yescrypt, no new optimizations.

v3.8.0.1

Fixed x16r AVX2 low hash rate.

v3.8.0

4way no longer a seperate feature, included in AVX2.
Added x16r algo for Ravencoin, anime algo for Animecoin.
More 4way optimizations for X13 and up.
Tweaked CPU affinity to better support more than 64 CPUs.
Fixed compile problem on some old AMD CPUs.

v3.7.10

4way optimizations for lyra2rev2, lyra2h, quark, timetravel8, timetravel10
   x11evo, blakecoin.
Faster x13sm3 (hsr).
Added share difficulty to accepted message.

v3.7.9

Partial 4way optimizations for veltor, skunk, polytimos, lyra2z.
Additional 4way optimizations for X algos.
New algo yescryptr8 for BitZeny, not to be confused with original
yescrypt Globalboost-Y.

v3.7.8

Partial 4way optimization for most X algos including c11, xevan, phi, hsr

v3.7.7

Fixed regression caused by 64 CPU support.
Fixed lyra2h.

v3.7.6

Added lyra2h algo for Hppcoin.
Added support for more than 64 CPUs.
Optimized shavite512 with AES, improves x11 etc.

v3.7.5

New algo keccakc for Creative coin with 4way optimizations

Rewrote some AVX/AVX2 code for more consistent implementation and some
optimizing.

Enhanced capabilities check to support 4way, more precise reporting of
features (not all algos use SSE2), and better error messages when using
an incompatible pre-built version (Windows users).

v3.7.4

Removed unnecessary build options.

Added 4way support for tribus and nist5.

v3.7.3

Added polytimos algo.

Introducing 4-way AVX2 optimization giving up to 4x performance inprovement
on many compute bound algos. First supported algos: skein, skein2, blake &
keccak. This feature is only available when compiled from source. See above
for instcuctions how to enable 4-way during compilation.

Updated Dockerfile.

v3.7.2

Fixed yescryptr16
Changed default sha256 and sha512 to openssl. This should be used when
compiling with openssl 1.0.2 or higher (Ubuntu 16.04).
This should increase the hashrate for yescrypt, yescryptr16, m7m, xevan, skein,
myr-gr & others  when openssl 1.0.2 is installed.
Users with openssl 1.0.1 (Ubuntu 14.04) may get better perforance by adding
"-DUSE_SPH_SHA" to CLAGS. 
Windows binaries are compiled with -DUSE_SPH_SHA and won't get the speedup.

v3.7.1

Added yescryptr16 algo for Yenten coin
Added SHA support to yescrypt and yescryptr16
Small code cleanup

v3.7.0

Fixed x14 misalignment bug.
Fixed decred stake version bug.
Getwork fixes for algos that use big endian data encoding: m7m, zr5, neoscrypt,
decred.

v3.6.10

Fixed misalignment bug in hsr.

v3.6.9

Added phi1612 algo for LUX coin
Added x13sm3 algo, alias hsr, for Hshare coin

v3.6.8

Fixed timetravel10 on Windows.

v3.6.7

Skunk algo added.
Tribus a little faster.
Minor restructuring.

v3.6.6

added tribus algo for Denarius (DNR)

configure removed from .gitignore. This should allow git clone to compile
on Windows/mingw.

Fixed CPU temperature monitoring on some CPUs (Linux only).

Fixed a compile error on FreeBSD (unsupported YMMV).

v3.6.5

Cryptonight a little faster.
Added jha algo (Jackpotcoin) with AES optimizations.

v3.6.4

Added support for Bitcore (BTX) using the timetravel10 algo, optimized for
AES and AVX2. 
"-a bitcore" works as an alias and is less typing that "-a timetravel10".

v3.6.3

Fixed all known issues with SHA support on AMD Ryzen CPUs, still no
 Windows binaries.

v3.6.2

SHA accceleration is now supported on AMD Ryzen CPUs when compiled from source,
  Windows binaries not yet available.
Fixed groestl algo.
Fixed dmd-gr (Diamond) algo.
Fixed lbry compile error on Ryzen.
Added SHA support to m7m algo.
Hodl support for CPUs without AES has been removed, use legacy version.

v3.6.1

Fixed data alignment issue that broke lyra2rev2 AVX2 on Windows.
Added preliminary support for HW accelerated SHA.
Solo mining most algos should now work, cryptonight confirmed exception.

v3.6.0

Preliminary support for solo mining using getwork.

v3.5.13

Found more speed in Cubehash, algo improvement depends on chain length,
  deep +8%, timetravel +1% , xevan +1%
Fixed a getwork bug, solo mining is not yet supported but testing is encouraged

v3.5.12

New algo sha256t for Onecoin (OC), 29% faster than ocminer version.
lyra2zoin algo renamed to lyra2z330, lyra2zoin and zoin still work
  as aliases.

v3.5.11

Fixed hmq1725 crash on Ubuntu 16.04
Fixed compile error in hodl.cpp with gcc 6.3
Fixed x11 crash on Windows with AVX2

v3.5.10

Some AVX2 optimizations introduced for Luffa, shorter chained algos such
  as Qubit and Deep should see the biggest gains, but many other algos should
  also see improvement, longer chains like xevan not so much.
Rewrite of Groestl AES, now 100% vectorized, small improvement.
build.sh and winbuild.sh initialize with distclean instead of clean.
Implemented a workaround for a compile error in hodl code when compiling
  with gcc 6.3.

V3.5.9

Reduced stack usage for hmq1725 and small speedup.
Added Deep algo optimized for AES and AVX2
Rewrite of SSE2 Luffa, midstate now supported in deep, qubit & timetravel
Small changes to algo-gate.

v3.5.8

Lyra2RE fixed on Windows, broken in v3.5.6.
Ported AES cryptonight optimizations from v3.5.7 to non-AES version
  with little improvement.
Marginal improvements to xevan and veltor.

v3.5.7

Cryptonight 5% faster

v3.5.6

Updated Lyra2z algo for new zcoin algo post block 2050.
Cleaned up Lyra2 code and increased performance
  - Lyra2Z (zcoin) +12%
  - Lyra2REv2 +11%
  - Lyra2RE +6%
Fixed x11evo algo performance on Windows.
Timetravel algo 3% to 5% faster
Whirlpool algo 15% faster.
Removed aclocal.m4 from .gitignore.

v3.5.5

x11evo fixed on Windows but at reduced performance.
Changed benchmark stats collection default to false and
  added proper user and password checks to enable it.

v3.5.4

x11evo fixed (broken in v3.5.2) and optimized 23% faster
Small improvements of 1% to 3% on many algos including timetravel,
   xevan and cryptonight.
More code cleanup and compiler warning reduction.
Improved checking for missing command line arguments.

v3.5.3

More optimizations
  Timetravel +16%
  Xevan       +3%
  Qubit      +12%

V3.5.2

Timetravel (machinecoin) added and optimized.

v3.5.1

Bastion 9% faster with AES, benchkmark still not working.
Worked around git automatically removing m4 directory.
Fixed occasional compile error in algo-gate.h.

v3.5.0

Fixed blakecoin and vanilla increasing rejects with number of threads.
Removed support for SSE2 Groestl functions. SSE2 groestl remains available
  in v3.4.12 and the legacy branch.
It is no longer necessary to specify stratum+tcp:// in the url, it is assumed
  and is the only supported protocol.

v3.4.12

lyra2z (zcoin) modified for blocks after 8192
fixed scryptjane to support various N factors

v3.4.11

groestl algo AES optimized +200%
myr-gr algo AES optimized +100%

v3.4.10

xevan AES optimized +35%

v3.4.9

fixed zr5, broken in v3.4.8
added xevan algo (Bitsend, BSD) with 10% improvement
added lyra2zoin (Zoin, ZOI) fully optimized but YMMV

v3.4.8

added zcoin support, optimized for AVX2 but no increase in performance
fixed API display of diff for cryptonight
--show-diff is now the default, use "--hide-diff" to disable
cleaned up some cpuminer-multi artifacts

v3.4.7

fixed benchmark, except for x11evo
added CPU temperature to share submission report (Linux only)

v3.4.6

For users:
- cryptolight algo is now supported with AES optimizations
- display format changed for share submissions
    - colour keyed "Accepted" or "Rejected" status.
    - reject count and rate displayed when share is rejected.

For developers:

- code restructuring for detecting new work
    - cleaned up detection and handling of new work
    - removed call to stratum_gen_work from niner_thread.
    - eliminated gen_work_now gate function.
    - renamed gate function init_nonce to get_new_work.
    - renamed gate function alloc_scratchbuf to miner_thread_init,
      removed all scracthbuf references from miner_thread and moved
      implementation to the local algo files of those algos that need it.
    - moved most gate targets from algo-gate.c to cpu-miner.c removing
      most mining related code from algo-gate-api.c.

v3.4.5

fixed stale share rejects mining cryptonight at Nicehash
fixed compile error on Westmere CPUs

v3.4.4

fixed compile errors on Westmere CPUs, this is an interim fix that
  will compile without AES on Westmere
added support for cryptonight at Nicehash, some rejects may be produced
  at Nicehash only.

v3.4.3

imported optimized m7m, +42%

v3.4.2

added veltor algo
tweaked lyra2 AVX/AVX2 code for small improvement.

v3.4.1

big AVX2 optmizations for lyra2 +35%, lyra2v2 +11%, AVX also faster
fixed hmq1725

v3.4.0

fixed Windows compile error introduced in v3.3.9
fixed x11gost, broken in v3.3.7
AVX2 optimizations improving many algos:
   - Lyra2RE  +3%
   - Lyra2REv2  +19%
   - x11gost (sib) +6%
   - x11evo +2.4%
   - c11 +6.9%
   - x11 +5%
   - x13 +5%
   - x14 +3.6%
   - x15 +2.4%
   - x17 +2.8%
   - qubit +8.4%

