Exemple #1
0
 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());
        }