Exemplo n.º 1
0
 public T DangerousGetItem(int index)
 {
     return(_vec.DangerousGetUnaligned <T>(RingVecUtil.IndexToOffset(index, _head, _count)));
 }
Exemplo n.º 2
0
 public int MemoryAccessVecViaLocalDangerous()
 {
     return(_vec.DangerousGetUnaligned <int>(_idx));
 }
Exemplo n.º 3
0
        public void ForEachBench()
        {
            var   count = 50_000_000;
            var   arr   = new int[count];
            IList arrO  = arr;
            var   vecT  = new Vec <int>(arr);
            var   vec   = new Vec(arr);
            var   mem   = (Memory <int>)arr;
            var   list  = new List <int>(arr);

            //for (int i = 0; i < count; i++)
            //{
            //    vecT[i] = i;
            //    //if ((int)vec[i] != vecT[i])
            //    //{
            //    //    throw new Exception("(int)vec[i] != vecT[i]");
            //    //}
            //}

            long sum    = 0;
            var  rounds = 20;
            var  mult   = 10;

            for (int r = 0; r < rounds; r++)
            {
                //using (Benchmark.Run("Array", count * mult))
                //{
                //    var z = count - 1;
                //    for (int m = 0; m < mult; m++)
                //    {
                //        for (int j = 1; j < z; j++)
                //        {
                //            sum += arr[j - 1];
                //        }
                //    }
                //}

                //using (Benchmark.Run("ArrayO", count * mult))
                //{
                //    var z = count - 1;
                //    for (int m = 0; m < mult; m++)
                //    {
                //        for (int j = 1; j < z; j++)
                //        {
                //            sum += (int)arrO[j - 1];
                //        }
                //    }
                //}

                //using (Benchmark.Run("ArrayNoBC", count * mult))
                //{
                //    var z = count - 1;
                //    for (int m = 0; m < mult; m++)
                //    {
                //        for (int j = 1; j < arr.Length; j++)
                //        {
                //            sum += arr[j] + 1;
                //        }
                //    }
                //}

                //using (Benchmark.Run("List", count * mult))
                //{
                //    var z = count - 1;
                //    for (int m = 0; m < mult; m++)
                //    {
                //        for (int j = 1; j < z; j++)
                //        {
                //            sum += list[j - 1];
                //        }
                //    }
                //}

                //using (Benchmark.Run("VecT", count * mult))
                //{
                //    for (int m = 0; m < mult; m++)
                //    {
                //        var z = count - 1;
                //        for (int j = 1; j < z; j++)
                //        {
                //            sum += vecT.DangerousGet(j - 1);
                //        }
                //    }
                //}

                //using (Benchmark.Run("Span", count * mult))
                //{
                //    for (int m = 0; m < mult; m++)
                //    {
                //        var z = count - 1;
                //        var sp = vecT.Span;
                //        for (int j = 1; j < z; j++)
                //        {
                //            sum += sp[j - 1];
                //        }
                //    }
                //}

                using (Benchmark.Run("Vec.Get<T>", count * mult))
                {
                    for (int m = 0; m < mult; m++)
                    {
                        for (int j = 0; j < count; j++)
                        {
                            sum += vec.DangerousGetUnaligned <int>(j);
                        }
                    }
                }

                //using (Benchmark.Run("Vec", count * mult))
                //{
                //    for (int m = 0; m < mult; m++)
                //    {
                //        for (int j = 0; j < count; j++)
                //        {
                //            sum += (int)vec.DangerousGet(j);
                //        }
                //    }
                //}

                //using (Benchmark.Run("Memory<T>.Span", count * mult))
                //{
                //    for (int m = 0; m < mult; m++)
                //    {
                //        for (int j = 0; j < count; j++)
                //        {
                //            sum += (int)mem.Span[j];
                //        }
                //    }
                //}
            }

            Benchmark.Dump();
            Console.WriteLine(sum);
        }