Skip to content

Commit

Permalink
Add SpanLinq
Browse files Browse the repository at this point in the history
  • Loading branch information
aalmada committed May 18, 2021
1 parent 1adf5b3 commit 69a4e4b
Show file tree
Hide file tree
Showing 18 changed files with 212 additions and 16 deletions.
13 changes: 12 additions & 1 deletion LinqBenchmarks/Array/Int32/ArrayInt32Select.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using JM.LinqFaster.SIMD;
using NetFabric.Hyperlinq;
Expand Down Expand Up @@ -91,6 +92,16 @@ public int LinqOptimizer()
return sum;
}

[Benchmark]
public int SpanLinq()
{
var items = source.AsSpan().Select(item => item * 3);
var sum = 0;
foreach (var item in items)
sum += item;
return sum;
}

[Benchmark]
public int Streams()
{
Expand Down
9 changes: 8 additions & 1 deletion LinqBenchmarks/Array/Int32/ArrayInt32SelectToList.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using JM.LinqFaster.SIMD;
using NetFabric.Hyperlinq;
Expand Down Expand Up @@ -68,6 +69,12 @@ public List<int> LinqOptimizer()
.ToList()
.Run();

[Benchmark]
public List<int> SpanLinq()
=> source.AsSpan()
.Select(item => item * 3)
.ToList();

[Benchmark]
public List<int> Streams()
=> source.AsStream()
Expand Down
17 changes: 16 additions & 1 deletion LinqBenchmarks/Array/Int32/ArrayInt32SkipTakeSelect.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -77,6 +78,20 @@ public int LinqOptimizer()
return sum;
}

[Benchmark]
public int SpanLinq()
{
var items = source
.AsSpan()
.Skip(Skip)
.Take(Count)
.Select(item => item * 3);
var sum = 0;
foreach (var item in items)
sum += item;
return sum;
}

[Benchmark]
public int Streams()
{
Expand Down
17 changes: 16 additions & 1 deletion LinqBenchmarks/Array/Int32/ArrayInt32SkipTakeWhere.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -80,6 +81,20 @@ public int LinqOptimizer()
return sum;
}

[Benchmark]
public int SpanLinq()
{
var items = source
.AsSpan()
.Skip(Skip)
.Take(Count)
.Where(item => item.IsEven());
var sum = 0;
foreach (var item in items)
sum += item;
return sum;
}

[Benchmark]
public int Streams()
{
Expand Down
15 changes: 14 additions & 1 deletion LinqBenchmarks/Array/Int32/ArrayInt32Where.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -90,6 +91,18 @@ public int LinqOptimizer()
return sum;
}

[Benchmark]
public int SpanLinq()
{
var items = source
.AsSpan()
.Where(item => item.IsEven());
var sum = 0;
foreach (var item in items)
sum += item;
return sum;
}

[Benchmark]
public int Streams()
{
Expand Down
10 changes: 9 additions & 1 deletion LinqBenchmarks/Array/Int32/ArrayInt32WhereCount.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -61,6 +62,13 @@ public int LinqOptimizer()
.Count()
.Run();

[Benchmark]
public int SpanLinq()
=> source
.AsSpan()
.Where(item => item.IsEven())
.Count();

[Benchmark]
public int Streams()
=> source
Expand Down
16 changes: 15 additions & 1 deletion LinqBenchmarks/Array/Int32/ArrayInt32WhereSelect.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -91,6 +92,19 @@ public int LinqOptimizer()
return sum;
}

[Benchmark]
public int SpanLinq()
{
var items = source
.AsSpan()
.Where(item => item.IsEven())
.Select(item => item * 3);
var sum = 0;
foreach (var item in items)
sum += item;
return sum;
}

