示例#1
1
        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);
        }
示例#2
0
        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");
            }
        }