private static void TestRDTSCP() { if (!CPUID.ISSupported(CPUID.CPUIDFeature.InvariantTSC)) { Console.WriteLine("Invariant TSC is not supported, RDTSC isn't reliable as a wall clock"); } const int LOOP = 1000000; var sw = Stopwatch.StartNew(); var start = Intrinsincs.RDTSCP(); for (var i = 0; i < LOOP; i++) { Intrinsincs.RDTSCP(); } var end = Intrinsincs.RDTSCP(); sw.Stop(); Console.WriteLine("SW: {0}ms", sw.ElapsedMilliseconds); Console.WriteLine("RDTSCP: {0}ms", (end - start) / MHZ); Console.WriteLine("RDTSCP: {0}cycles", (end - start) / LOOP); }
static public void Main(string[] args) { Intrinsincs.Init(); TestCPUID(); TestBSWAP32(); //TestBSWAP64(); TestBSF16(); TestBSF32(); TestBSF64(); TestBSR16(); TestBSR32(); TestBSR64(); if (CPUID.ISSupported(CPUID.CPUIDFeature.POPCNT)) { TestPOPCNT16(); TestPOPCNT32(); TestPOPCNT64(); } else { Console.WriteLine("POPCNT not supported, skipping"); } TestRDTSC(); if (CPUID.ISSupported(CPUID.CPUIDFeature.RDTSCP)) { TestRDTSCP(); } else { Console.WriteLine("RDTSCP not supported, skipping"); } }