[Benchmark]
public int Streams()
{
Expand Down
10 changes: 9 additions & 1 deletion LinqBenchmarks/Array/Int32/ArrayInt32WhereSelectToArray.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -69,6 +70,13 @@ public int[] LinqOptimizer()
.ToArray()
.Run();

[Benchmark]
public int[] SpanLinq()
=> source.AsSpan()
.Where(item => item.IsEven())
.Select(item => item * 3)
.ToArray();

[Benchmark]
public int[] Streams()
=> source.AsStream()
Expand Down
10 changes: 9 additions & 1 deletion LinqBenchmarks/Array/Int32/ArrayInt32WhereSelectToList.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -66,6 +67,13 @@ public List<int> LinqOptimizer()
.ToList()
.Run();

[Benchmark]
public List<int> SpanLinq()
=> source.AsSpan()
.Where(item => item.IsEven())
.Select(item => item * 3)
.ToList();

[Benchmark]
public List<int> Streams()
=> source.AsStream()
Expand Down
16 changes: 15 additions & 1 deletion LinqBenchmarks/Array/ValueType/ArrayValueTypeSelect.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using BenchmarkDotNet.Attributes;
using System;
using System.Linq;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using LinqFasterer;
using Nessos.LinqOptimizer.CSharp;
Expand Down Expand Up @@ -85,6 +87,18 @@ public FatValueType LinqOptimizer()
return sum;
}

[Benchmark]
public FatValueType SpanLinq()
{
var items = source
.AsSpan()
.Select(item => item * 3);
var sum = default(FatValueType);
foreach (var item in items)
sum += item;
return sum;
}

[Benchmark]
public FatValueType Streams()
{
Expand Down
17 changes: 16 additions & 1 deletion LinqBenchmarks/Array/ValueType/ArrayValueTypeSkipTakeSelect.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -79,6 +80,20 @@ public FatValueType LinqOptimizer()
return sum;
}

[Benchmark]
public FatValueType SpanLinq()
{
var items = source
.AsSpan()
.Skip(Skip)
.Take(Count)
.Select(item => item * 3);
var sum = default(FatValueType);
foreach (var item in items)
sum += item;
return sum;
}

[Benchmark]
public FatValueType Streams()
{
Expand Down
17 changes: 16 additions & 1 deletion LinqBenchmarks/Array/ValueType/ArrayValueTypeSkipTakeWhere.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -80,6 +81,20 @@ public FatValueType LinqOptimizer()
return sum;
}

[Benchmark]
public FatValueType SpanLinq()
{
var items = source
.AsSpan()
.Skip(Skip)
.Take(Count)
.Where(item => item.IsEven());
var sum = default(FatValueType);
foreach (var item in items)
sum += item;
return sum;
}

[Benchmark]
public FatValueType Streams()
{
Expand Down
16 changes: 15 additions & 1 deletion LinqBenchmarks/Array/ValueType/ArrayValueTypeWhere.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using BenchmarkDotNet.Attributes;
using System;
using System.Linq;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using LinqFasterer;
using Nessos.LinqOptimizer.CSharp;
Expand Down Expand Up @@ -89,6 +91,18 @@ public FatValueType LinqOptimizer()
return sum;
}

[Benchmark]
public FatValueType SpanLinq()
{
var fatValueTypes = source
.AsSpan()
.Where(item => item.IsEven());
var sum = default(FatValueType);
foreach (var item in fatValueTypes)
sum += item;
return sum;
}

[Benchmark]
public FatValueType Streams()
{
Expand Down
16 changes: 15 additions & 1 deletion LinqBenchmarks/Array/ValueType/ArrayValueTypeWhereSelect.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -93,6 +94,19 @@ public FatValueType LinqOptimizer()
return sum;
}

[Benchmark]
public FatValueType SpanLinq()
{
var items = source
.AsSpan()
.Where(item => item.IsEven())
.Select(item => item * 3);
var sum = default(FatValueType);
foreach (var item in items)
sum += item;
return sum;
}

[Benchmark]
public FatValueType Streams()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -71,6 +72,14 @@ public FatValueType[] LinqOptimizer()
.ToArray()
.Run();

[Benchmark]
public FatValueType[] SpanLinq()
=> source
.AsSpan()
.Where(item => item.IsEven())
.Select(item => item * 3)
.ToArray();

[Benchmark]
public FatValueType[] Streams()
=> source
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using System;
using BenchmarkDotNet.Attributes;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
Expand Down Expand Up @@ -70,6 +71,14 @@ public List<FatValueType> LinqOptimizer()
.ToList()
.Run();

[Benchmark]
public List<FatValueType> SpanLinq()
=> source
.AsSpan()
.Where(item => item.IsEven())
.Select(item => item * 3)
.ToList();

[Benchmark]
public List<FatValueType> Streams()
=> source
Expand Down
Loading

0 comments on commit 69a4e4b

Please sign in to comment.