Skip to content

Instantly share code, notes, and snippets.

@badamczewski
Created September 21, 2020 05:34
Show Gist options
  • Save badamczewski/43fe18dbf6dd1cb87a7d6f8f9df94d15 to your computer and use it in GitHub Desktop.
Save badamczewski/43fe18dbf6dd1cb87a7d6f8f9df94d15 to your computer and use it in GitHub Desktop.
LoadsPerCycleTest
public class CpuLoadLimitTests
{
private readonly int[] _data = new int[100_000_000];
[Benchmark(Baseline = true)]
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)
{
var p = &data[i];
s0 += p[0];
s1 += p[1];
s2 += p[2];
s3 += p[3];
}
return s0 + s1 + s2 + s3;
}
}
[Benchmark]
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)
{
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