+2

[Lập trình song song] Bài 1: Giới thiệu về CPU-GPU

Trước khi tìm hiểu thế nào là lập trình song song cũng như cách code thì mình phải biết 1 chút về lịch sử hình thành nên ở bài 1 mình sẽ giới thiệu sơ lược những điều bạn nên biết ở lĩnh vực này.

1 lưu ý nhỏ là nếu bạn nào muốn đọc bằng tiếng anh thì có thể ghé qua github, vì tiếng anh nên từ ngữ dùng sẽ chính xác hơn khi viết lại bằng tiếng việt

Những điều bạn nên biết về CPU-GPU

Chắc chắn ở đây phần lớn các bạn đều quen thuộc với 2 từ CPUGPU, nhưng sẽ có 1 số ít thì không, nên mình sẽ đi nhanh qua 2 khái niệm này và lịch sử của chúng.

CPU là gì?

CPU(Central Processing Units) là bộ xử lý trung tâm của máy tính hay có thể nói là "não bộ" của máy tính. Và bộ não này có thể thực hiện các phép tính liên quan đến số học, đo lường, so sánh, logic, đồng thời nhập hoặc xuất dữ liệu từ các mã lệnh trên máy tính.

Làm thế nào để đánh giá đó 1 là con CPU chất lượng? chúng ta phần lớn sẽ dựa vào 2 thông số:

  • Clock speed - Tốc độ xung nhịp(cũng là "xung nhịp" hoặc "tần số") có thể hiểu đơn giản là tốc độ hoạt động của CPU, tốc độ càng nhanh thì CPU chạy càng lẹ
  • Cores - số lượng nhân(số lượng các đơn vị xử lý độc lập trong CPU).

Sự phát triển và các trở ngại

biểu đồ mô tả sự biến đổi tần số CPU theo thời gian

image.png

biểu đồ mô tả sự biến đổi công suất CPU theo thời gian

Qua 2 biểu đồ ta có thể thấy sự phát triển nhanh chóng của CPU qua từng giai đoạn nhưng vào giữa năm 2004-2005 đã có sự thụt lùi vậy thì nguyên nhân là gì?

Hai vấn đề chính mà CPU đối mặt vào thời điểm đó là "Power wall" và "Memory wall".

  • Để giải thích 1 cách đơn giản, việc tăng công suất có nghĩa là xử lý nhanh hơn từ các CPU mạnh hơn. Tuy nhiên, CPU mạnh hơn có thể yêu cầu điện áp cao hơn để duy trì tính ổn định ở tốc độ như vậy, do đó không thể tăng tốc độ xung nhịp của bộ xử lý hoài được.

  • Vấn đề thứ hai là độ trễ(latency) khi truy cập bộ nhớ. Nếu máy tính có CPU mạnh nhưng truy cập bộ nhớ kém, nó sẽ mất thời gian lớn, đó là lý do tại sao hiệu suất của nhiều công việc được xác định bởi thời gian truy cập bộ nhớ.

Và từ đó thời kì song song bắt đầu diễn ra với ý tưởng đầu tiên là dual core và càng về sau ta có khái niệm GPU

GPU là gì?

GPU (Graphics Processing Unit) là các thành phần phần cứng chuyên biệt được thiết kế để tăng tốc xử lý đồ họa và các nhiệm vụ tính toán song song. Ban đầu, chúng được phát triển để sử dụng trong các trò chơi máy tính và ứng dụng đồ họa, nhưng hiện nay chúng cũng được sử dụng rộng rãi trong các ứng dụng khoa học và kỹ thuật. image.png

Những biểu đồ này minh họa rõ ràng sự tính toán nhanh hơn của GPU so với CPU.

Parallel processing

parallel processing tức là xử lý song song vậy thì ở đây chúng ta song song điều gì?

Giả sử một giáo viên giao cho một lớp học 10 câu hỏi để trả lời. Giải pháp đơn giản nhất là để học sinh giỏi nhất trong lớp hoàn thành tất cả 10 câu hỏi. Tuy nhiên, nếu chúng ta có thể tìm và đào tạo 9 học sinh còn lại để trở nên giỏi như học sinh giỏi nhất, chúng ta có thể tăng tốc quá trình trả lời câu hỏi lên 10 lần và đó chính là cách GPU hoạt động.

Tóm lại, việc tiết kiệm thời gian bằng cách chia nhỏ nhiệm vụ lớn thành những nhiệm vụ nhỏ hơn có thể được xử lý đồng thời là lợi ích tốt nhất của xử lý song song.

Tuy nhiên, có một số hạn chế khi chia nhỏ nhiệm vụ, ví dụ như khi giáo viên giao cho lớp N câu hỏi nhưng chúng ta không thể tìm được đủ N học sinh để chuẩn bị và hoàn thành các nhiệm vụ đó hoặc là các bài toán đều liên quan đến nhau, đáp án câu 1 là lời giải cho câu 2 chẳng hạn.

Tóm lại qua bài viết này bạn đã hiểu 1 số khái niệm về cpu-gpu và xin chúc mừng là bạn bắt đầu nhập môn vào lập trình song song trên gpu bằg cuda-C 😆😆

Tham khảo

1.http://www.edwardbosworth.com/My5155_Slides/Chapter01/ThePowerWall.htm

2.https://www.cs.princeton.edu/~dpw/courses/cos326-12/lec/15-parallel-intro.pdf

Nếu các bạn thấy bài viết hay thì xin hãy star cho mình ở github nha


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí