1% trên cpu mạnh vs 1% trên cpu yếu

A/e cho mình hỏi ví dụ có 1 con CPU 1 core (5.0 GHz) và 1 con CPU 1 core (2.0 GHz). Một chương trình chạy trên CPU 5.0GHz tốn 1% CPU, thì chạy trên CPU 2.0 GHz sẽ tốn nhiều % hơn không ? Có case nào nó bằng nhau không ?

Công thức tính %CPU được sử dụng là

CPU utilization = 1 - p^n

p là tỷ lệ thời gian mà 1 process phải đợi cho I/O operation xong xuôi trước khi hoạt động tiếp.
n là số process chạy trên machine.

Clock rate gần như không ảnh hưởng mấy tới cả p và n, nên trong TH tất cả các điều kiện khác đều giống nhau giữa 2 máy, chương trình của cậu vẫn sẽ consume 1% CPU.
Dù thế, clock rate có ảnh hưởng tới số lượng instruction được thực hiện trong 1 đơn vị thời gian, nên khả năng cao chương trình ở máy có clock rate cao hơn sẽ chạy nhanh hơn.
Nhanh hơn bao nhiêu lại phụ thuộc vào bản chất của chương trình. Chẳng hạn, nếu chương trình của cậu không có bất cứ I/O operation nào, chương trình chạy trên máy 5GHz sẽ nhanh hơn 2.5 lần chương trình chạy trên máy 2GHz. Đó là TH tốt nhất. Ngược lại, nếu chương trình của cậu toàn I/O operation, thời gian thực thi đa số dành cho việc chờ I/O, nên cậu sẽ không thấy khác biệt đáng kể về thời gian khi chạy 2 chương trình trên 2 máy.

Hope it helps!

2 Likes

Nếu máy có clock rate cao hơn làm cho chương trình chạy nhanh hơn thì theo công thức CPU Utilization = 1 - (IdleTime / TotalTime) IdleTime phải tăng => CPU Utilization phải giảm chứ nhỉ ?

Có thể bạn chưa hiểu rõ TH 2 mà @library mô tả.

Lấy hình dung bạn dùng 2 máy khác CPU này lướt web. Nhưng xui là cá mập cắn cáp nên tốc độ internet còn 10kbps. 2 máy này đều load bò như nhau, CPU mạnh yếu không còn quan trọng nữa.

Tải nội dung (I/O) -> Xử lý nội dung (CPU) -> Hiển thị nội dung
  ^                                                      |
  |--------------loop-------------------------------------

Nói cho dễ hiểu là siêu xe Lambo với con KIA morning đi qua 10 cái ngã tư đèn đỏ thì đều tới đích gần như nhau, mặc dù giữa 2 đèn đỏ Lambo có thể chạy nhanh hơn.

2 Likes

Giả sử chương trình không có I/O. Ví dụ tính Fibonacci(100) bằng đệ quy chẳng hạn.

1 Like

Có thể chia thành 3 loại: CPU-bound, memory(tức là RAM)-bound, I/O-bound. Ngay cả CPU-bound (working set là L3 cache) cũng tùy thuộc vào vi kiến trúc, tập lệnh sử dụng và framework (có thuần assembly hay là JIT, hay là thông dịch :smiley: )

2 Likes

Nếu tất cả các điều kiện khác là như nhau, và bài kiểm tra rơi vào CPU-bound thì tất nhiên con 5GHz nhanh hơn con 2GHz, nó quy về xử lý được bao nhiêu triệu dòng lệnh mỗi giây.
1 chương trình có thể là 1000 dòng lệnh. Mỗi 1 dòng lệnh được chia làm 5 giai đoạn:

  • Fetch instruction (1 clock)
  • Decode instruction (1-2 clock)
  • Execute instruction (1-x clock)
  • Memory access (Optional) (1-x clock)
  • Writeback (Optional) (1-x clock)

Giả sử tất cả các giai đoạn đều tốn 1 clock đi.

  • thằng 5GHz mất 5 clock, mỗi clock của nó 0.2 ns, tổng cộng nó mất 1 ns cho 1 instruction.
  • thằng 2GHz mất 5 clock, mỗi clock của nó 0.5 ns, tổng cộng nó mất 2.5 ns cho 1 instruction.

Đơn giản hóa là vậy. Nhưng CPU loại cũ, loại mới nó có những cách thiết kế hoặc optimize khác nhau. Ví dụ pipeline optimize, branch prediction.

2 Likes

Tớ không nghĩ công thức của cậu đúng đâu. Công thức cậu đưa chỉ ra tỷ lệ thời gian CPU không idle thôi, không phải CPU utilization.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?