誰對硬體及軔體比較熟悉的,能不能用白話文簡單解釋一下,為什麼要用多個 cpu?因為看了一些文件,術語太多,恐龍本也沒翻幾頁,看不是很懂。
- 單 cpu 製作能力已到了極限,所以合多個 cpu 來突破極限?
- 一個 cpu 掛了,還有其他的 cpu 頂著。
- 讓 OS 可以真正同時運作不同的 task/process。
- 這樣比較拉風,就像娶了三妻四妾一樣……
話說我的 FreeBSD,每次編譯程式有約 50% 的 cpu idle,那我的 dual cpu 是裝辛酸的嗎?
|
沒錯,dual-core/multi-core cpu 其中一個 cpu 大部分的時間是 idle 的,感覺 cpu 的速度的進展近幾年來越來越少。
多核心 multi-core cpu 的多工可以用在
- 多個 process 搶 cpu 的情形,例如 compile gcin source,可以用 make -j2 來同時 parallel compile 兩個 *.c,,這邊 make 是 create 不同的 process,由 OS 決定 process 是在哪一個 cpu 執行。你也可以 同時 compile source,一邊玩 game or 做 cd 的 rip & encoding,這樣應該可以把 2個cpu 填滿。
- 一個 process 裡面有 multi-thread 的情形。意思是 process 裡面也可以多工,heap memory 是 thread 共享的,不同的 thread 有不同的stack,可以在不同的cpu 執行。像 firefox/IE 就有用到 multithread,所以那些閃來閃去的圖 & download 可以給不同的 cpu 執行。
多核心 cpu,不同的 core 有各自的 cache,DRAM memory 是共享的,所以雙核 dual-core cpu 的 performane 加速通常不會到2X。
edited: 5
|
我用 make -j(不加任何參數,依 manpage 是說全力加速,有幾個 job 就用幾個,不限 job 數),結果系統好像就 hang 住一樣,看了一下 top,兩個 cpu 也才各約 80% 的 loading,並沒有滿檔,我受騙了嗎?
ps. 我是在 VBox 裡頭的 Linux 編譯的,可能和虛擬環境也有關係?
edited: 1
|
可能 Virtual machine 不支援多 CPU ?
|
eliu | 可能 Virtual machine 不支援多 CPU ?
|
哇咧,好像是?
Initializing CPU#0
SLUB: Genslabs=12, HWalign=64, Order=0-1, MinObjects=4, CPUs=1, Nodes=1
CPU0: Intel Pentium(R) Dual-Core CPU E5200 @ 2.50GHz stepping 06
Brought up 1 CPUs
dmesg 裡頭沒有看到 CPU#1 的資訊。還是我誤解了 dmesg 的意思了?
|
cat /proc/cpuinfo 最準 :)
LGJ |
哇咧,好像是?
Initializing CPU#0
SLUB: Genslabs=12, HWalign=64, Order=0-1, MinObjects=4, CPUs=1, Nodes=1
CPU0: Intel Pentium(R) Dual-Core CPU E5200 @ 2.50GHz stepping 06
Brought up 1 CPUs
|
|
edt1023:~$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Pentium(R) Dual-Core CPU E5200 @ 2.50GHz
stepping : 6
cpu MHz : 2400.868
cache size : 2048 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 constant_tsc up pni monitor
bogomips : 4835.66
clflush size : 64
是很準,只是看不太懂,看起來也是只有 CPU 0 的樣子?
|
雖然顯示 Dual-Core
但是只有看到 processor : 0
若有兩顆以上
processor : 1
至少要出現 1
LGJ |
edt1023:~$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Pentium(R) Dual-Core CPU E5200 @ 2.50GHz
是很準,只是看不太懂,看起來也是只有 CPU 0 的樣子?
...
|
|