加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 在给定用户模式故障转储的情况下找出CPU模型

发布时间:2020-12-13 22:35:03 所属栏目:Windows 来源:网络整理
导读:我的应用程序有崩溃转储.我的应用程序失败,一些用户说“无效指令”试图执行我在那里的一些SSSE指令. 在WinDBG中,如何查找CPU模型,以便查找其指令集,并支持指令集或更新应用程序的最低硬件要求? 这是!cpuid的输出: CP F/M/S Manufacturer MHz 0 16,4,3 una
我的应用程序有崩溃转储.我的应用程序失败,一些用户说“无效指令”试图执行我在那里的一些SSSE指令.

在WinDBG中,如何查找CPU模型,以便查找其指令集,并支持指令集或更新应用程序的最低硬件要求?

这是!cpuid的输出:

CP  F/M/S  Manufacturer     MHz
 0 16,4,3  <unavailable>   3000
 1 16,3  <unavailable>   3000
 2 16,3  <unavailable>   3000
 3 16,3  <unavailable>   3000

谷歌的其他命令说可能有帮助(!errrec,!cpuinfo,!sysinfo)打印“找不到导出”.

解决方法

你肯定没有得到太多的信息.虽然转储通常不具有所有原始CPU信息,但您至少应该看到制造商字符串.哦,好吧,让我们来看看你在这里需要做些什么……

CP列给出了逻辑处理器编号,因此您知道您正在处理具有4个逻辑处理器的系统.可能是四核,或者可能是具有超线程的双核.

F / M / S是Family / Model / Stepping,它是识别处理器的常用且相当标准的方法.正如AMD所说:

The processor Family identifies one or more processors as belonging to a group that possesses some common definition for software or hardware purposes. The Model specifies one instance of a processor family. The
Stepping identifies a particular version of a specific model. Therefore,Family,Model and Stepping,when taken together,form a unique identification or signature for a processor.

如果您在寻找这些东西时拥有制造商是最有帮助的,因为家庭编号非常混乱,但幸运的是,很明显家庭编号16(十六进制10)对应于AMD处理器(应该有一个制造商字符串“AuthenticAMD”).具体来说,它是AMD K10,这是巴塞罗那的微架构.这意味着没有超线程 – 这只是一个原生的四核系统.

我们可以通过查看模型进一步缩小范围.巴塞罗那核心有许多不同的型号,分别为Athlon II,Opteron,Phenom,Phenom II,Sempron,Turion和V系列.你的是模型4.这是一个棘手的地方,因为我不知道一个很好的资源列出了各种CPU的型号和步进.您必须直接与制造商联系并浏览他们的手册.例如,here is AMD’s Revision Guide for the 10h Family.如果您转到“处理器识别”部分(在PDF中显示为PDF中的书签),您会看到看起来很有前景的内容,但信息肯定不会以易于理解的形式呈现.您将获得长十六进制值,您必须从中提取对应于族(8-11),模型(4-7)和步进(0-3)的单个位.

我没有完成所有可怕的工作以确定,我只是快速猜测这是AMD Phenom II X4. X4适合四核,从粗略的一瞥看,Phenom IIs似乎是模型4.

无论如何,你可能已经停止了一段时间,因为微体系结构告诉你需要知道的一切.这是一个AMD Barcelona核心,它不支持Supplemental SSE3 (SSSE3)指令(三个S-不要与SSE3混淆;命名惯例是荒谬的). SSSE3是由英特尔发明的,与Core 2微体系结构一起发布.

直到Bobcat / Bulldozer,AMD才实施它们. Bulldozer是台式机和服务器的下一代21系列(15h),而Bobcat则是AMD APU的低孔核心.

SSSE3并没有真正提供那么多新指令.只有16,主要用于处理打包的整数,其中大多数是aren’t very exciting.转储还应该告诉你导致崩溃的指令的操作码.如果没有,你将不得不返回并从代码的字节地址中找出它.这将告诉您究竟哪个指令是问题.我猜你正在使用PSHUFB来就地替换字节,这是一条实际上非常有用的SSSE3指令.我见过的一个常见用途是a fast population count algorithm(尽管有其他实现不需要SSSE3几乎同样快,如果不是更快).

假设您正在使用MSVC进行编译,我实际上有点惊讶地看到它发出了这条指令.为了得到它,你必须告诉编译器以AVX为目标,这将阻止你的代码在比Sandy Bridge / Bulldozer更旧的任何东西上运行.我敢肯定,如果你不想提高你的最低系统要求,你可以找出另一个指令序列来做同样的事情. pshufd或movaps shufps可能是解决方法的候选者.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读