فهرست منبع

More helpful error messages in the benchmark
Move reciprocal tests before Dataset initialization
Fix randomx.dll project

tevador 7 سال پیش
والد
کامیت
4a4b06e44b
5فایلهای تغییر یافته به همراه52 افزوده شده و 23 حذف شده
  1. 17 1
      doc/configuration.md
  2. 11 2
      src/tests/benchmark.cpp
  3. 20 20
      src/tests/tests.cpp
  4. 1 0
      vcxproj/randomx-dll.vcxproj
  5. 3 0
      vcxproj/randomx-dll.vcxproj.filters

+ 17 - 1
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

+ 11 - 2
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);
 		}

+ 20 - 20
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;

+ 1 - 0
vcxproj/randomx-dll.vcxproj

@@ -59,6 +59,7 @@
     <ClCompile Include="..\src\assembly_generator_x86.cpp" />
     <ClCompile Include="..\src\blake2\blake2b.c" />
     <ClCompile Include="..\src\blake2_generator.cpp" />
+    <ClCompile Include="..\src\bytecode_machine.cpp" />
     <ClCompile Include="..\src\dataset.cpp" />
     <ClCompile Include="..\src\instruction.cpp" />
     <ClCompile Include="..\src\instructions_portable.cpp" />

+ 3 - 0
vcxproj/randomx-dll.vcxproj.filters

@@ -169,5 +169,8 @@
     <ClCompile Include="..\src\blake2\blake2b.c">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\src\bytecode_machine.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>