From 4a4b06e44be066df414ac0c9ecc6eddb6794c0b4 Mon Sep 17 00:00:00 2001 From: tevador Date: Fri, 28 Jun 2019 10:37:41 +0200 Subject: [PATCH] More helpful error messages in the benchmark Move reciprocal tests before Dataset initialization Fix randomx.dll project --- doc/configuration.md | 18 ++++++++++++- src/tests/benchmark.cpp | 13 ++++++++-- src/tests/tests.cpp | 40 ++++++++++++++--------------- vcxproj/randomx-dll.vcxproj | 1 + vcxproj/randomx-dll.vcxproj.filters | 3 +++ 5 files changed, 52 insertions(+), 23 deletions(-) diff --git a/doc/configuration.md b/doc/configuration.md index 4e564eb..7f471d0 100644 --- a/doc/configuration.md +++ b/doc/configuration.md @@ -192,7 +192,22 @@ There is a total of 29 different instructions. The sum of frequencies must be eq #### Notes -Making large changes to the default values is not recommended. The only exceptions are the instruction pairs IROR_R/IROL_R, FADD_R/FSUB_R and FADD_M/FSUB_M, which are functionally equivalent. +Making changes to the default values is not recommended. The only exceptions are the instruction pairs IROR_R/IROL_R, FADD_R/FSUB_R and FADD_M/FSUB_M, which are functionally equivalent. Example of a safe custom configuration: + +||default|custom| +|-|------|------|-| +|`RANDOMX_FREQ_IROR_R`|8|5| +|`RANDOMX_FREQ_IROL_R`|2|5| + +||default|custom| +|-|------|------| +|`RANDOMX_FREQ_FADD_R`|16|17| +|`RANDOMX_FREQ_FSUB_R`|16|15| + +||default|custom| +|-|------|------| +|`RANDOMX_FREQ_FADD_M`|5|4| +|`RANDOMX_FREQ_FSUB_M`|5|6| ## Unsafe configurations @@ -200,6 +215,7 @@ There are some configurations that are considered 'unsafe' because they affect t These checks can be disabled by definining `RANDOMX_UNSAFE` when building RandomX, e.g. by using `-DRANDOMX_UNSAFE` command line switch in GCC or MSVC. It is not recommended to disable these checks except for testing purposes. + ### 1. Memory-time tradeoffs #### Condition diff --git a/src/tests/benchmark.cpp b/src/tests/benchmark.cpp index 104b7e6..f50c91f 100644 --- a/src/tests/benchmark.cpp +++ b/src/tests/benchmark.cpp @@ -204,7 +204,10 @@ int main(int argc, char** argv) { try { if (jit && !RANDOMX_HAVE_COMPILER) { - throw std::runtime_error("JIT compilation is not supported on this platform"); + throw std::runtime_error("JIT compilation is not supported on this platform. Try without --jit"); + } + if (!jit && RANDOMX_HAVE_COMPILER) { + std::cout << "WARNING: You are using the interpreter mode. Use --jit for optimal performance." << std::endl; } Stopwatch sw(true); @@ -243,7 +246,13 @@ int main(int argc, char** argv) { for (int i = 0; i < threadCount; ++i) { randomx_vm *vm = randomx_create_vm(flags, cache, dataset); if (vm == nullptr) { - throw std::runtime_error("Unsupported virtual machine options"); + if (!softAes) { + throw std::runtime_error("Cannot create VM with the selected options. Try using --softAes"); + } + if (largePages) { + throw std::runtime_error("Cannot create VM with the selected options. Try without --largePages"); + } + throw std::runtime_error("Cannot create VM"); } vms.push_back(vm); } diff --git a/src/tests/tests.cpp b/src/tests/tests.cpp index b3ac814..2e8e8a2 100644 --- a/src/tests/tests.cpp +++ b/src/tests/tests.cpp @@ -118,6 +118,26 @@ int main() { } }); + runTest("randomx_reciprocal", true, []() { + assert(randomx_reciprocal(3) == 12297829382473034410U); + assert(randomx_reciprocal(13) == 11351842506898185609U); + assert(randomx_reciprocal(33) == 17887751829051686415U); + assert(randomx_reciprocal(65537) == 18446462603027742720U); + assert(randomx_reciprocal(15000001) == 10316166306300415204U); + assert(randomx_reciprocal(3845182035) == 10302264209224146340U); + assert(randomx_reciprocal(0xffffffff) == 9223372039002259456U); + }); + + runTest("randomx_reciprocal_fast", RANDOMX_HAVE_FAST_RECIPROCAL, []() { + assert(randomx_reciprocal_fast(3) == 12297829382473034410U); + assert(randomx_reciprocal_fast(13) == 11351842506898185609U); + assert(randomx_reciprocal_fast(33) == 17887751829051686415U); + assert(randomx_reciprocal_fast(65537) == 18446462603027742720U); + assert(randomx_reciprocal_fast(15000001) == 10316166306300415204U); + assert(randomx_reciprocal_fast(3845182035) == 10302264209224146340U); + assert(randomx_reciprocal_fast(0xffffffff) == 9223372039002259456U); + }); + runTest("Dataset initialization (interpreter)", stringsEqual(RANDOMX_ARGON_SALT, "RandomX\x03"), []() { initCache("test key 000"); uint64_t datasetItem[8]; @@ -154,26 +174,6 @@ int main() { assert(equalsHex(state, "fa89397dd6ca422513aeadba3f124b5540324c4ad4b6db434394307a17c833ab")); }); - runTest("randomx_reciprocal", true, []() { - assert(randomx_reciprocal(3) == 12297829382473034410U); - assert(randomx_reciprocal(13) == 11351842506898185609U); - assert(randomx_reciprocal(33) == 17887751829051686415U); - assert(randomx_reciprocal(65537) == 18446462603027742720U); - assert(randomx_reciprocal(15000001) == 10316166306300415204U); - assert(randomx_reciprocal(3845182035) == 10302264209224146340U); - assert(randomx_reciprocal(0xffffffff) == 9223372039002259456U); - }); - - runTest("randomx_reciprocal_fast", RANDOMX_HAVE_FAST_RECIPROCAL, []() { - assert(randomx_reciprocal_fast(3) == 12297829382473034410U); - assert(randomx_reciprocal_fast(13) == 11351842506898185609U); - assert(randomx_reciprocal_fast(33) == 17887751829051686415U); - assert(randomx_reciprocal_fast(65537) == 18446462603027742720U); - assert(randomx_reciprocal_fast(15000001) == 10316166306300415204U); - assert(randomx_reciprocal_fast(3845182035) == 10302264209224146340U); - assert(randomx_reciprocal_fast(0xffffffff) == 9223372039002259456U); - }); - randomx::NativeRegisterFile reg; randomx::BytecodeMachine decoder; randomx::InstructionByteCode ibc; diff --git a/vcxproj/randomx-dll.vcxproj b/vcxproj/randomx-dll.vcxproj index e0cf2f3..0377043 100644 --- a/vcxproj/randomx-dll.vcxproj +++ b/vcxproj/randomx-dll.vcxproj @@ -59,6 +59,7 @@ + diff --git a/vcxproj/randomx-dll.vcxproj.filters b/vcxproj/randomx-dll.vcxproj.filters index a30fa8e..038fb71 100644 --- a/vcxproj/randomx-dll.vcxproj.filters +++ b/vcxproj/randomx-dll.vcxproj.filters @@ -169,5 +169,8 @@ Source Files + + Source Files + \ No newline at end of file