unsafe public RandomIteratorUsafeXorshift(int capasity) { length = capasity; values = new byte[length]; PinBuffer(values); rndXorshiftUnrolled64 = new XorshiftUnrolled64(); }
public static void TestRandomGeneratorRndXorshift() { int randomValue = 0; Console.WriteLine("Test Random generator RndXorshift bool: "); XorshiftUnrolled64 rndXorshift = new XorshiftUnrolled64(); byte[] buffer = new byte[1024 * 1024]; char[] bufferChar = new char[1024 * 1024]; GCHandle gchBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned); GCHandle gchBufferChar = GCHandle.Alloc(bufferChar, GCHandleType.Pinned); IntPtr pAddr = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0); IntPtr pAddrChar = Marshal.UnsafeAddrOfPinnedArrayElement(bufferChar, 0); dh.StartWatch(); unsafe { //fixed (byte* pStart = buffer) { byte * pStart = (byte *)pAddr.ToPointer(); byte * pEnd = pStart + buffer.Length; ulong *plStart = (ulong *)pStart; ulong *plEnd = (ulong *)pEnd; byte * pCurrent = pStart; for (int i = 0; i < 20000; i++) { pCurrent = pStart; //rndXorshift.NextBytes(buffer); rndXorshift.FillBufferEx(plStart, plEnd); /* * while (pCurrent <= pEnd) * { * //randomValue = *pCurrent & 100000; * randomValue = *pCurrent; * pCurrent++; * } */ } } } dh.StoptWatch(); if (gchBuffer.IsAllocated) { gchBuffer.Free(); } Console.WriteLine(dh.GetMessage()); }
public static void TestRandomGeneratorRndXorshiftByte() { int randomValue = 0; Console.WriteLine("Test RndXorshift generator bytes: "); dh.StartWatch(); XorshiftUnrolled64 rndXorshift = new XorshiftUnrolled64(); byte[] buffer = new byte[1024 * 1024]; //GCHandle gchBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned); for (int i = 0; i < 20000; i++) { rndXorshift.NextBytes(buffer); /* * foreach (var value in buffer) * { * randomValue = value; * } */ } dh.StoptWatch(); Console.WriteLine(dh.GetMessage()); Console.WriteLine("Test Fast Random generator bytes: "); dh.StartWatch(); FastRandom fastRandom = new FastRandom(); byte[] buffer1 = new byte[1024 * 1024]; //GCHandle gchBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned); for (int i = 0; i < 20000; i++) { fastRandom.NextBytes(buffer1); /* * foreach (var value in buffer) * { * randomValue = value; * } */ } dh.StoptWatch(); Console.WriteLine(dh.GetMessage()); Console.WriteLine("Test Random generator bytes: "); Random random = new Random(); byte[] buffer2 = new byte[1024 * 1024]; //GCHandle gchBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned); for (int i = 0; i < 20000; i++) { random.NextBytes(buffer2); /* * foreach (var value in buffer) * { * randomValue = value; * } */ } dh.StoptWatch(); Console.WriteLine(dh.GetMessage()); }