Project1

标题: RGSS对CPU的利用 [打印本页]

作者: R-零    时间: 2012-8-9 11:41
标题: RGSS对CPU的利用
本帖最后由 R-零 于 2012-8-9 12:05 编辑

下面是本人最近开始的粒子系统的截图,总体效率还可以,但是当本人把精灵数目提高到3000甚至7000时,画面会变卡但是用任务管理器查看时game.exe这个进程的cpu使用率怎么也不超过25%,也就是说它只利用了本人25%的cpu资源,正好相当于本人4核中的一个核
大概查了下,http://www.baidu.com/s?bs=%E5%9B ... 88%A9%E7%94%A825%25
第一个类似问题:为什么解压缩时四核CPU往往只能使用25%左右而已,为什么CPU使用率不是100%?
                        首先,CPU使用率应该是可以在设置菜单里进行设置的,另外,因为受到硬盘IO的速度限制,即使设置了全速解压,解压缩速度也不会有很明显的提高,只有在对文件进行压缩的时候会有明显改善。
如果是硬盘相关显然是不可能的,因为预先都读入内存了

第二个 http://zhidao.baidu.com/question/162430870.html


也就是说RGSS不支持多处理器么,可恶了呢

Ruby中使用的线程是用户级线程,由Ruby解释器进行切换管理。其效率要低于由OS管理线程的效率,且不能使用多个CPU,这确实是它的缺点。但其优点也很明显,即可移植性很高。


作者: hcm    时间: 2012-8-9 12:04
这类事情我倒不太清楚,
不过我的笔记本也是只能用到25%左右,
而且貌似不太适合做游戏的,测试最近一个游戏时不把其他应用程序关掉就可能因温度过高自动关机。
作者: yangff    时间: 2012-8-9 12:07
1)= =你需要ACE
2)粒子用GPU跑
3)渲染是单线程的,所有引擎都这样。
作者: 苏小脉    时间: 2012-8-9 12:48
本帖最后由 苏小脉 于 2012-8-9 12:49 编辑
Ruby中使用的线程是用户级线程,由Ruby解释器进行切换管理。其效率要低于由OS管理线程的效率,且不能使用多个CPU,这确实是它的缺点。但其优点也很明显,即可移植性很高。

「用戶級線程」用詞不妥。「用戶級」以及與之相對的「內核級」都是操作系統領域的術語,在這個論域中,「用戶級線程」指的是用戶程序可以操縱的線程,而與之對應的是只有內核才能操縱並且對用戶程序不可見的「內核線程」,也就是操作系統內核本身需要的線程。編程語言提供的線程幾乎都是用戶線程,但大致可分為兩類:本地線程和綠色(輕量級)線程。Ruby 1.8 以及之前的版本提供的線程是綠色線程,1.9 以後採用了本地線程。

另外,「不能使用多个CPU」是因為 Ruby 1.8 只有一個調度器線程,如果 Ruby 像 Erlang 那样支持多线程调度,也就是有多个不同的线程专门负责线程调度,那自然也能在使用绿色线程的同时充分利用多核资源。Erlang + SMP 多線程調度的組合下進行併發計算不輸於本地線程。
作者: 柳之一    时间: 2012-8-10 10:36
如果你是xp版本的話,那就請考慮xp出現的年代.4盒....

另外提高xp畫面幀數的是cpu赫茲數,絕對不是什麽多核顯卡
作者: 苏小脉    时间: 2012-8-25 00:16
本帖最后由 苏小脉 于 2012-8-25 00:42 编辑

@harinlen
用户级线程这句话也没有什么错误吧?Ruby本身的线程就是属于用户级的线程,绿色线程寄托于一个用户级线程,本身不算是一个用户级线程的一部分么

說到底還是歧義的問題,我相信說這句話的人也知道這些概念,只是說出來的時候不夠嚴謹。原話是「Ruby中使用的线程是用户级线程,由Ruby解释器进行切换管理」,兩個子句連起來容易產生歧義。
1、無論任何編程語言,只要是用戶程序,其操縱的線程幾乎都是用戶線程(除非底層 OS 提供了操縱內核線程的系統調用),在討論綠色線程 vs 本地線程在 CPU 效用上的區別時提這個沒什麼意義,反而容易讓人聯想到「其他語言中使用的線程是内核线程」這個命題。
2、「由Ruby解释器进行切换管理」是綠色線程的特性,和前一個子句「Ruby中使用的线程是用户级线程」並無因果。

@R-零
无论是xp、VA都只能利用单核,

只要有底層接口,一切都有可能。所有 RM 版本都可以通過 Win32API (VA 可以通過 dl 庫)操縱本地線程,所以都可以利用多核,只不過沒有用到 Ruby 線程。要用 Ruby 線程的話,也可以通過 Ruby 的 API (rb_thread_blocking_region(),甚至直接 native_mutex_unlock(vm->global_vm_lock) 之類的)操縱全局解釋器鎖,只要在一個安全的區域內解鎖(當然,影響 Ruby 虛擬機內部結構的操作很難保證安全),在這個區域內就可以利用多核,達成真正的併發。
作者: 游弋    时间: 2012-9-8 16:16
我有一次试过90多




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1