我想知道是否有一种方法可以从C#.NET检测主机系统CPU中AES-NI的存在。请注意,这个问题并不是关于如何使用.NET的AES-NI。简单地使用AESCryptoServiceProvider将使用AES-NI(如果可用),这个结果是基于我所做的独立基准测试之后得出的。将AESCryptoServiceProvider的性能与TrueCrypt提供的基准测试进行比较,TrueCrypt确实支持AES-NI。在有和没有AES-NI的两台机器上,结果非常相似。
我想要能够测试它的原因是能够向用户指示他们的计算机是否支持AES-NI。这将是相关的,因为它将减少支持事件,涉及像“但我的朋友也有一个Core i5处理器,但他的比我的快很多!”这样的问题。如果程序的用户界面可以向用户指示他们的系统是否支持AES-NI,那么也可以指出“慢速性能是正常的,因为此系统不支持AES-NI”。
(我们应该感谢英特尔为所有不同处理器版本带来的困惑! :-) ) 是否有一种方法可以检测此信息,例如通过WMI?
我想要能够测试它的原因是能够向用户指示他们的计算机是否支持AES-NI。这将是相关的,因为它将减少支持事件,涉及像“但我的朋友也有一个Core i5处理器,但他的比我的快很多!”这样的问题。如果程序的用户界面可以向用户指示他们的系统是否支持AES-NI,那么也可以指出“慢速性能是正常的,因为此系统不支持AES-NI”。
(我们应该感谢英特尔为所有不同处理器版本带来的困惑! :-) ) 是否有一种方法可以检测此信息,例如通过WMI?
Win32_Processor
的ProcessorID
属性,它是CPUID调用后EAX和EDX寄存器的位掩码,但不包括您关心的ECX部分。 - Scott Chamberlain