- vừa được xem lúc

012: Sự thật về Hyper-threading

0 0 27

Người đăng: Dat Bui

Theo Viblo Asia

Bài viết nằm trong series Multithread từ hardware tới software với Java.

Chúng ta đã rất quen thuộc với Intel Core i5 4 cores 4 threads, i5 4 cores 8 threads có công nghệ Hyper-threading. Vậy hyper-threading là gì, 4 cores 8 threads là sao?

Bài viết này chỉ có duy nhất mục đích đó là giải thích về hyper-threading.

Có 2 loại thread chúng ta cần quan tâm và phân biệt:

  • CPU thread: là thread trong Interl Core i5 4 cores 4 threads. Nó mang ý nghĩa luồng thực thi của CPU. Mỗi một processor (core) chỉ có khả năng xử lý duy nhất 1 luồng (thread).
  • OS thread: là thread trong lập trình multi-thread. Là thread trong một process. Với các lập trình viên, khi nói đến thread, ta hiểu nó là OS thread.

Ở bài trước, ta đã biết 1 processor (core) của CPU chỉ thực thi duy nhất 1 thread tại một thời điểm. Và CPU sẽ bao gồm nhiều processor bên trong, ví dụ Intel Core i5 4 cores 4 threads, 4 threads này tương ứng mỗi processor xử lý duy nhất 1 CPU thread. Các OS thread sẽ được đẩy vào CPU thread này để được thực thi.

Tuy nhiên, bạn sẽ bắt gặp một vài CPU Intel Core i5 4 cores 8 threads. Mỗi nhân vật lý (processor) thực thi như 2 nhân ảo, có thể xử lý được 2 luồng một lúc, sức mạnh ngang ngửa 8 cores vật lý mà lại rẻ hơn. Cái này là seller quảng cáo như vậy ?.

Theo google, Hyper-threading là công nghệ siêu phân luồng do Intel phát minh, cho phép chạy đồng thời 2 luồng cùng lúc trên một processor.

Hàng ảo mà ngang ngửa hàng thật. Sự thật phía sau là gì?

Chúng ta đã biết context switch ở bài trước, xảy ra khi 2 thread đổi chỗ cho nhau để được thực thi trên processor. Trong quá trình đổi chỗ đó, processor được giải phóng và không làm gì (1).

Tiếp theo là vấn đề cache coherency. OS sẽ copy value/instruction từ RAM lên processor register để processor thực thi. Tuy nhiên, có thể xảy ra hiện tượng cache miss do value/instruction đó không còn tồn tại. Nguyên nhân dung lượng của register rất nhỏ, nếu value/instruction đó chưa được thực thi ngay nó sẽ bị xóa ra khỏi bộ nhớ. Do đó, đến thời điểm thực thi thật sự, register phải copy lại value/instruction từ RAM. Trong quá trình đó, processor được giải phóng và không làm gì (2).

Hyper-threading ra đời nhằm tận dụng khoảng thời gian chết đó (1) và (2), nhằm tối đa hóa công suất và thời gian làm việc của processor.

Ngoài ra với hyper-threading, mỗi processor có 2 registers và có thể thực hiện các instruction từ 2 thread, tuy nhiên tại 1 thời điểm chỉ thực thi duy nhất 1 thread. Do đó nó được gọi là 2 cores 4 threads/4 cores 8 threads (số lượng threads gấp đôi số cores). Và khi (1) hoặc (2) xảy ra, nó sẽ switch sang register còn lại và xử lý với tốc độ cực nhanh, không tốn thời gian như context switch.

Do vậy, CPU 4 cores 8 threads vẫn không thể so sánh với CPU 8 cores 8 threads. Tuy nhiên tốc độ xử lý của nó tốt hơn CPU 4 cores 4 threads, phụ thuộc vào tần suất các vấn đề cache miss hay context switch xảy ra, rơi vào khoảng 30% (được các kĩ sư mạng tính toán).

Một nửa sự thật, vẫn là sự thật. CPU có hyper-threading sẽ nhanh hơn, đồng thời tốn điện hơn, tuy nhiên không thể bằng hàng thật.

Reference

© Dat Bui

Bình luận

Bài viết tương tự

- vừa được xem lúc

Sử dụng goquery trong golang để crawler thông tin các website Việt Nam bị deface trên mirror-h.org

. Trong bài viết này, mình sẽ cùng mọi người khám phá một package thu thập dữ liệu có tên là goquery của golang. Mục tiêu chính của chương trình crawler này sẽ là lấy thông tin các website Việt Nam bị deface (là tấn công, phá hoại website, làm thay đổi giao diện hiển thị của một trang web, khi người

0 0 217

- vừa được xem lúc

Go Concurrency qua các ví dụ (Phần 1): Dining Philosophers

Bài toán Dining Philosophers (Bữa tối của các triết gia) là một trong những bài toán kinh điển thường dùng để mô tả các vấn đề trong việc xử lý concurrent, những vấn đề thường gặp trong quá trình cấp

0 0 246

- vừa được xem lúc

Concurrent and Parallel 001: Parallel computing hardware P1

Bài viết nằm trong series Concurrent vs Parallel in Java. 1) Sequential vs Parallel computing.

0 0 49

- vừa được xem lúc

Concurrent and Parallel 006: Vòng đời của một thread diễn ra như thế nào trong Java?

Bài viết nằm trong series Multithread từ hardware tới software với Java. Thread lifecycle.

0 0 55

- vừa được xem lúc

005: OS đối xử với thread thế nào?

Bài viết nằm trong series Multithread từ hardware tới software với Java. 1) Schedular.

0 0 32

- vừa được xem lúc

003: Thread và Process

Bài viết nằm trong series Multithread từ hardware tới software với Java. .

0 0 37