注册 | 登录

游侠NETSHOW论坛





查看: 3568|回复: 12
打印 上一主题 下一主题

[原创] AMD 64偷工减料被抓? [复制链接]

帖子
1190
精华
0
积分
595
金钱
1135
荣誉
0
人气
4
评议
0
跳转到指定楼层
楼主
发表于 2010-4-24 19:59:51 |只看该作者 |正序浏览
http://msdn.microsoft.com/en-us/library/bb514094.aspx

This intrinsic generates the cmpxchg16b  instruction (with the lock prefix) to perform a 128-bit locked compare and exchange. Early versions of AMD 64-bit hardware do not support this instruction. To check for hardware support for the cmpxchg16b instruction, call the __cpuid intrinsic with InfoType=0x00000001 (standard function 1). Bit 13 of CPUInfo[2] (ECX) is 1 if the instruction is supported.

使用道具 举报

帖子
1190
精华
0
积分
595
金钱
1135
荣誉
0
人气
4
评议
0
13#
发表于 2010-4-25 19:03:18 |只看该作者
vs2008 x64下没法内嵌汇编,所以只能用intrinsics了

使用道具 举报

帖子
2548
精华
0
积分
1280
金钱
2478
荣誉
0
人气
30
评议
0
12#
发表于 2010-4-24 23:49:11 |只看该作者
高手   泪流满面

使用道具 举报

帖子
1065
精华
0
积分
533
金钱
1044
荣誉
0
人气
0
评议
0
11#
发表于 2010-4-24 23:31:22 |只看该作者
原帖由 Inabxm007 于 2010-4-24 22:27 发表
你在说啥?????????????????????


哦,intrinsics同时表示一种封装的指令。它以函数的形式表示这些指令,使得程序员更容易编写和阅读这些指令,在编译的时候把这些汇编指令直接嵌入代码中,没有函数调用的负担,可以和直接写汇编代码达到同样的性能效果。比如SSE指令_mm_add_ps(__m128, __m128)表示对两个128位的SSE寄存器进行加法运算。这就是接近于汇编代码的直接对cpu的工作方式进行干预了,所以这种代码有可能有对cpu的指令支持要求,比如奔3以前的cpu是不支持的。但是如果你直接用C语言写一个加法运算不要求SSE优化,那么就算是20年前的cpu也可以正常运行。

所以楼主的所谓AMDcpu问题在普通编写的代码上是不会出现的。

使用道具 举报

帖子
61
精华
0
积分
31
金钱
66
荣誉
0
人气
0
评议
0
10#
发表于 2010-4-24 22:29:32 |只看该作者
      看不懂。。。。






跟你视频聊天,我们可以视频聊天,但绝对不激情聊天室,我会爱上视频聊天室

使用道具 举报

帖子
1065
精华
0
积分
533
金钱
1044
荣誉
0
人气
0
评议
0
9#
发表于 2010-4-24 22:15:23 |只看该作者
这么说吧,AMD最早推出了X86的64位指令集,为intel所承认,当然后期一些细节上有所变化。

楼主提到的这个错误在普通的代码编译下是不会产生多大问题的,但是如果你准备自己优化代码,采取intrinsic指令(一种略高于汇编指令,并且编译器可以识别处理的代码)来写程序的某些特殊段落的话,才会有碰到。但是一般在intrinsic 指令的编译手册会告诉你的 ,除非你根本不看。

使用道具 举报

帖子
16797
精华
0
积分
8531
金钱
11321
荣誉
7
人气
368
评议
0
8#
发表于 2010-4-24 20:18:17 |只看该作者
说的应该是A社早期的64位处理器不完善,不能支持cmpxchg16b指令吧,哪有“偷工减料”之说?

使用道具 举报

力天使

活跃勋章白金会员勋章

帖子
25655
精华
0
积分
13696
金钱
23270
荣誉
80
人气
661
评议
0
7#
发表于 2010-4-24 20:05:38 |只看该作者
只看懂了“早期版本的AMD64位硬件不支持此程序”.........

使用道具 举报

帖子
400
精华
0
积分
200
金钱
597
荣誉
0
人气
0
评议
0
6#
发表于 2010-4-24 20:05:07 |只看该作者
这内在的生成与锁前缀cmpxchg16b指令()来执行一个128位锁定比较和交流。早期版本的AMD 64位硬件不支持该指令。检查硬件支持的cmpxchg16b指令,调用__cpuid内在与信息类型= 0x00000001(标准函数1)。
位CPUInfo 13 [2](ECX对比)为1,如果指令支持。


好吧  我承认我是 机翻的~
CPU FX5000 oc3.0
散热 极冻酷凌GT5710+
主板 微星 770T-C45
显卡 蓝宝5850毒药
硬盘 WD500G 7200转 32M
内存 黑金刚 DDR800 2G*2
电源 磐石500(额定400W,最大500W)
显示器 AOC912SW+

使用道具 举报

帖子
5
精华
0
积分
3
金钱
30
荣誉
0
人气
0
评议
0
5#
发表于 2010-4-24 20:00:43 |只看该作者
我靠

老子看不懂鳥語

.......
一個絕種的癡情好男人~~

我比英吉先破X男。

哇哈哈~~

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-8-14 16:31 , Processed in 0.345464 second(s), 11 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到