public void bmm_32x32() { for (var i = 0; i < SampleSize; i++) { var m1 = Random.BitMatrix32(); var m2 = m1.Replicate(); var m3 = Random.BitMatrix32(); var m4 = m2 * m3; var m5 = BitRef.bmm(m1, m3); Claim.yea(m4 == m5); } }
void scatter_check <T>() where T : unmanaged { for (var i = 0; i < SampleSize; i++) { var src = Random.Next <T>(); var mask = Random.Next <T>(); var s1 = BitRef.scatter(src, mask); var s2 = gbits.scatter(src, mask); Claim.eq(s1, s2); } }
void scatter_bench_ref <T>() where T : unmanaged { var sw = stopwatch(false); var opcount = CycleCount * RoundCount; var size = bitsize <T>(); var opname = $"scatter_{size}x{size}_ref"; for (var i = 0; i < opcount; i++) { var src = Random.Next <T>(); var mask = Random.Next <T>(); sw.Start(); var dst = BitRef.scatter(src, mask); sw.Stop(); } Collect((opcount, sw, opname)); }
OpTime ShiftLeft256x16uRef(int blocks, int cycles) { var blocklen = Vec256 <ushort> .Length; var opcount = blocks * cycles * blocklen; var shiftRange = closed <byte>(2, 14); var sw = stopwatch(false); var src = Random.Stream <ushort>(); var offsets = Random.Stream(shiftRange); for (var cycle = 0; cycle < cycles; cycle++) { for (var block = 0; block < blocks; block++) { var x = src.TakeSpan(blocklen); var offset = offsets.First(); sw.Start(); BitRef.ShiftL(x, offset); sw.Stop(); } } return(OpTime.Define(opcount, snapshot(sw), "slli16uRef")); }