-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
Processing dotnet/runtime#111853 (comment) command:
Command
-amd -intel --envvars DOTNET_EnableAVX512F:0
using BenchmarkDotNet.Running;
using BenchmarkDotNet.Attributes;
using System.Numerics;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public unsafe class LongBench
{
private const int nitems = 1 << 10;
private long* data;
[GlobalSetup]
public void Setup()
{
const int len = sizeof(long) * nitems;
data = (long*)NativeMemory.AlignedAlloc(len, 64);
Random.Shared.NextBytes(new Span<byte>(data, len));
}
[Benchmark]
public Vector128<long> Multiply128()
{
long* ptr = data, end = ptr + nitems - Vector128<long>.Count;
var res = Vector128<long>.Zero;
while (ptr < end)
{
res ^= Vector128.LoadAligned(ptr) * Vector128.LoadAligned(ptr + Vector128<long>.Count);
ptr += Vector128<long>.Count;
}
return res;
}
[Benchmark]
public Vector256<long> Multiply256()
{
long* ptr = data, end = ptr + nitems - Vector256<long>.Count;
var res = Vector256<long>.Zero;
while (ptr < end)
{
res ^= Vector256.LoadAligned(ptr) * Vector256.LoadAligned(ptr + Vector256<long>.Count);
ptr += Vector256<long>.Count;
}
return res;
}
[Benchmark]
public Vector<long> MultiplyVectorT()
{
long* ptr = data, end = ptr + nitems - Vector<long>.Count;
var res = Vector<long>.Zero;
while (ptr < end)
{
res ^= Vector.Load(ptr) * Vector.Load(ptr + Vector256<long>.Count);
ptr += Vector<long>.Count;
}
return res;
}
}(EgorBot will reply in this issue)
Metadata
Metadata
Assignees
Labels
No labels