POPPUR爱换

标题: 程序bug导致不得不配AMD处理器了,烦恼 [打印本页]

作者: coolhair    时间: 2008-9-14 10:34
标题: 程序bug导致不得不配AMD处理器了,烦恼
公司的一段代码有不知名的bug,在Intel双核上跑总是出错,但是在AMD双核上或是单核上很正常。
为此老总责成我为公司配一台性能较好的AMD机器用来测试。好久不接触AMD平台了,知识匮乏中。

请问在只考虑单核效能的情况下,是Athlon 64 X 2 5200+快还是Phemon 8450快?

另外Intel的E2160,E7200等cpu可以在大多数主板上关闭双核功能么?我的另一个想法是直接上core2然后关闭双核......

老板的要求很简单,就是在程序不出错的情况下,尽可能的快,还要尽可能的省钱......大家有什么好的推荐
作者: snovi    时间: 2008-9-14 10:38
很神奇的代码啊..- - LZ开源吧..
作者: snovi    时间: 2008-9-14 10:38
然后卖给AMD 让AMD收买软件厂商..写入程序..intel的U就不用卖了..
作者: fathom    时间: 2008-9-14 10:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: sonicxz    时间: 2008-9-14 11:05
你这软件做出来不是半残啊{blush:] 太。。太太强大了
作者: k0838    时间: 2008-9-14 11:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: zxb8537    时间: 2008-9-14 12:57
不用主板BIOS屏蔽,系统里直接就可以指定单个核心来运行一个程序的啊

PS:顺便想看看是个什么程序,用来做什么的?
作者: flz821028    时间: 2008-9-14 16:09
等码:w00t):
作者: bcyj    时间: 2008-9-14 17:25
一点不神奇,本身程序的同步没处理好,最近很多人问我这个问题,一看代码都是低级的错误。。
作者: Prescott    时间: 2008-9-14 17:34
有bug就改bug呗,做鸵鸟。{sweat:]
作者: kingofmx200    时间: 2008-9-14 18:32
一年没用delphi,现在一看就有点晕{blush:]
作者: bcyj    时间: 2008-9-14 18:38
不用楼上这么特殊。。。
就这样就可以
volatile BYTE * g_Byte;
线程一:
for(;;)
{
BYTE bTemp;
g_Byte = &bTemp;
*g_Byte = 1;
}
线程二
for(;;)
{
g_Byte = NULL;
}

AMD不挂,core核心的必挂,独享和共享l2的区别
作者: netmask254    时间: 2008-9-14 18:43
5200快。肥龙因为是太肥了所以想快也快不了。

我想,AMD一定是雇佣了大量的程序员到各个公司打游击。写下几行神奇的代码之后就换个地方。然后大家就都买AMD平台了。

楼主的老板这个建议我是有生以来第一次看到,作为一个程序员,我感到非常非常的神奇。
作者: fhxy2006    时间: 2008-9-14 19:55
那还是配多核的吧,总要好用些
作者: fhxy2006    时间: 2008-9-14 20:00
原帖由 zxb8537 于 2008-9-14 12:57 发表
不用主板BIOS屏蔽,系统里直接就可以指定单个核心来运行一个程序的啊

PS:顺便想看看是个什么程序,用来做什么的?



开始 运行 msconfig 回车,在照着下面的图就可以任意设定系统用几核了,设定后要重启
作者: FENG950    时间: 2008-9-14 20:12
原帖由 bcyj 于 2008-9-14 18:38 发表
不用楼上这么特殊。。。
就这样就可以
volatile BYTE * g_Byte;
线程一:
for(;;)
{
BYTE bTemp;
g_Byte = &bTemp;
*g_Byte = 1;
}
线程二
for(;;)
{
g_Byte = NULL;
}

AMD不挂,core核心的必挂,独 ...


没同步的到哪都会错,AMD怎么就没事?
作者: bcyj    时间: 2008-9-14 20:33
原帖由 FENG950 于 2008-9-14 20:12 发表


没同步的到哪都会错,AMD怎么就没事?

独立缓存,由于是写入马上读,数据还在cache中,两个cpu的cache里同一个值不一样
作者: coolhair    时间: 2008-9-14 20:34
小弟不才,能否具体讲解一下为何楼上那段程序在Intel cpu上会错
另外真的是5200快么?
作者: kingofmx200    时间: 2008-9-14 20:34
原帖由 FENG950 于 2008-9-14 20:12 发表


没同步的到哪都会错,AMD怎么就没事?


看你激动的,答案都不看。
作者: soga    时间: 2008-9-14 20:37
原帖由 bcyj 于 2008-9-14 18:38 发表
不用楼上这么特殊。。。
就这样就可以
volatile BYTE * g_Byte;
线程一:
for(;;)
{
BYTE bTemp;
g_Byte = &bTemp;
*g_Byte = 1;
}
线程二
for(;;)
{
g_Byte = NULL;
}

AMD不挂,core核心的必挂,独 ...


会挂是不是当g_Byte = NULL;后执行*g_Byte = 1;造成的吧,这样的话正常都会挂才对吧,AMD不挂恐怕才有问题
作者: bcyj    时间: 2008-9-14 20:40
其实也不是不会挂,不过挂的机会小很多,在楼主那种情况看起来,就好像amd的不会挂
作者: aeondxf    时间: 2008-9-14 20:43
{biggrin:] smart cache和胶水L2的分别
作者: soga    时间: 2008-9-14 20:44
那我觉得为了长期稳定,楼主还是把BUG改了吧
作者: coolhair    时间: 2008-9-14 20:54
原帖由 soga 于 2008-9-14 20:44 发表
那我觉得为了长期稳定,楼主还是把BUG改了吧


要是能改早就改了,程序经过了太多人的手已经无法维护了。我虽然也是写程序的,但这次我只负责配机器而已,全公司就我一人上pcinlife,对硬件发烧点,哈哈。

[ 本帖最后由 coolhair 于 2008-9-14 20:55 编辑 ]
作者: FENG950    时间: 2008-9-14 21:06
原帖由 bcyj 于 2008-9-14 20:33 发表

独立缓存,由于是写入马上读,数据还在cache中,两个cpu的cache里同一个值不一样

同一个变量同时拥有了不同的值,结果就搞错了。另外,如果是这样的话,AMD的cache如何保证一致性呢?某核心在cache里修改了某块内存拷贝的值,其它核心懵然不知.....

[ 本帖最后由 FENG950 于 2008-9-14 21:12 编辑 ]
作者: Prescott    时间: 2008-9-14 21:18
原帖由 bcyj 于 2008-9-14 18:38 发表
不用楼上这么特殊。。。
就这样就可以
volatile BYTE * g_Byte;
线程一:
for(;;)
{
BYTE bTemp;
g_Byte = &bTemp;
*g_Byte = 1;
}
线程二
for(;;)
{
g_Byte = NULL;
}

AMD不挂,core核心的必挂,独 ...

这种代码要是哪种CPU上不挂,那就是CPU的bug!!
作者: bcyj    时间: 2008-9-14 21:32
原帖由 FENG950 于 2008-9-14 21:06 发表

同一个变量同时拥有了不同的值,结果就搞错了。另外,如果是这样的话,AMD的cache如何保证一致性呢?某核心在cache里修改了某块内存拷贝的值,其它核心懵然不知.....

我以前的测试结果就是这样,amd在有lock前缀的指令之前都不会同步l2
作者: FENG950    时间: 2008-9-14 21:36
原帖由 bcyj 于 2008-9-14 21:32 发表

我以前的测试结果就是这样,amd在有lock前缀的指令之前都不会同步l2

AMD这么业余?{sweat:]
作者: bcyj    时间: 2008-9-14 21:41
原帖由 FENG950 于 2008-9-14 21:36 发表

AMD这么业余?{sweat:]

不业余吧,正常做好同步的程序,结果绝对正常,没同步的,本来原子值就是不保证是什么的
作者: FENG950    时间: 2008-9-14 21:43
原帖由 bcyj 于 2008-9-14 21:41 发表

不业余吧,正常做好同步的程序,结果绝对正常,没同步的,本来原子值就是不保证是什么的

某核心修改cache行却不发出通知,还不业余?
作者: 百分百好牛    时间: 2008-9-14 22:50
这个要关注一下。
居然还有这种事。
呵呵。
太过份了。

我也觉得应该挂才对,这样才能告诉dev,程序有问题。否则就是掩盖了错误,以后会出大问题的。
作者: itany    时间: 2008-9-15 00:26
原帖由 bcyj 于 2008-9-14 21:32 发表

我以前的测试结果就是这样,amd在有lock前缀的指令之前都不会同步l2


这个不是会导致运算结果出现不可知么?
如果这个BUG爆出来,那A U真的就……
作者: fhxy2006    时间: 2008-9-15 00:45
看不懂程序啊,帮顶顶,跑程序,支持多核就上多核,不支持多核就上大缓存,原则就是这个
作者: 铁道虫    时间: 2008-9-15 00:52
看不懂,坐地板看大家讨论
作者: frankincense    时间: 2008-9-15 00:57
原帖由 itany 于 2008-9-15 00:26 发表


这个不是会导致运算结果出现不可知么?
如果这个BUG爆出来,那A U真的就……

把同步错误的责任推给程序员就是了{lol:]
作者: LinuxIsHard    时间: 2008-9-15 01:27
dozens of "Software Engineer"
except bcyj
作者: 电解质    时间: 2008-9-15 01:56
{sweat:]
作者: Eureka    时间: 2008-9-15 08:57
原帖由 weiliu86 于 2008-9-15 08:07 发表

嘿嘿,别看DELPHI现在不吃香了,但写些小程序还是DELPHI最快速方便,还可以嵌入汇编,还有大量现成的控件支持,省事,特别适合于像我这样的非程序员人士。


我还在拿D6做数据库开发,快捷~!:p
作者: tansailuffy    时间: 2008-9-15 09:02
{lol:]  作为一名QA,还是建议你把问题明确的提给你的Leader,把风险说明。这种程序上的Bug最好还是改掉。虽然不知道程序的使用者是贵公司,还是要卖给其他用户。如果是自己公司使用,固然可以配一台AMD平台的生产机;如果是卖给客户,难道该产品的用户手册上要印上“Only Support on AMD Platform”?那样的话,恐怕会严重的影响客户对贵公司的技术水平的评估。
作者: 翠花    时间: 2008-9-15 09:35
原帖由 tansailuffy 于 2008-9-15 09:02 发表
{lol:]  作为一名QA,还是建议你把问题明确的提给你的Leader,把风险说明。这种程序上的Bug最好还是改掉。虽然不知道程序的使用者是贵公司,还是要卖给其他用户。如果是自己公司使用,固然可以配一台AMD平台的生产机 ...

我觉得不会影响客户对他们公司技术水平的评估
一般情况下客户会认为
“这家公司小有规模,只是明珠投暗,站错了队,被AMD收买了……”:lol:
作者: zkai    时间: 2008-9-15 10:23
绝对是烂程序。
以后如果法律健全了。客户出现问题要求赔你们公司就完蛋了
作者: itany    时间: 2008-9-15 10:25
原帖由 rx78meng 于 2008-9-15 01:15 发表
楼上几个

本楼不管怎么看,都是amd得了一小分

怎么说着说着,正常跑程序的amdu变成bug了

不同架构的cpu,有的能跑有的不能跑很正常的吧,i u不能跑的东西,别人能跑就是bug阿?

本来没有什么好研究的东西 ...


你怎么知道是“正常跑”呢?
程序不报错,只是结果可能是不可知的,就是正常?

如果医院化验室给阁下用这种程序,你敢去么?
作者: 百分百好牛    时间: 2008-9-15 10:26
原帖由 rx78meng 于 2008-9-15 01:15 发表
楼上几个

本楼不管怎么看,都是amd得了一小分

怎么说着说着,正常跑程序的amdu变成bug了

不同架构的cpu,有的能跑有的不能跑很正常的吧,i u不能跑的东西,别人能跑就是bug阿?

本来没有什么好研究的东西,楼上几个太过分了
 


首先程序的确是有问题,是程序员的问题,没有处理同步。
但跑错误的程序,应该得到的是错误的结果,逻辑上才说得过去。
但这个地方,AMD的U跑这个错误的程序居然没有crash说明什么,说明U在设计时有些部分有问题,硬件我不太懂,前面的兄弟说了,AMD的U 的CACHE没有同步。 

我不是故意刁难AMD,如果这个问题一直存在的话,以后会给写程序的人造成很大的麻烦,找不到错误的原因在哪里(一般大家都认为CPU执行是没有错误的),或者把产品卖出来了,留下一个很大的定时炸弹。

俺只是就事论是。
作者: cs2001    时间: 2008-9-15 10:31
程序的bug, 不自己想办法, 赖人家intel, 真是晕~ {closedeyes:]
作者: fathom    时间: 2008-9-15 10:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: fathom    时间: 2008-9-15 10:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: xing83    时间: 2008-9-15 11:41
The way it means to be bug...
原帖由 翠花 于 2008-9-15 09:35 发表

我觉得不会影响客户对他们公司技术水平的评估
一般情况下客户会认为
“这家公司小有规模,只是明珠投暗,站错了队,被AMD收买了……”:lol:

作者: scowl    时间: 2008-9-15 12:21
只考虑单核效能的话 买个6000+就行了

现在也就600~700元
作者: tootoo    时间: 2008-9-15 12:51


作者: coolhair    时间: 2008-9-15 14:54
原帖由 bcyj 于 2008-9-14 18:38 发表
不用楼上这么特殊。。。
就这样就可以
volatile BYTE * g_Byte;
线程一:
for(;;)
{
BYTE bTemp;
g_Byte = &bTemp;
*g_Byte = 1;
}
线程二
for(;;)
{
g_Byte = NULL;
}

AMD不挂,core核心的必挂,独 ...


我还真照着这个例子写了一个程序,在我的E2160上没挂......运行得很流畅
作者: 小二马    时间: 2008-9-15 16:44
完全没看懂~~~看结果~
作者: FENG950    时间: 2008-9-15 16:50
原帖由 coolhair 于 2008-9-15 14:54 发表


我还真照着这个例子写了一个程序,在我的E2160上没挂......运行得很流畅


你的2160强悍到无语了{sweat:] 搞得我也写了一个(因为偶也有2160).......幸亏挂了。
作者: FENG950    时间: 2008-9-15 16:52
原帖由 百分百好牛 于 2008-9-15 10:26 发表


首先程序的确是有问题,是程序员的问题,没有处理同步。
但跑错误的程序,应该得到的是错误的结果,逻辑上才说得过去。
但这个地方,AMD的U跑这个错误的程序居然没有crash说明什么,说明U在设计时有些部分有问 ...


老实说我还真不信AMD就没事,哪位有X2的朋友不怕麻烦帮忙验证下。
作者: LinuxIsHard    时间: 2008-9-15 16:55
还在纠缠么,犯了原则性错误的程序。
有空就进修一下总比在这里发帖子强
作者: mmxsse    时间: 2008-9-15 17:30
这种事情比较奇怪
作者: coolhair    时间: 2008-9-15 19:20
原帖由 FENG950 于 2008-9-15 16:50 发表


你的2160强悍到无语了{sweat:] 搞得我也写了一个(因为偶也有2160).......幸亏挂了。


我的真没挂,因为程序太简单,另一个进程没机会改写地址。然后我在g_Byte = &bTemp;和*g_Byte = 1;两条语句间加了一句输出,用来延时,这次果然挂了。

说老实话我也不相信这程序在AMDX2上会不挂,有的同志们试一下,强烈呼吁!来颠覆我的思想吧......AMD cache居然不自动同步......
作者: ATXT    时间: 2008-9-15 19:27
等amd结果。。
作者: 笑看风云淡    时间: 2008-9-16 08:33
原帖由 coolhair 于 2008-9-15 19:20 发表


我的真没挂,因为程序太简单,另一个进程没机会改写地址。然后我在g_Byte = &bTemp;和*g_Byte = 1;两条语句间加了一句输出,用来延时,这次果然挂了。

说老实话我也不相信这程序在AMDX2上会不挂,有的同志们试 ...


帮你在AMD 4000+ Dual上试过了,程序运行出错,看来不是这个问题啊。再找找其他原因,我就说这样的程序怎么会不错
作者: johnny佬    时间: 2008-9-17 15:46
完全看不懂  -_-!!
作者: 沙门    时间: 2008-9-18 01:06
原帖由 rx78meng 于 2008-9-15 01:15 发表
楼上几个

本楼不管怎么看,都是amd得了一小分

怎么说着说着,正常跑程序的amdu变成bug了

不同架构的cpu,有的能跑有的不能跑很正常的吧,i u不能跑的东西,别人能跑就是bug阿?

本来没有什么好研究的东西 ...


正确的程序输出正确的结果,错误的程序输出错误的结果,才叫正常。

错误的程序也被CPU顺利跑下来了,而且对于这样的结果,事先无法预知,

叫正常么。
作者: zyxel2008    时间: 2008-9-18 07:45
原帖由 沙门 于 2008-9-18 01:06 发表


正确的程序输出正确的结果,错误的程序输出错误的结果,才叫正常。

错误的程序也被CPU顺利跑下来了,而且对于这样的结果,事先无法预知,

叫正常么。



人家已经说了,“不管怎么说,A U得了一小分”,人家又没说是否正常,但这种“得一小分”我还是觉得不要为好......
作者: nix1985    时间: 2008-9-18 08:39
进来学习C++代码,看到指针就头晕...:wacko:
作者: nankey    时间: 2008-9-18 10:13
原帖由 rx78meng 于 2008-9-15 01:15 发表
楼上几个

本楼不管怎么看,都是amd得了一小分

怎么说着说着,正常跑程序的amdu变成bug了

不同架构的cpu,有的能跑有的不能跑很正常的吧,i u不能跑的东西,别人能跑就是bug阿?

本来没有什么好研究的东西 ...


这位兄台的发言,才是大大的有问题,程序不严谨是程序员的事情,但是如果cpu把一段被判定会出错的代码执行为正确,简直就是请注意文明用词错误。

比如说如果我写的另外某个程序就在判定这个缓存里的数据做关键判断,结果amd的u不实时更新,那我岂不是很惨?

我看来,amd不光没得了一小分,应该扣一大分。把amd的team拉出去掌嘴才合适
作者: roadrunner    时间: 2008-9-18 10:24
CACHE对程序来说应当是相当透明的, 对CACHE的使用策略只应当影响性能不应当影响结果

能在AMD上正确而Intel要完蛋的代码还真不好找

P4不支持64G以上的物理内存, 但是这对于扣肉不应当是限制吧
作者: tedsun    时间: 2008-9-22 15:51
原帖由 沙门 于 2008-9-18 01:06 发表


正确的程序输出正确的结果,错误的程序输出错误的结果,才叫正常。

错误的程序也被CPU顺利跑下来了,而且对于这样的结果,事先无法预知,

叫正常么。


错误的程序输出不可知的结果,也是一种错误啊。偶然,错误的程序输出了正确的结果也不奇怪。

[ 本帖最后由 tedsun 于 2008-9-22 15:52 编辑 ]
作者: fonfon    时间: 2008-9-22 21:21
如果真的是上面这种错误的程序能在A U上跑的正常,那我以后再也不会买A了。
完全不符合逻辑的东西,在电脑世界里是不允许存在的!
作者: lvhan    时间: 2008-9-23 09:18
嵌入式现在写代码都不考虑缓存了吧 程序员面对的应该是操作系统级甚至java的虚拟机级
作者: FANCK    时间: 2008-9-23 12:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: 笑看风云淡    时间: 2008-9-23 13:05
我个人十分的希望“ bcyj”能够拿出一段因为cache而让intel挂, amd不挂的代码来让我研究下......




欢迎光临 POPPUR爱换 (https://we.poppur.com/) Powered by Discuz! X3.4