台灣最大程式設計社群網站
線上人數
959
 
會員總數:246502
討論主題:190009
歡迎您免費加入會員
討論區列表 >> VB.NET >> 如何提高CPU使用率
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何提高CPU使用率
價值 : 100 QP  點閱數:247 回應數:17
樓主

P陳
初級顧問
16554 199
9637 2361
發送站內信

各位好:
用VB.NET 寫了一個程式,資料讀進來了,沒有對SSD硬碟作IO。
但程序的CPU使用率只有15%左右,系統的總使用許率不到 30%。

覺得跑起來有點慢,CPU 還有很多能量未發揮,大眼瞪小眼的
請問一下有無方法可以如何提高這個程式的CPU使用率




搜尋相關Tags的文章: [ 提高 CPU 使用率 ] ,
本篇文章發表於2021-10-10 23:17
1樓
最有價值解答

誰是誰
檢舉此回應
如果允許,就是靠平行運算搾 CPU
本篇文章回覆於2021-10-13 19:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

asakous
檢舉此回應
應該說明一下,資料讀進來你的程式要作什麼?才容易理解。不然標準的來說會用 multi thread 來處理。不然也可進 message queue 。用 worker 處理。
本篇文章回覆於2021-10-14 12:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

P陳
檢舉此回應
謝謝 誰是誰、asakous 二位的回應
Sorry 出差了幾天,剛才才回來

1.是從資料庫取出資料
2.放入 DataTable 中
3.在 Datatable 中一筆筆依序運算
4.因為下一筆的資料要等前一筆算完再算,所以不適合用平行運算
5.所有資料運算完後再回寫入資料庫

6.因為看到CPU才10來% 而已,磁碟只一點點在動,想問看看有沒有指令可以提高 CPU 的利用率,不然就只能乾秏而已
本篇文章回覆於2021-10-15 23:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

asakous
檢舉此回應
你的問題有口能不會程式端問題。更有可能是db端問題。
有兩種加快的方式。
1:用 db procedure 處理。可省去網路來來回回跟transaction commit 時間。
2:不要1筆筆 commit。要嘛1次寫完 commit。要嘛 數仟或數百筆 commit 1 次。
本篇文章回覆於2021-10-17 15:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

P陳
檢舉此回應
asakous 您好感謝回應:

目前是一次全部讀入資料表到記憶體中
----------------------------
一連串的計算 要處理連續計算的值 ,所以不能用平行運算
等全部算完了...... (這堛慢PU 約只用了18%左右) 要算很久
------------------------
再一次寫出
本篇文章回覆於2021-10-20 16:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

P陳
檢舉此回應
如果能該該程序的CPU使用率提高到 60%,就可以較快算完了。
本篇文章回覆於2021-10-20 16:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

asakous
檢舉此回應
set 程式 priority ? 能貼一下您的算法流程跟簡單資料嗎?也許有其它算的方式。
本篇文章回覆於2021-10-20 16:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

P陳
檢舉此回應
程式大約如下

假設有一萬筆資料
要算20筆的 移動平圴 算標準差 算MACD 算 RSi 等等......
dt1
for Recii=0 to totrec-20
取出20資料放入DT2 ,從 dt1 的 recii 到 recii+19 共20筆
ma20=dt2.compute("avg(value1)","")
std20=dt2.compute("sted(value1)","")
call macd(20,dt2)
call rsi(20,dt2)
...
...
next


本篇文章回覆於2021-10-21 08:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

asakous
檢舉此回應
是 每1次 loop 跑 1-20 下次 21-40 。還是 1-20 ,下次2-21
本篇文章回覆於2021-10-21 09:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

P陳
檢舉此回應

1~20
2~21
3~22
4~23

想到了
1~20 的
ma
std
macd
rsi
1~20 可以分給平行作業 都作完了再 接
2~21 平行作業 都作完了再 再接
3~22 平行作業 都作完了再 再接
....
....

但至於效率如何? 要試試看了。這只是興趣
目前有正事要辦,能用在這上頭的時間較少了

還有不一定是 20筆算一次,有可能是 5筆 或60筆 不一定
本篇文章回覆於2021-10-21 09:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

P陳
檢舉此回應
這是計算另外有整理的部份 由 50萬筆左右,整理成1萬筆 CPU 也是20%以下,磁碟是 0% 網路也是0%
看起來要想辦法切割成可以 平行處理的模式了

經您的提點,目前有想到了程式分割的邏輯了,還是再試一下
本篇文章回覆於2021-10-21 09:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

P陳
檢舉此回應
另您提到的 set 程式 priority 有較明確的指令或參數 嗎?
本篇文章回覆於2021-10-21 09:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

P陳
檢舉此回應
看起來平行作業是唯一解了,雖然有 4個CPU 但還是只有一個在跑,其餘的在空等。

挖礦 提高 CPU 使用效率 方法
本篇文章回覆於2021-10-21 09:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

P陳
檢舉此回應
奇怪上面連結進不去

進入後再選 挖礦CPU使用率 才看得到
本篇文章回覆於2021-10-21 09:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

asakous
檢舉此回應
1~20 的計算結果會影響 2~21 的計算結果?

set 程式 priority -->工作管理員->詊細資料->設優先順序
本篇文章回覆於2021-10-21 12:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

回覆
如要回應,請先登入.