Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- using System.Threading.Tasks;
- using BenchmarkDotNet.Attributes;
- using NumSharp;
- using NumSharp.Backends.Unmanaged;
- namespace TensorFlowBenchmark.Unmanaged
- {
- // | Method | Iterations | Mean | Error | StdDev | Median | Min | Max | Ratio | RatioSD |
- // |-------------------- |----------- |----------------:|--------------:|--------------:|---------------:|------------------:|---------------:|------:|--------:|
- // | 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 | ? | ? |
- // | 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 | ? | ? |
- // | Linear | 1 | 68.52 ns | 5.937 ns | 55.53 ns | 100.0 ns | 0.0000 ns | 200.0 ns | ? | ? |
- // | | | | | | | | | | |
- // | 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 | ? | ? |
- // | 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 | ? | ? |
- // | Linear | 10 | 68.01 ns | 5.155 ns | 48.62 ns | 100.0 ns | 0.0000 ns | 200.0 ns | ? | ? |
- // | | | | | | | | | | |
- // | 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 | ? | ? |
- // | 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 | ? | ? |
- // | Linear | 100 | 1,132.83 ns | 107.587 ns | 1,030.36 ns | 1,800.0 ns | 0.0000 ns | 3,600.0 ns | ? | ? |
- // | | | | | | | | | | |
- // | 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 |
- // | 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 |
- // | 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 |
- // | | | | | | | | | | |
- // | 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 |
- // | 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 |
- // | 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 |
- // | | | | | | | | | | |
- // | 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 |
- // | 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 |
- // | 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 |
- // | | | | | | | | | | |
- // | 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 |
- // | 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 |
- // | 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 |
- // | | | | | | | | | | |
- // | 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 |
- // | 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 |
- // | 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 |
- [SimpleJob(launchCount: 1, warmupCount: 2, targetCount: 1000)]
- [MinColumn, MaxColumn, MeanColumn, MedianColumn]
- public class TightLoopParallelFor
- {
- private ParallelOptions settingsConcurrent;
- private UnmanagedMemoryBlock<byte> _a;
- private UnmanagedMemoryBlock<byte> _b;
- [Params(1, 10, 100, 1000, 10000, 50_000, 100_000, 1_000_000)]
- public int Iterations { get; set; }
- [GlobalSetup]
- public void GlobalSetup()
- {
- settingsConcurrent = new ParallelOptions() {TaskScheduler = TaskScheduler.Default, MaxDegreeOfParallelism = Environment.ProcessorCount * 2};
- }
- [IterationSetup]
- public void Setup()
- {
- _a = new UnmanagedMemoryBlock<byte>(1_000_000);
- _b = new UnmanagedMemoryBlock<byte>(1_000_000);
- Parallel.For(0, 100, i => { }); //warmup
- }
- [Benchmark]
- public unsafe void DefaultHigherDegree()
- {
- var src = _a.Address;
- var dst = _b.Address;
- Parallel.For(0, Iterations, settingsConcurrent, i => { *(dst + i) = *(src + i); });
- }
- [Benchmark]
- public unsafe void Default()
- {
- var src = _a.Address;
- var dst = _b.Address;
- Parallel.For(0, Iterations, i => { *(dst + i) = *(src + i); });
- }
- [Benchmark(Baseline = true)]
- public unsafe void Linear()
- {
- var src = _a.Address;
- var dst = _b.Address;
- for (var i = 0; i < Iterations; i++)
- {
- *(dst + i) = *(src + i);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement