游侠NETSHOW论坛

标题: 355使用單核工作原理分析 [打印本页]

作者: ζαδιων    时间: 2008-11-2 08:39:51     标题: 355使用單核工作原理分析

對大多AMD核心無效

355並非缺少支持雙核的代碼, 而是有意無意指定了單核工作.

一般而言, 線程任務由哪個核負擔是由系統分配的, 除非程序自身帶有屏蔽某核的指令, 否則系統會讓程序運行一段時間後, 讓幾個核的工作盡量平均.

查找msdn文檔, 得知SetThreadAffinityMask這個API是用來指定線程工作的. 快速打開代碼部分, 發現在主循環中每次經過這裡:

push    1                               ; /AffinityMask = 1
call    dword ptr [<&kernel32.GetCurrent..>; |[GetCurrentThread
push    eax                              ; |hThread
call    dword ptr [<&kernel32.SetThreadA..>; \SetThreadAffinityMask

AffinityMask參數被設成1了, 依照msdn文檔的定義, 這表示屏蔽第一核以外的所有核心(BIN:00000001), 那麼要修復這個bug(雖說不一定是bug, 可能有其他用意)就很容易了, 將該參數設為bin:11111111(0xff), 即可解除對其他核的屏蔽. (經實驗, 設0有同樣效果)

我的intel T7500雙核, vista sp1系統, 未打過任何外部雙核補丁(如smss註冊表, amd optimizer等等)表現如下
http://www.youtube.com/watch?v=JiQKyXU74t8

非程序員出身, 希望學有專攻者多賜教

附件是修改過的1.01主程序

[ 本帖最后由 ζαδιων 于 2008-11-4 15:41 编辑 ]
作者: iorilucifer    时间: 2008-11-2 08:42:40

看不懂,纯支持,感觉LZ很强大
作者: j_hane    时间: 2008-11-2 09:12:08

很强大。。。
作者: ananmo    时间: 2008-11-2 09:19:18

深奥了,有没有傻瓜点的办法来修复这个问题?
作者: 温暖披肩    时间: 2008-11-2 09:33:01

强贴留名.. ...
作者: chrismen    时间: 2008-11-2 09:34:46

可以达到VISTA下的效果?
修改哪些部分?
作者: woozming    时间: 2008-11-2 09:39:31

强烈希望LZ出个教程,以便我等小白使用
作者: madbearbest    时间: 2008-11-2 09:46:59

膜拜LZ,等XP的.............

俺程序员才刚入门,帮不了什么忙了
作者: 幽淼淼    时间: 2008-11-2 09:48:40

很强。俺完全看不懂掩面。。
于是。。有没有办法解决这个问题?
作者: rooney1    时间: 2008-11-2 09:49:47

用什么工具修改啊!!!!!!!!!!!!!!!
作者: sairm    时间: 2008-11-2 09:51:04

看是看懂了,问题是需要用啥改。。
作者: rooney1    时间: 2008-11-2 09:52:34

lS正解,20字补丁!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 6400152    时间: 2008-11-2 10:01:35

等LZ的XP傻瓜式补丁........
作者: 雨灵铃    时间: 2008-11-2 10:06:54

线程在哪个CPU上工作应该是由进程决定的吧,线程只是共享进程的资源,而不能拥有资源
换句话说,线程是分配不到任何资源的,资源是分配给进程的

不过这和LZ要解决的问题MS无关[伤心啊] ............线程的操作还是得依赖API
作者: hong2668883    时间: 2008-11-2 10:44:31

太强大了。。。。。。。。。

有没有 XP的教程啊
作者: Darkneece    时间: 2008-11-2 11:05:49

原帖由 雨灵铃 于 2008-11-2 10:06 发表
线程在哪个CPU上工作应该是由进程决定的吧,线程只是共享进程的资源,而不能拥有资源
换句话说,线程是分配不到任何资源的,资源是分配给进程的

不过这和LZ要解决的问题MS无关[伤心啊] ............线程的操作还是得依赖API ...

不对,进程只是一个指令和数据和相关信息等的非活动的容器,活动的是线程,也就是说是线程在进程中执行指令。线程的调度由操作系统负责,所以LZ做的是有帮助的

弄补丁也简单,直接脱壳改指令就OK

[ 本帖最后由 Darkneece 于 2008-11-2 11:09 编辑 ]
作者: 雨灵铃    时间: 2008-11-2 11:27:06     标题: 回复 #17 Darkneece 的帖子

我没有否认LZ做的不对
我只是说线程是分配不到资源的,线程是进程内的调度执行单元不错,线程的控制由API负责也不假
但CPU是分配给进程的,线程只能享用,而非拥有
也就是说,线程调度由系统的程序控制,但在哪个CPU工作要看它所在的进程
作者: tangyu1111111    时间: 2008-11-2 11:41:53

我的问题是显卡不够,是单核的。7300GS。貌似把分辨率开低了感觉很好,355的战场氛围终于出来了,可是超强的打击感,?能将小兵子豪爽打飞的招式呢?暗荣还来………………
作者: jtr900930    时间: 2008-11-2 11:43:23

留名等补丁。。。。。。。。
作者: 雨灵铃    时间: 2008-11-2 11:44:53

当然分给进程的CPU最终还是给线程用的,所以LZ做的是正确的....
其实说系统分资源给线程也说的过去,只是不太严谨
在实际分配过程中,是进程得到资源,线程使用该资源
作者: ζαδιων    时间: 2008-11-2 11:57:05

原帖由 雨灵铃 于 2008-11-2 10:06 发表
线程在哪个CPU上工作应该是由进程决定的吧,线程只是共享进程的资源,而不能拥有资源
换句话说,线程是分配不到任何资源的,资源是分配给进程的

不过这和LZ要解决的问题MS无关[伤心啊] ............线程的操作还是得依赖API ...

抱歉, 我對術語確實不熟, 半路出家的結果
其實我想說的是如354, z52程序裡不調用SetThreadAffinityMask的, 都能讓兩個核運作,
唯獨355調用了SetThreadAffinityMask屏蔽了第二核(可查文檔), 故推測問題出在這裡
作者: ζαδιων    时间: 2008-11-2 12:01:35

放網盤.. 有興趣自己測試
http://akazukin.ys168.com/
test目錄下bbgori.rar, .01版或許啟動不了

原程序是隔壁的脫了殼的
不要抱太大希望, 目前測試過的(xp, vista64)都說無效...
作者: ddmdd    时间: 2008-11-2 12:01:38

期待LZ有更好的发现
作者: 雨灵铃    时间: 2008-11-2 12:05:12

呵呵,LZ太谦虚了
你做的事情我是做不来的
我只知道操作系统的工作逻辑和原理
具体到NT LINUX的内核和应用程序,我知之甚少
LZ比我强多了
作者: 冷月风闻    时间: 2008-11-2 12:34:42

莫非这样就可以让双核同时工作,太棒了,希望LZ有更大的进展。。。。。。。
作者: jay605694819    时间: 2008-11-2 14:20:01

很佩服楼主的精神,希望以后能够弄出傻瓜补丁。
作者: 水 绫    时间: 2008-11-2 14:41:35

完全看不懂。。。。。。

不过我觉得楼主和千人斩大大以及消失一段时间的周大都是很神的程序员了
作者: cctv12345v    时间: 2008-11-2 16:30:47

楼主很好很强大 潜水员也出来冒个泡………………………………………………
作者: ζαδιων    时间: 2008-11-2 16:35:32

附件, 網盤更新, v1.01可以執行了..
不知道有沒有用intel多核, vista32系統的朋友, 方便的話有效沒效都講下[伤心啊]
作者: cctv12345v    时间: 2008-11-2 16:46:57

测试无效……………………………………………………66
XP32

[ 本帖最后由 cctv12345v 于 2008-11-2 16:49 编辑 ]
作者: jtr900930    时间: 2008-11-2 16:54:19

网盘下载哪有啊。。。。。。。。。。。。。。附件下不了。。。
作者: ζαδιων    时间: 2008-11-2 17:14:00     标题: 回复 #32 jtr900930 的帖子

#23..
http://akazukin.ys168.com/
test目錄下bbg22.01fixed

[ 本帖最后由 ζαδιων 于 2008-11-2 17:16 编辑 ]
作者: s871206    时间: 2008-11-2 17:40:12

测试有效,我的系统是32bit的xp sp3,附截图
[attach]1557142[/attach]
作者: madbearbest    时间: 2008-11-2 17:44:50

XP SP2 32bit 依旧无效

难道和AMD的双核补丁有关??
作者: jtr900930    时间: 2008-11-2 18:01:07

Xp Sp3
AMD5200+用了以后好像基本没什么效果。。。
虎牢关6疯子的地方还是会在20帧到40帧间变动。。
CPU使用率有一核全满一核一点点。。。。
作者: ζαδιων    时间: 2008-11-2 18:26:17     标题: 回复 #34 s871206 的帖子

謝謝回覆, 問下原來(原始程序)會把第一核占滿嗎? 用intel的核心嗎?
作者: ζαδιων    时间: 2008-11-2 18:27:39     标题: 回复 #36 jtr900930 的帖子

那是完全無效了.. 不知和用amd核有沒有關係..
作者: miharu    时间: 2008-11-2 18:31:54

Vista 64 测试有效了
可是频数好像没上升
AMD X2 4200+@2.75G

202020202

[ 本帖最后由 miharu 于 2008-11-2 18:35 编辑 ]
作者: s871206    时间: 2008-11-2 18:33:09     标题: 回复 #37 ζαδιων 的帖子

恩,原来的会把第一核占满,而第二核几乎是空的,cpu是intel 2140,用了你的程序后两个基本差不多,但好像第二核会多些
作者: X芒果猎人X    时间: 2008-11-2 18:38:49

测试有效,E6420 系统为XP SP3
原程序[attach]1557267[/attach]


lz的程序[attach]1557268[/attach]

[ 本帖最后由 X芒果猎人X 于 2008-11-2 22:42 编辑 ]
作者: madbearbest    时间: 2008-11-2 18:56:16     标题: 回复 #39 miharu 的帖子

难道AMD的需要在64bit下才有效??
作者: shermiesss    时间: 2008-11-2 19:19:58

继续等待小白鼠的强悍试验
难道AMD的真的没用?
作者: 冷月风闻    时间: 2008-11-2 19:23:58

XP SP2 双核补丁已打
AMD4800+.失败。。。。。。。。。。。。。。。。。。。。

[ 本帖最后由 冷月风闻 于 2008-11-2 19:26 编辑 ]
作者: windy_7777    时间: 2008-11-2 19:25:51

顶啊,虽然我觉得好像快不了多少,但楼长的想法还是不错的。
作者: chrismen    时间: 2008-11-2 19:33:23

那看来对XP 32还是没什么效果啊
XP真就那么差么...
作者: ζαδιων    时间: 2008-11-2 19:33:45     标题: 回复 #39 miharu 的帖子

或許是其他瓶頸吧.. 比如gpu
其實我的筆記本改前改後都是平均19幀.
作者: rooney1    时间: 2008-11-2 20:47:57

无语,不能下载啊!!!!!!!!!!!!!!!!!!
作者: change265    时间: 2008-11-2 20:55:56

LZ分析的很不错
作者: ddmdd    时间: 2008-11-2 21:31:32

VISTA32系统,两个核的占有率相差无几。
作者: honwaikit    时间: 2008-11-2 21:32:04

看不懂,不過試一下
感謝LZ
作者: 月野小斑猫    时间: 2008-11-2 21:51:24

饿……还准备抽个时间回去给测试一下呢。现在大家都可以测试了……

衷心希望LZ成功
作者: zhu040    时间: 2008-11-2 22:46:53

2008下测试有效,不过不知道是不是因为我的是打了汉化补丁,游戏的时候乱码
作者: garysnake    时间: 2008-11-2 23:06:56

E7300在SP2下测试有效,不过MS流畅度没什么变化。。
作者: 疾风战场    时间: 2008-11-2 23:15:31

跟LZ汇报一下:第一个核占用50%以上,第二个核占用80%以上

系统:VISTA SP1 32位

CPU:酷睿2 e8300 2.83G(小超了一下到3.1G)

显卡:8600GT(这卡是开高分辨率和高特效的瓶颈,要是能换个好些的卡估计帧数能够提升不少吧)
作者: 疾风战场    时间: 2008-11-2 23:21:41

补充一句:我是在竞赛里的暴风模式下面测试的(因为人多),也许在正常的自由模式下面体现的会更好些

PS:刚才试了一下自由模式,选择了阳光普照的“许都攻侵战”,结果发现依然是第一核50%左右,第二核80%左右,我记得没用LZ补丁以前是第一核90%,第二核20%

[ 本帖最后由 疾风战场 于 2008-11-2 23:29 编辑 ]
作者: Darkneece    时间: 2008-11-3 00:09:51

测试了一下:

CPU:Intel E6600
内存:2G
显卡:XFX N 8600GT 驱动版本 177.41
操作系统:XP 32BIT


进程优先级为低,全部效果最高,吴郡平定战

[attach]1557692[/attach]
第一张图是1.0版

[attach]1557693[/attach]
第二张图是1.1版

[attach]1557694[/attach]
第三张图是1.1双核修改版

可以看出来,双核有一定的优势,第二个核的利用率高了不少

[attach]1557695[/attach]
战斗中,可以看到第一核的使用率也提高了

可以推测:双核同时工作时,第一核处理的是游戏的主逻辑。画面显示部分使用显示的线程和显卡配合工作,被操作系统调度到第二核去了。

第二核内核使用率(红色曲线)很高,说明其频繁的在调用显卡驱动

注:我的显卡不好,所以没法在人多的时候消除显卡的瓶颈,所以选了非战斗情况作测试对比。期待4核CPU和有好显卡的高手测试

[ 本帖最后由 Darkneece 于 2008-11-3 00:19 编辑 ]
作者: q365407091    时间: 2008-11-3 01:14:15

原帖由 疾风战场 于 2008-11-2 23:21 发表
补充一句:我是在竞赛里的暴风模式下面测试的(因为人多),也许在正常的自由模式下面体现的会更好些

PS:刚才试了一下自由模式,选择了阳光普照的“许都攻侵战”,结果发现依然是第一核50%左右,第二核80%左右,我记得没用LZ补丁以前 ...

我的也是如此,U是AMD 5200,这样是成功优化了吗?
作者: ζαδιων    时间: 2008-11-3 01:36:34     标题: 回复 #56 疾风战场 的帖子

我這裡把程序優先級提高會讓第二核降一點點, 具體原理不明..
作者: ζαδιων    时间: 2008-11-3 01:39:55     标题: 回复 #57 Darkneece 的帖子

同期待
第一核ms處理BGM/語音播放也占用不少..
作者: ζαδιων    时间: 2008-11-3 01:45:03     标题: 回复 #58 q365407091 的帖子

第一核使用率降下來了嗎. 降下來就是生效了
順便問下系統.. ms不少人說用amd的u不生效..
作者: nijiko    时间: 2008-11-3 04:50:12

话说千人斩大大是台湾人还是大陆人啊?
老是见你用繁体字
但是台湾不说『线程』,而说『执行绪』吧?
作者: shermiesss    时间: 2008-11-3 09:09:58

我用的和你说的不一样~我用的时候第一核心基本都是没降下来
但第二核心明显提高了很多,是比原来的顺多了

XP SP2 32bit
AMD5200+

[ 本帖最后由 shermiesss 于 2008-11-3 09:16 编辑 ]
作者: ananmo    时间: 2008-11-3 09:12:00

显卡风扇坏了,不敢运行355,暂时没法测试.
作者: 温暖披肩    时间: 2008-11-3 09:19:19

不错,看LS们还是有点用..不过我没测试..这样玩355的人多了,浮云就多了  [嘿嘿嘿]
作者: freedomGG    时间: 2008-11-3 09:19:21

如果研究成功的话楼主又一次造福万民咯,HOHO~
作者: 疾风战场    时间: 2008-11-3 09:44:20

呵呵,期待LZ能搞个完美版的补丁,最好让双核都能充分用到
作者: q365407091    时间: 2008-11-3 10:08:15

原帖由 ζαδιων 于 2008-11-3 01:45 发表
第一核使用率降下來了嗎. 降下來就是生效了
順便問下系統.. ms不少人說用amd的u不生效..

系统是自己用vlite精简DIY制作的Vista,非Vista SP1,只打了如下补丁
本来的是

现在的是
U是AMD5200,2.7G(没超),但原本运行也不卡不太极的,偶有卡(极少)改进程优先级为“高”就会流畅很多了
作者: ζαδιων    时间: 2008-11-3 13:09:53     标题: 回复 #68 q365407091 的帖子

這樣看來是否生效跟amd沒有關係, 我懷疑是xp或amd雙核補丁(optimizer)的緣故
因為查了下網路文章, SetThreadAffinityMask多數場合用在校準計時上, 355主程序該call下又恰好接著QueryPerformanceCounter, 故應該是個定時器. 據微軟文檔說QueryPerformanceCounter不指定單核會有bug(微秒尺度內返回時間誤差).
xp或amd optimizer可能自帶了該bug修正機制, 導致355整個循環被強制單核運行...
作者: 冷月风闻    时间: 2008-11-3 16:48:17     标题: 回复 #69 ζαδιων 的帖子

也就是说AMD的就没戏了么?唉,空欢喜一场。。。。。。。。。。。。
作者: 碎发男孩    时间: 2008-11-3 20:00:21

笔记本t5550(1.83*2)     ati3470
vista32 u
1024*768 全低 泛光on
平时都是800*600 用了这个补丁1024 (还忘了关迅雷)能跑出以前的流畅度,
内存使用量是一条直线,my god
作者: 191752061    时间: 2008-11-3 21:47:17

很久不见技术帖,顶一下。。。
作者: yagami1379    时间: 2008-11-4 11:38:10

强贴留名!敢问附件里的就是传说中的改善核心利用补丁吗!
作者: 6400152    时间: 2008-11-4 11:58:27

大家用了有效果么?还有问下LZ,能用在隔壁论坛汉化版本的355么
作者: jay605694819    时间: 2008-11-4 12:26:29

楼主已经放出补丁了啊,很高兴啊。呵呵......
作者: ζαδιων    时间: 2008-11-4 12:47:09

網盤放上亂改第一版, 取消了主循環中釋放線程資源的sleep(0), 反正355幾乎是單線程遊戲(除了BGM線程)..
bbg22fast.rar
作者: jay605694819    时间: 2008-11-4 13:00:56

本人测试了,用了之后还是一样的啊,第一个核全满,第二个核只用一点点,楼主还是继续加油啊。
作者: Allen_hu    时间: 2008-11-4 14:01:00

YLMF XP SP3 有效 不知伤cpu不?
作者: lampuiho    时间: 2008-11-4 15:28:21

你是用什麼除錯軟件的..... VS2008?
作者: softstar001    时间: 2008-11-4 15:35:43

AMD 4000+  已装双核驱动和双核补丁


XP  SP3


无效[attach]1560174[/attach]
作者: sintra    时间: 2008-11-4 15:45:54

LZ放出的版本是1.0.1.0的 原始CLONE版的1.0.0.0的可以用不?
作者: ζαδιων    时间: 2008-11-4 15:49:33     标题: 回复 #79 Allen_hu 的帖子

取消了一個調用而已, 之前大蛇z52之類的定時器也沒有這個調用.

回复 #82 sintra 的帖子

1.00的在網盤bbg22ori..
作者: zhangyiyang998    时间: 2008-11-4 17:34:49

有效!!!!!!!!
谢谢楼主
2020
作者: 6400152    时间: 2008-11-4 18:49:42

原来是双核用?
作者: sintra    时间: 2008-11-4 20:37:16

谢谢LZ分享~ 虎牢吕布修罗~双核都在70%工作~
作者: nijiko    时间: 2008-11-4 23:02:48

原帖由 ζαδιων 于 2008-11-4 12:47 发表
網盤放上亂改第一版, 取消了主循環中釋放線程資源的sleep(0), 反正355幾乎是單線程遊戲(除了BGM線程)..
bbg22fast.rar


fast版可以做一个1.01版的吗?
本人XP有效……太感谢大大了!
作者: 紸禵推廣    时间: 2008-11-4 23:18:04

虽然不知道LZ的强帖说什么,但我还是顶叻。支持,希望LZ出个教程(视频)或者菜鸟版的EXE版。
作者: wang2023    时间: 2008-11-5 04:19:06

本來的配置就極順(Q6600+8800ULTRA+4G+XP SP3),好奇就裝裝看,結果如下:
原本的4核心使用量:約30%+2%+2%+2%
使用後4核心使用量:約10%+10%+10%+10%

因為本身沒卡過、也沒太極過,故不知是否有效

推薦用下列方式測試(會被15個武將包圍,不含每個武將的兩個副將,如算進來將是45個五將+人山人海的小兵)
官渡之戰
呂布軍
呂布
一開始就直接進攻烏槽,打下烏槽後,曹操和袁紹就會聯手攻呂布軍,此時離開烏槽,等烏槽被攻回去後,進入烏槽旁的據點,開始迎戰八(我的配置使用本補丁前後並無差別,推薦給大家試試)

最後還是謝謝LZ ,因為LZ讓4個核心都在跑,去看CPU使用量時看起來比較舒服
作者: yagami1379    时间: 2008-11-5 10:51:23

看来AMD的U再一次被鄙视……
AMDX4 P9550使用后实测效果:第一核100%,其他三核依旧0%……
郁闷
作者: softstar001    时间: 2008-11-5 12:12:39

看到LS的回复我心里也好受点了

还以为仅仅AMD的X2不行呢
作者: bishini    时间: 2008-11-5 13:03:34

AMD5000+测试有效
作者: lampuiho    时间: 2008-11-5 13:40:19

感覺是AMD 的和DRIVER OR 系統有關
作者: gailiren    时间: 2008-11-5 15:02:49

用了后很有效 原来是99% 3%
现在是55% 55%
感谢LZ啊
作者: yagami1379    时间: 2008-11-5 15:09:05

原帖由 bishini 于 2008-11-5 13:03 发表
AMD5000+测试有效

这位朋友能不能把系统、配置、双核补丁这些情况详细说一下?最好贴个图出来,让广大无效的A友参考参考。
作者: bishini    时间: 2008-11-5 15:16:57

原帖由 yagami1379 于 2008-11-5 15:09 发表

这位朋友能不能把系统、配置、双核补丁这些情况详细说一下?最好贴个图出来,让广大无效的A友参考参考。

AMD5000+OC3.0
2g ddr2 800
ATI4850
VISTA SP1 没打双核补丁
用楼主发布的补丁后任何时候2个U都是一起工作的,而且有时第2个U还比第1个高一点
作者: madbearbest    时间: 2008-11-5 15:21:19     标题: 回复 #96 bishini 的帖子

看样子是XP的问题............
作者: ζαδιων    时间: 2008-11-5 15:47:46     标题: 回复 #87 nijiko 的帖子

有迫切必要麼(比如用crt..)? fast改動有些多, 尾部補丁不知道夠不夠裝..

回复 #89 wang2023 的帖子
大概就這樣了吧.. 這改動只是讓355回到一般程序的狀態而已..

[ 本帖最后由 ζαδιων 于 2008-11-5 15:53 编辑 ]
作者: 6400152    时间: 2008-11-5 16:34:00

突然在这里RP大爆发看到洋葱头了

[害怕] 看了后原来是双核用的[凄凉] 我只能华丽路过.........[知错了]
作者: nijiko    时间: 2008-11-5 21:19:53

原帖由 ζαδιων 于 2008-11-5 15:47 发表
有迫切必要麼(比如用crt..)? fast改動有些多, 尾部補丁不知道夠不夠裝..

回复 #89 wang2023 的帖子
大概就這樣了吧.. 這改動只是讓355回到一般程序的狀態而已.. ...

首先感谢大大的辛勤劳动~~
倒是没有迫切的必要……
只是想追求完美……(pia飞)
如果大大有时间,就请帮顺手做一个吧……
作者: 宇宙鼠    时间: 2008-11-5 22:38:13

LS好,我下了bbgori來測試,可是點下去都只有出現一個黑色的小視窗然後就沒任何反應了。
我是vista32系統,intel雙核心,不知道是否還要什麼條件才能執行呢?

我的無雙5是日文版最原始沒更新過的版本...
作者: asmaria    时间: 2008-11-6 00:32:50

AMD3800+打过新的双核补丁(貌似是8月的?)效果明显




欢迎光临 游侠NETSHOW论坛 (https://game.ali213.net/) Powered by Discuz! X2