mirror of
				https://git.wownero.com/wownero/RandomWOW.git
				synced 2024-08-15 00:23:14 +00:00 
			
		
		
		
	add --noBatch benchmark option
This commit is contained in:
		
							parent
							
								
									9905ec9c5a
								
							
						
					
					
						commit
						5ce5f4906c
					
				
					 1 changed files with 33 additions and 10 deletions
				
			
		|  | @ -95,6 +95,7 @@ void printUsage(const char* executable) { | ||||||
| 	std::cout << "  --ssse3       use optimized Argon2 for SSSE3 CPUs" << std::endl; | 	std::cout << "  --ssse3       use optimized Argon2 for SSSE3 CPUs" << std::endl; | ||||||
| 	std::cout << "  --avx2        use optimized Argon2 for AVX2 CPUs" << std::endl; | 	std::cout << "  --avx2        use optimized Argon2 for AVX2 CPUs" << std::endl; | ||||||
| 	std::cout << "  --auto        select the best options for the current CPU" << std::endl; | 	std::cout << "  --auto        select the best options for the current CPU" << std::endl; | ||||||
|  | 	std::cout << "  --noBatch     calculate hashes one by one (default: batch)" << std::endl; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct MemoryException : public std::exception { | struct MemoryException : public std::exception { | ||||||
|  | @ -110,11 +111,14 @@ struct DatasetAllocException : public MemoryException { | ||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void mine(randomx_vm* vm, std::atomic<uint32_t>& atomicNonce, AtomicHash& result, uint32_t noncesCount, int thread, int cpuid=-1) { | using MineFunc = void(randomx_vm * vm, std::atomic<uint32_t> & atomicNonce, AtomicHash & result, uint32_t noncesCount, int thread, int cpuid); | ||||||
|  | 
 | ||||||
|  | template<bool batch> | ||||||
|  | void mine(randomx_vm* vm, std::atomic<uint32_t>& atomicNonce, AtomicHash& result, uint32_t noncesCount, int thread, int cpuid = -1) { | ||||||
| 	if (cpuid >= 0) { | 	if (cpuid >= 0) { | ||||||
| 		int rc = set_thread_affinity(cpuid); | 		int rc = set_thread_affinity(cpuid); | ||||||
| 		if (rc) { | 		if (rc) { | ||||||
| 			std::cerr << "Failed to set thread affinity for thread " << thread << " (error=" << rc << ")" <<  std::endl; | 			std::cerr << "Failed to set thread affinity for thread " << thread << " (error=" << rc << ")" << std::endl; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	uint64_t hash[RANDOMX_HASH_SIZE / sizeof(uint64_t)]; | 	uint64_t hash[RANDOMX_HASH_SIZE / sizeof(uint64_t)]; | ||||||
|  | @ -123,19 +127,27 @@ void mine(randomx_vm* vm, std::atomic<uint32_t>& atomicNonce, AtomicHash& result | ||||||
| 	void* noncePtr = blockTemplate + 39; | 	void* noncePtr = blockTemplate + 39; | ||||||
| 	auto nonce = atomicNonce.fetch_add(1); | 	auto nonce = atomicNonce.fetch_add(1); | ||||||
| 
 | 
 | ||||||
| 	store32(noncePtr, nonce); | 	if (batch) { | ||||||
| 	randomx_calculate_hash_first(vm, blockTemplate, sizeof(blockTemplate)); | 		store32(noncePtr, nonce); | ||||||
|  | 		randomx_calculate_hash_first(vm, blockTemplate, sizeof(blockTemplate)); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	while (nonce < noncesCount) { | 	while (nonce < noncesCount) { | ||||||
| 		nonce = atomicNonce.fetch_add(1); | 		if (batch) { | ||||||
|  | 			nonce = atomicNonce.fetch_add(1); | ||||||
|  | 		} | ||||||
| 		store32(noncePtr, nonce); | 		store32(noncePtr, nonce); | ||||||
| 		randomx_calculate_hash_next(vm, blockTemplate, sizeof(blockTemplate), &hash); | 		(batch ? randomx_calculate_hash_next : randomx_calculate_hash)(vm, blockTemplate, sizeof(blockTemplate), &hash); | ||||||
| 		result.xorWith(hash); | 		result.xorWith(hash); | ||||||
|  | 		if (!batch) { | ||||||
|  | 			nonce = atomicNonce.fetch_add(1); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int main(int argc, char** argv) { | int main(int argc, char** argv) { | ||||||
| 	bool softAes, miningMode, verificationMode, help, largePages, jit, secure, ssse3, avx2, autoFlags; | 	bool softAes, miningMode, verificationMode, help, largePages, jit, secure; | ||||||
|  | 	bool ssse3, avx2, autoFlags, noBatch; | ||||||
| 	int noncesCount, threadCount, initThreadCount; | 	int noncesCount, threadCount, initThreadCount; | ||||||
| 	uint64_t threadAffinity; | 	uint64_t threadAffinity; | ||||||
| 	int32_t seedValue; | 	int32_t seedValue; | ||||||
|  | @ -159,10 +171,11 @@ int main(int argc, char** argv) { | ||||||
| 	readOption("--ssse3", argc, argv, ssse3); | 	readOption("--ssse3", argc, argv, ssse3); | ||||||
| 	readOption("--avx2", argc, argv, avx2); | 	readOption("--avx2", argc, argv, avx2); | ||||||
| 	readOption("--auto", argc, argv, autoFlags); | 	readOption("--auto", argc, argv, autoFlags); | ||||||
|  | 	readOption("--noBatch", argc, argv, noBatch); | ||||||
| 
 | 
 | ||||||
| 	store32(&seed, seedValue); | 	store32(&seed, seedValue); | ||||||
| 
 | 
 | ||||||
| 	std::cout << "RandomX benchmark v1.1.7" << std::endl; | 	std::cout << "RandomX benchmark v1.1.8" << std::endl; | ||||||
| 
 | 
 | ||||||
| 	if (help) { | 	if (help) { | ||||||
| 		printUsage(argv[0]); | 		printUsage(argv[0]); | ||||||
|  | @ -264,6 +277,16 @@ int main(int argc, char** argv) { | ||||||
| 		std::cout << " - thread affinity (" << mask_to_string(threadAffinity) << ")" << std::endl; | 		std::cout << " - thread affinity (" << mask_to_string(threadAffinity) << ")" << std::endl; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	MineFunc* func; | ||||||
|  | 
 | ||||||
|  | 	if (noBatch) { | ||||||
|  | 		func = &mine<false>; | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		func = &mine<true>; | ||||||
|  | 		std::cout << " - batch mode" << std::endl; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	std::cout << "Initializing"; | 	std::cout << "Initializing"; | ||||||
| 	if (miningMode) | 	if (miningMode) | ||||||
| 		std::cout << " (" << initThreadCount << " thread" << (initThreadCount > 1 ? "s)" : ")"); | 		std::cout << " (" << initThreadCount << " thread" << (initThreadCount > 1 ? "s)" : ")"); | ||||||
|  | @ -334,14 +357,14 @@ int main(int argc, char** argv) { | ||||||
| 				int cpuid = -1; | 				int cpuid = -1; | ||||||
| 				if (threadAffinity) | 				if (threadAffinity) | ||||||
| 					cpuid = cpuid_from_mask(threadAffinity, i); | 					cpuid = cpuid_from_mask(threadAffinity, i); | ||||||
| 				threads.push_back(std::thread(&mine, vms[i], std::ref(atomicNonce), std::ref(result), noncesCount, i, cpuid)); | 				threads.push_back(std::thread(func, vms[i], std::ref(atomicNonce), std::ref(result), noncesCount, i, cpuid)); | ||||||
| 			} | 			} | ||||||
| 			for (unsigned i = 0; i < threads.size(); ++i) { | 			for (unsigned i = 0; i < threads.size(); ++i) { | ||||||
| 				threads[i].join(); | 				threads[i].join(); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		else { | 		else { | ||||||
| 			mine(vms[0], std::ref(atomicNonce), std::ref(result), noncesCount, 0); | 			func(vms[0], std::ref(atomicNonce), std::ref(result), noncesCount, 0, -1); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		double elapsed = sw.getElapsed(); | 		double elapsed = sw.getElapsed(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue