Updated Support for AARCH64 (markdown)

JayDDee
2023-10-06 19:07:21 -04:00
parent 765d823243
commit 56524fcb5a

@@ -1,13 +1,56 @@
Development is begining to provide support for ARM 64 bit CPUs using the aarch64 architecture. Development is begining to provide support for ARM 64 bit CPUs using the aarch64 architecture.
* Current status: nothing publicly released. This is provided as source code only and may be built on native Linux or on Windows using MingW/MSys by following the existing procedure subject to he modifications detailed below.
Community testing is requested because I have no ARM CPU at this time. I'm looking at Raspberry Pi but would prefer a PC without the Windows tax.
## Status
* Current status: nothing publicly released yet.
* ARM support will be source code only, no binaries are planned. * ARM support will be source code only, no binaries are planned.
* Coding is progressing with many issues translating SSE to NEON. Some things are done very differently and some things may not be possible. * Coding is progressing with many issues translating SSE to NEON. Some things are done very differently and some things may not be possible.
* The lack of flexible lane shuffling is a major problem. Some shuffles may have to be done by inserting one lane at a time. * The lack of flexible lane shuffling is a major problem. Some shuffles may have to be done by inserting one lane at a time.
* Current expectations are best performance will be with sha256 based algos and some algos that use AES. Current issues exist with AES for echo & fugue. * Current expectations are best performance will be with sha256 based algos. AES is only supported for shavite.
* Parallel 4 way hashing will not be provided initially but will be added later. * Parallel 4 way hashing will not be provided initially but will be added later.
* Current problem algos include anything with Echo or Fugue, there are problems with the AES implementation. * Current problem algos include anything with Groestl, Echo & Fugue due to problems with the AES implementation.
* Simd has a problem with multiplication that I haven't resolved. * Simd has a problem with multiplication that I haven't resolved.
* Scrypt has issues with the lack of a blend instruction in NEON that requires a workaround. The lack of mask creating doesn't make it any easier. * Scrypt has issues with the lack of a blend instruction in NEON that requires a workaround. The lack of mask creating doesn't make it any easier.
* Yespower/yescrypt also have issues that aren't fully understood due to the complexity of the current code. * Yespower/yescrypt also have issues that aren't fully understood due to the complexity of the current code.
* Unresolved issues will result in using completely unoptimized "reference" code. * Unresolved issues will result in using completely unoptimized "reference" code.
## Test plan
This code is completely untested. It compiles but fails to link several libraries including curl, gmp, z, crypto & ssl, when cross compiling.
Hopefully this is only a cross compile issue.
Monitor CPU temperature and ensure adequate ventilation and cooling as should be done with any CPU nining.
Please report all results and include your CPU and OS, any custom build options, miner startup messages, any errors or relevant logs and a clear description. Adding `--debug` is also recommendded. If the miner crashes familiarity with GDB is an asset.
Successful compilation is the first step. The recommended procedure is to folllow thw Linux build instructions for installing dependencies.
`./autogen.sh`
`CFLAGS="-O2 -march=armv8-a+crypto+sha2+aes -Wall -flax-vector-conversions" ./configure --with-curl`
`make -j $nproc`
"native" can be substituted for -march=.
It's recommended testing with different builds with and without aes or sha2 or both to test different code for algos that support those features.
Ater successful compile start slow with a couple of simple commands.
`$ ./cpuminer --version`
Does it run or crash? Note if CPU information is correct.
`$ ./cpuminer --benchmark`
Is CPU tempereature and clock frequency displayed correctly?
Try a few different algos. Do they all crash, some crash, of none crash? Hash rate is irrelevant at this time.
No crashes is considered the threshold for success for the first public release.
For a bonus try mining at a pool with algos that don't crash during benchmark.
Does it connect and start hashing? Does it submit any shares? Are they accepted? Expectations are very low. Much of the code is just recompiled C but much is also new NEON code. Having any accepted shares with any algo is beyond any expectations.