Skip to content

Instantly share code, notes, and snippets.

@badamczewski
Created September 21, 2020 07:31
Show Gist options
  • Save badamczewski/1207ed0d109c6f60f8a9019d68bbaf15 to your computer and use it in GitHub Desktop.
Save badamczewski/1207ed0d109c6f60f8a9019d68bbaf15 to your computer and use it in GitHub Desktop.
Loads Per Cycle Test
public class CpuLoadLimitTests
{
private readonly int[] _data = new int[1_000_000];
[Benchmark(Baseline = true)]
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
public unsafe int Sum_Simple()
{
var s0 = 0;
var s1 = 0;
var s2 = 0;
var s3 = 0;
fixed (int* data = &_data[0])
{
for (var i = 0; i < _data.Length; i += 4)
{
unchecked
{
var p = &data[i];
s0 += p[0];
s1 += p[1];
s2 += p[2];
s3 += p[3];
}
}
return s0 + s1 + s2 + s3;
}
}
[Benchmark]
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
public unsafe int Sum_Tricky()
{
var s0 = 0;
var s1 = 0;
var s2 = 0;
var s3 = 0;
fixed (int* data = &_data[0])
{
for (var i = 0; i < _data.Length; i += 4)
{
unchecked
{
var p = (long*)data;
var f = *p;
var s = *p + 1;
s0 += (int)(f >> 32);
s1 += (int)(f & 0xFFFF_FFFF);
s2 += (int)(s >> 32);
s3 += (int)(s & 0xFFFF_FFFF);
p += 2;
}
}
return s0 + s1 + s2 + s3;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment