POPPUR爱换

标题: 其实我到现在还是搞不清楚,如果显卡有自己的核心,那CPU跑那么高到底是在处理什么? [打印本页]

作者: jinzhaohua    时间: 2010-9-14 21:35
标题: 其实我到现在还是搞不清楚,如果显卡有自己的核心,那CPU跑那么高到底是在处理什么?
不知道440能不能完全发挥出5750的性能??会不会玩着游戏CPU100%而显卡还没满载??
作者: fonfon    时间: 2010-9-15 08:07
cpu处理所有游戏的逻辑运算,CPU100%是因为程序写的不好,搞了个简单的封闭循环,很容易就100%的
作者: ilmic    时间: 2010-9-15 08:11
cpu是电脑核心,要把pcie上的信息搬去搬来。
作者: TheFIreMan    时间: 2010-9-15 09:13
程序还是需要CPU处理,显卡多数处理dx的api
作者: dychenyi    时间: 2010-9-15 09:15
本帖最后由 dychenyi 于 2010-9-15 09:17 编辑

ai, 物理(hawok)不都是cpu处理的。gpu只负责渲染
作者: wuhaiyingyj    时间: 2010-9-15 09:33
处理各种游戏里的信息,转换数据,协调运作,负责物理和AI等等。。。太多了
作者: kakaku.bj.cn    时间: 2010-9-15 09:46
不要本末倒置了,cpu才是真正的“中央处理器”,gpu老实说,更贴切地,只能称为协处理器
就是那些需要大规模并行但是很简单的运算中的“脏活累活”会扔给gpu去弄,稍微高级点的还是全要靠cpu
程序还是主要靠cpu运行的
作者: cyberlife    时间: 2010-9-15 10:17
没有CPU,显卡有啥用
作者: asdf007    时间: 2010-9-15 10:29
现在的的情况是显卡满载时CPU往往连50%都不到
作者: yyzjp    时间: 2010-9-15 10:31
cpu处理所有游戏的逻辑运算,CPU100%是因为程序写的不好,搞了个简单的封闭循环,很容易就100%的
fonfon 发表于 2010-9-15 08:07



    请问什么是封闭循环?

是不是有开放循环?
作者: yyzjp    时间: 2010-9-15 10:32
不要本末倒置了,cpu才是真正的“中央处理器”,gpu老实说,更贴切地,只能称为协处理器
就是那些需要大规 ...
kakaku.bj.cn 发表于 2010-9-15 09:46



    哈,也不能说GPU就是脏活累活了。 大家都有分工了。
作者: wchf2    时间: 2010-9-15 11:03
[quote]现在的的情况是显卡满载时CPU往往连50%都不到

那是因为现在的游戏对双核(多核)cpu优化的不好,只使用了其中的一个核心。
作者: westlee    时间: 2010-9-15 11:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: xzmmpb    时间: 2010-9-15 13:04
请问什么是封闭循环?

是不是有开放循环?
yyzjp 发表于 2010-9-15 10:31



    就是死循环...代码逻辑判断没写好..就不停地循环判断,不走下一步...
作者: xzmmpb    时间: 2010-9-15 13:09
int k=1
if(k<2){
    k=k-1;
}
以上就是个死循环,K永远小于1,它就不停操作k-1....一辈子都在那循环...
作者: pivk    时间: 2010-9-15 13:10
cpu负责运行操作系统,负责把程序交过来的任务分配给各种硬件(显卡,声卡)去完成,如果cpu不够力,显卡就 ...
westlee 发表于 2010-9-15 11:46


大师您又来了
    http://we.pcinlife.com/viewthrea ... ;page=2#pid27619564
能解释下为什么单核的闪龙推9800GT跑出来的帧数和E8@4G推得9800GT帧数差不多的原因吗?
前者的9800GT用这个单核cpu来推应该无法满载吧?,但是跑出来的帧数居然和E8@4G来推的满载9800GT一样的?AMD用了什么黑科技吗
作者: itany    时间: 2010-9-15 14:07
提示: 该帖被管理员或版主屏蔽
作者: yyzjp    时间: 2010-9-15 14:14
就是死循环...代码逻辑判断没写好..就不停地循环判断,不走下一步...
xzmmpb 发表于 2010-9-15 13:04



    我知道,其实就是Infinite Loop。
但是我的意思是写游戏的程序员都是水平很厉害的,一般都不会犯这种低级错误。
在我们项目组里面, 无限循环是绝对不能出现的, 至少你的有一个出口吧。

所以我不是很同意你的这个观点,就是CPU占用率100%是由于程序员水平低造成地
作者: asdf007    时间: 2010-9-15 14:25
[quote]现在的的情况是显卡满载时CPU往往连50%都不到

那是因为现在的游戏对双核(多核)cpu优化的不好, 只使用了其中的一个核心。wchf2 发表于 2010-9-15 11:03


理论什么的我不清楚,实际情况就是:窗口模式运行尘埃2,同时打开任务管理器和GPU-Z来监视占用情况,CPU是FX5000,显卡是5750 1G,运行游戏时任务管理器显示四个核心占用基本一致,都不超过50%,GPU-Z显示占用率在90-100%。
    具体原因高手分析吧。
作者: hakase    时间: 2010-9-15 14:36
int k=1
if(k
xzmmpb 发表于 2010-9-15 13:09


溢出
作者: hakase    时间: 2010-9-15 14:37
理论什么的我不清楚,实际情况就是:窗口模式运行尘埃2,同时打开任务管理器和GPU-Z来监视占用情况,CP ...
asdf007 发表于 2010-9-15 14:25


还分析啥,dirt2本来就不占什么CPU
作者: fonfon    时间: 2010-9-15 15:52
cpu负责运行操作系统,负责把程序交过来的任务分配给各种硬件(显卡,声卡)去完成,如果cpu不够力,显卡就 ...
westlee 发表于 2010-9-15 11:46


三维图形运算中,CPU负责顶点生成,有了顶点信息后再把数据传给显卡处理。CPU慢了,GPU就会吃不饱了
作者: asdf007    时间: 2010-9-15 16:37
那目前有哪个主流游戏要100%占用CPU的?
作者: jinzhaohua    时间: 2010-9-15 16:42
对不起啊,我其实是因为在家里用250/880G玩CD6,才这样问的…………看zol的评测文章,说“什么处理器能发挥460的性能”,看到如果用i5 750以下的,瓶颈出在CPU而不是显卡,所以我就怕怕440是否能发挥5750的最大性能……要不多花钱我心里憋的慌,呵呵
其实我倒不是说不用CPU处理游戏数据,只是奇怪,如果独显的核心处理图形,那CPU应该轻松些啊……你看那星际2……把U都累坏了呢…………
作者: westlee    时间: 2010-9-15 17:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: westlee    时间: 2010-9-15 17:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: zhjecho    时间: 2010-9-15 17:03
我知道,其实就是Infinite Loop。
但是我的意思是写游戏的程序员都是水平很厉害的,一般都不会犯 ...
yyzjp 发表于 2010-9-15 14:14

给你贴两段简单的程序说明这个问题。
第一段就会每时每刻100%,第二段就不会。

不好的程序:
while (1)
{
       if (::PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
       {
            switch(msg.message)
            {
            case WM_MOUSEMOVE:
                  ....
             case WM_QUIT:
                   return 0;
             }
         }
}

好的程序:
while (1)
{
       if (::PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
       {
            switch(msg.message)
            {
            case WM_MOUSEMOVE:
                  ....
             case WM_QUIT:
                   return 0;
             }
         }
         else
               ::WaitMessage();

}
作者: pivk    时间: 2010-9-15 17:05
很简单啊,单核闪龙在这个游戏这个场景中发送给显卡的指令已经可以让98gt满载了,用e84去推,当然就没啥 ...
westlee 发表于 2010-9-15 17:01

那你的意思是说 所谓的cpu能不能推得动显卡,是由游戏场景决定,而不是由他们的定位和价格来决定的吧
作者: 380    时间: 2010-9-15 17:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: whhwhhwhh    时间: 2010-9-15 17:29
没有CPU,显卡有啥用
cyberlife 发表于 2010-9-15 10:17



    没而CPU ,,显卡可以YY用,
作者: yyzjp    时间: 2010-9-15 17:31
给你贴两段简单的程序说明这个问题。
第一段就会每时每刻100%,第二段就不会。

不好的程序:
while  ...
zhjecho 发表于 2010-9-15 17:03

多谢!

虽然我并不精通Windows 消息编程,但是如果是
单核CPU,即使第一种写法它也不会耗尽100% 的CPU毕竟很多线程在跑,如果它的优先级设置的特别高最多也就是它的时间片会多拿点,理论上100% 的CPU被它占用住是不可能的。
多核CPU就更不可能了。

对于你的第二种写法,有点疑问:
WaitMessage:
当一个线程的消息队列中没有消息存在时,WaitMessage函数会使该线程中断并处于等待状态,同时把控制权交给其它线程,直到被中断的那个线程的消息队列中有了新的消息为止。

你的PeekMessage都返回False了就说明消息Queue里面啥都没有,为啥你还要调用WaitMessage? 从上面文档看,WaitMessage会做许多事情,你这么频繁调用它是不是本身也在占用CPU?

我记得很多教科书上 Main函数里面并没有包含WaitMessage这个调用。
作者: lxlfive    时间: 2010-9-15 17:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 乐极生悲    时间: 2010-9-15 17:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: jista    时间: 2010-9-15 21:50
回复 16# pivk


    我自己用5000+和9800GTX 玩NBA2k10 帧数就20-35 ,换开核5000就是85-100
作者: bird11530000    时间: 2010-9-15 23:05
不调用WaitMessage就会一直在while里循环。
WaitMessage使线程挂起,所以即使一直没有新的消息,也不会一直调用WaitMessage. 线程的TCB会被OS挂到一个等待链表上,直到有新消息后OS才会唤醒它,所以该线程不会占用CPU运算器资源。当然它的数据和代码可能还在CPU的cache里。
回复 32# yyzjp
作者: bird11530000    时间: 2010-9-15 23:07
+1
回复 21# hakase
作者: zlogcyrix    时间: 2010-9-15 23:16
挖,技术贴啊技术贴,喜欢~!
作者: fatdolphin    时间: 2010-9-16 01:42
ls那位写if程序的,貌似怎么也循环不起来吧,if换成while还差不多
作者: pangauto    时间: 2010-9-16 06:41
本帖最后由 pangauto 于 2010-9-16 06:57 编辑
理论什么的我不清楚,实际情况就是:窗口模式运行尘埃2,同时打开任务管理器和GPU-Z来监视占用情况,CP ...
asdf007 发表于 2010-9-15 14:25


四个核心占用都不超过50%??你确定?
我Q9550超3.6G ,260+,1920x1080,玩dirt2游戏中监控四个核心占用率偶尔都会到70%以上,难道Q9那么菜?!
[attach]1383204[/attach]
作者: shoppingwang    时间: 2010-9-16 07:17
理论什么的我不清楚,实际情况就是:窗口模式运行尘埃2,同时打开任务管理器和GPU-Z来监视占用情况,CP ...
asdf007 发表于 2010-9-15 14:25



    [attach]1383205[/attach]


DIRT2的配置文件,最高支持到8核...
作者: sunfic    时间: 2010-9-16 08:26
int k=1
if(k
xzmmpb 发表于 2010-9-15 13:09


这个当然不会永远死下去
作者: sunfic    时间: 2010-9-16 08:28
回复 32# yyzjp


    这是阻塞与非阻塞通讯 其中又有很多的windows下消息机制和api的东西 实际上不具有什么代表性
作者: zhjecho    时间: 2010-9-16 10:16
多谢!

虽然我并不精通Windows 消息编程,但是如果是
单核CPU,即使第一种写法它也不会耗尽100% 的CP ...
yyzjp 发表于 2010-9-15 17:31



    其实跟Windows没关系。用WindowsAPI只是为了写起来简单而已(懒。。。)

第一段就是所谓“忙等”,即使没有需要处理的消息(数据),也要不断地执行PeekMessage
(你可以把这个换成任何别的语句),而没有任何意义,导致一个核的资源全被耗尽

第二段调用WaitMessage之后,这个线程就被挂起了,CPU可以去干别的事情,有消息(数据)来了才恢复执行
作者: yyzjp    时间: 2010-9-16 10:37
不调用WaitMessage就会一直在while里循环。
WaitMessage使线程挂起,所以即使一直没有新的消息,也不会一直 ...
bird11530000 发表于 2010-9-15 23:05



    很好,同意你的观点。
我的Concern是即使第一种写法,也不会把CPU核心100%占用掉!

想想我们的操作系统有多少个exe 在运行,他们都有这个默认的While{PeekMessage()} 循环在各自Main函数里面,如果按28楼zhjecho的说法,那岂不是我们的操作系统动都不能动?
作者: yyzjp    时间: 2010-9-16 10:38
其实跟Windows没关系。用WindowsAPI只是为了写起来简单而已(懒。。。)

第一段就是所谓“忙等 ...
zhjecho 发表于 2010-9-16 10:16


多谢,受教了,我的Concern在上面一楼
作者: yyzjp    时间: 2010-9-16 10:39
所以我的结论就是, 大多数情况下不是程序员的水平导致CPU占用率高,而是其他的一些我们不太清楚的东东,
他们确实需要CPU不停的运算(在玩游戏的情况下)
作者: lotuis    时间: 2010-9-16 10:53
所以我的结论就是, 大多数情况下不是程序员的水平导致CPU占用率高,而是其他的一些我们不太清楚的东东,
...
yyzjp 发表于 2010-9-16 10:39



    对游戏数据/状态考虑不全也是程序员水平的一个方面……
作者: yyzjp    时间: 2010-9-16 11:15
对游戏数据/状态考虑不全也是程序员水平的一个方面……
lotuis 发表于 2010-9-16 10:53



    OK ,打个比方,GTA, 黑手党占用率高,是因为他们的程序员很烂不如哭姐的?

恐怕不能这么简单定论。
作者: zhjecho    时间: 2010-9-16 13:58
很好,同意你的观点。
我的Concern是即使第一种写法,也不会把CPU核心100%占用掉!

想想我们 ...
yyzjp 发表于 2010-9-16 10:37



    如果每个EXE都是那种写法的话,确实可能动不了。
   不过进程也是有优先级的,每个进程总要分点时间。所以这个100%占用的意思不是说永远100%地占着CPU,而是使CPU的使用率永远100%(不是别人用着,就是我用着,不存在没人用的情况)
作者: 2ndWeapon    时间: 2010-9-16 18:00
程序员的水平的确很关键




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