Advertisement
elibelash

Untitled

Oct 3rd, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.26 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using BenchmarkDotNet.Attributes;
  5. using NumSharp;
  6. using NumSharp.Backends.Unmanaged;
  7.  
  8. namespace TensorFlowBenchmark.Unmanaged
  9. {
  10.     // |              Method | Iterations |            Mean |         Error |        StdDev |         Median |               Min |            Max | Ratio | RatioSD |
  11.     // |-------------------- |----------- |----------------:|--------------:|--------------:|---------------:|------------------:|---------------:|------:|--------:|
  12.     // | DefaultHigherDegree |          1 |    15,218.63 ns |    204.140 ns |   1,889.98 ns |    15,100.0 ns |    11,200.0000 ns |    21,000.0 ns |     ? |       ? |
  13.     // |             Default |          1 |    15,487.86 ns |    267.378 ns |   2,471.45 ns |    15,200.0 ns |    10,400.0000 ns |    23,200.0 ns |     ? |       ? |
  14.     // |              Linear |          1 |        68.52 ns |      5.937 ns |      55.53 ns |       100.0 ns |         0.0000 ns |       200.0 ns |     ? |       ? |
  15.     // |                     |            |                 |               |               |                |                   |                |       |         |
  16.     // | DefaultHigherDegree |         10 |    14,810.54 ns |    210.938 ns |   1,958.18 ns |    14,500.0 ns |    10,800.0000 ns |    20,600.0 ns |     ? |       ? |
  17.     // |             Default |         10 |    14,416.90 ns |    209.573 ns |   1,935.05 ns |    14,100.0 ns |    10,000.0000 ns |    20,300.0 ns |     ? |       ? |
  18.     // |              Linear |         10 |        68.01 ns |      5.155 ns |      48.62 ns |       100.0 ns |         0.0000 ns |       200.0 ns |     ? |       ? |
  19.     // |                     |            |                 |               |               |                |                   |                |       |         |
  20.     // | DefaultHigherDegree |        100 |    14,191.81 ns |    155.916 ns |   1,438.84 ns |    14,100.0 ns |     8,100.0000 ns |    18,800.0 ns |     ? |       ? |
  21.     // |             Default |        100 |    14,761.86 ns |    145.679 ns |   1,365.34 ns |    14,500.0 ns |     8,400.0000 ns |    18,900.0 ns |     ? |       ? |
  22.     // |              Linear |        100 |     1,132.83 ns |    107.587 ns |   1,030.36 ns |     1,800.0 ns |         0.0000 ns |     3,600.0 ns |     ? |       ? |
  23.     // |                     |            |                 |               |               |                |                   |                |       |         |
  24.     // | DefaultHigherDegree |       1000 |    16,139.17 ns |    383.116 ns |   3,596.34 ns |    14,500.0 ns |    11,900.0000 ns |    28,300.0 ns | 19.72 |   14.89 |
  25.     // |             Default |       1000 |    14,085.53 ns |    193.154 ns |   1,726.51 ns |    13,700.0 ns |    11,500.0000 ns |    19,900.0 ns | 17.22 |   12.31 |
  26.     // |              Linear |       1000 |     1,506.50 ns |    106.327 ns |   1,018.81 ns |     1,850.0 ns |       400.0000 ns |     3,900.0 ns |  1.00 |    0.00 |
  27.     // |                     |            |                 |               |               |                |                   |                |       |         |
  28.     // | DefaultHigherDegree |      10000 |    51,534.99 ns |    685.769 ns |   6,524.48 ns |    48,500.0 ns |    42,900.0000 ns |    72,900.0 ns |  4.92 |    0.75 |
  29.     // |             Default |      10000 |    51,041.58 ns |    673.280 ns |   6,366.32 ns |    48,300.0 ns |    42,100.0000 ns |    70,300.0 ns |  4.88 |    0.74 |
  30.     // |              Linear |      10000 |    10,581.93 ns |     95.460 ns |     884.27 ns |    10,700.0 ns |     9,200.0000 ns |    13,300.0 ns |  1.00 |    0.00 |
  31.     // |                     |            |                 |               |               |                |                   |                |       |         |
  32.     // | DefaultHigherDegree |      50000 |   144,428.89 ns |  1,564.230 ns |  14,102.60 ns |   140,850.0 ns |   120,500.0000 ns |   188,800.0 ns |  2.89 |    0.29 |
  33.     // |             Default |      50000 |    91,806.71 ns |  1,370.650 ns |  12,926.91 ns |    87,300.0 ns |    71,800.0000 ns |   133,500.0 ns |  1.85 |    0.27 |
  34.     // |              Linear |      50000 |    49,993.19 ns |    130.935 ns |   1,197.12 ns |    49,900.0 ns |    47,600.0000 ns |    53,800.0 ns |  1.00 |    0.00 |
  35.     // |                     |            |                 |               |               |                |                   |                |       |         |
  36.     // | DefaultHigherDegree |     100000 |   237,656.88 ns |  2,587.643 ns |  23,995.78 ns |   229,800.0 ns |   203,900.0000 ns |   299,600.0 ns |  2.45 |    0.26 |
  37.     // |             Default |     100000 |   137,670.93 ns |  2,250.489 ns |  20,969.90 ns |   130,950.0 ns |   106,400.0000 ns |   203,100.0 ns |  1.42 |    0.21 |
  38.     // |              Linear |     100000 |    97,475.30 ns |    221.381 ns |   2,019.57 ns |    97,100.0 ns |    94,300.0000 ns |   103,900.0 ns |  1.00 |    0.00 |
  39.     // |                     |            |                 |               |               |                |                   |                |       |         |
  40.     // | DefaultHigherDegree |    1000000 | 1,805,867.40 ns |  8,891.925 ns |  81,162.52 ns | 1,803,300.0 ns | 1,684,300.0000 ns | 2,042,200.0 ns |  1.86 |    0.09 |
  41.     // |             Default |    1000000 |   881,461.76 ns | 14,362.681 ns | 133,688.03 ns |   816,450.0 ns |   772,300.0000 ns | 1,230,600.0 ns |  0.91 |    0.14 |
  42.     // |              Linear |    1000000 |   970,033.84 ns |  1,515.590 ns |  13,484.34 ns |   966,500.0 ns |   948,500.0000 ns | 1,018,800.0 ns |  1.00 |    0.00 |
  43.  
  44.  
  45.     [SimpleJob(launchCount: 1, warmupCount: 2, targetCount: 1000)]
  46.     [MinColumn, MaxColumn, MeanColumn, MedianColumn]
  47.     public class TightLoopParallelFor
  48.     {
  49.         private ParallelOptions settingsConcurrent;
  50.         private UnmanagedMemoryBlock<byte> _a;
  51.         private UnmanagedMemoryBlock<byte> _b;
  52.  
  53.         [Params(1, 10, 100, 1000, 10000, 50_000, 100_000, 1_000_000)]
  54.         public int Iterations { get; set; }
  55.  
  56.         [GlobalSetup]
  57.         public void GlobalSetup()
  58.         {
  59.             settingsConcurrent = new ParallelOptions() {TaskScheduler = TaskScheduler.Default, MaxDegreeOfParallelism = Environment.ProcessorCount * 2};
  60.         }
  61.  
  62.         [IterationSetup]
  63.         public void Setup()
  64.         {
  65.             _a = new UnmanagedMemoryBlock<byte>(1_000_000);
  66.             _b = new UnmanagedMemoryBlock<byte>(1_000_000);
  67.             Parallel.For(0, 100, i => { }); //warmup
  68.         }
  69.  
  70.  
  71.         [Benchmark]
  72.         public unsafe void DefaultHigherDegree()
  73.         {
  74.             var src = _a.Address;
  75.             var dst = _b.Address;
  76.             Parallel.For(0, Iterations, settingsConcurrent, i => { *(dst + i) = *(src + i); });
  77.         }
  78.  
  79.         [Benchmark]
  80.         public unsafe void Default()
  81.         {
  82.             var src = _a.Address;
  83.             var dst = _b.Address;
  84.             Parallel.For(0, Iterations, i => { *(dst + i) = *(src + i); });
  85.         }
  86.  
  87.         [Benchmark(Baseline = true)]
  88.         public unsafe void Linear()
  89.         {
  90.             var src = _a.Address;
  91.             var dst = _b.Address;
  92.             for (var i = 0; i < Iterations; i++)
  93.             {
  94.                 *(dst + i) = *(src + i);
  95.             }
  96.         }
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement