Trong phần tài liệu tham khảo của tháng 10/2008, tôi có đề cập đến bài viết của Chas Boyd, một trong những tác giả chính của DirectX tại Microsoft, về tính toán song song trên dữ liệu (“Data-Parallel Computing”), được đăng trên tạp chí ACM Queue số tháng Ba/Tư năm 2008. Hôm nay tôi mới có thời gian để ghi lại đây một cách tóm tắt những nội dung quan trọng của bài báo đó. Phần chữ in nghiêng là phần bình luận do tôi thêm vào.
Mở đầu bài báo, ở trang 31, là một câu nêu lên tầm quan trọng trong định hướng dữ liệu của lập trình đa lõi trên GPU.
“Data parallelism is a key concept in leveraging the power of today’s manycore GPUs.”
Tiếp theo đó, tác giả đã dẫn dắt người đọc đi qua 2 vấn đề chính trong việc cải tiến hiệu năng của chương trình máy tính là
- Người dùng luôn quan tâm đến chuyện chương trình chạy nhanh hay chậm, và
- Để cải tiến tốc độ chương trình, trước đây chỉ cần nâng cấp phần cứng, vì cứ sau hơn 1 năm rưỡi là tốc độ bộ xử lý lại tăng lên gấp đôi. Tuy nhiên giờ đây cách này đã không còn phù hợp, do bộ xử lý mới trong máy không chạy nhanh hơn trước, mà chỉ gia tăng về số lượng.
Từ đó Chas nêu lên ý tưởng về cách tiếp cận song song dựa trên dữ liệu (“data-parallel paradigm”) với 2 hy vọng
- Về phần mềm: Nó sẽ giúp việc lập trình song song trở nên dễ dàng hơn, và
- Về phần cứng: Nó sẽ giúp cho việc cài đặt các chức năng hỗ trợ song song bằng phần cứng nơi các nhà sản xuất bộ xử lý đơn giản hơn nhiều.
Với mục tiêu cung cấp cho người đọc những kiến thức cơ bản dễ hiểu về tính toán song song dựa trên dữ liệu, bài báo được tổ chức thành 7 phần nhỏ như sau:
- Phần 1: A Bit of Background
- Phần 2: Parallel Programming
- Phần 3: Data-Parallel Programming
- Phần 4: GPUs as Data-Parallel Machines
- Phần 5: Making Code Data-Parallel
- Phần 6: GPU Performance Hints
- Phần 7: Future Hardware Evolution: CPU/GPU Convergence
Trong cách tổ chức bài viết như trên, phần 1 giảng giải sự cần thiết của tính mở rộng quy mô thực thi, hay có thể tạm gọi là tính khuếch trương (scalability) của một phần mềm hiện đại trong vòng từ 5 đến 10 năm tới. Sự cần thiết này dẫn đến khái niệm lập trình song song, được xem xét trong phần 2. Bằng cách nêu lên 3 khó khăn chủ đạo trong mô hình lập trình song song truyền thống, vốn dựa trên cơ chế song song của các tác vụ cần được thực thi, tác giả chỉ ra tính cần thiết cho việc chuyển sang một mô hình lập trình song song khác, là lập trình song song dựa trên dữ liệu. Khái niệm này được giới thiệu một cách khái quát trong phần 3 cùng với ý tưởng về tính phù hợp của các GPU cho kiểu lập trình này. Phần 4 tiếp tục mở rộng ý tưởng được nêu lên ở phần 3, bằng cách khảo sát chi tiết hơn cách thức sử dụng GPU cho nhiệm vụ mới mẻ này, thông qua các đặc trưng phần cứng song song tiện lợi có sẵn trên đó. Phần 5 của bài viết chuyển sang giới thiệu những điểm lập trình viên chúng ta cần lưu ý để chuyển mã nguồn từ dạng tuần tự sang dạng song song dựa trên dữ liệu. Tác giả đã đề nghị một cách tiếp cận gồm 5 bước cho việc chuyển đổi này. Ngoài ra, do lập trình song song trên GPU có những đặc thù riêng của nó, phần 6 nêu lên một số lưu ý giúp phần mềm được viết ra đạt hiệu năng như mong muốn. Cuối cùng, bài viết được kết thúc ở phần 7 với một chủ đề hết sức lý thú, đó là sự kết hợp của CPU/GPU làm một trong tương lai, thuận lợi và khó khăn.
Theo tôi cách tổ chức và phát triển bài viết theo như tác giả đã làm là một cách giới thiệu hết sức tự nhiên cho chủ đề lập trình song song dựa trên dữ liệu.
2 Trackback
[...] Xử lý song song (CPU + GPU) Giải pháp trên các kiến trúc đa lõi (CPU + GPU) Skip to content Tác giả « Tính toán song song dựa trên dữ liệu [...]
[...] – “Data-Parallel Computing”: Bài này do chuyên gia lập trình song song của Microsoft là Chas. Boyd viết. Boyd đã cung cấp cho người đọc bức tranh tổng thể về các giải pháp song song đã và đang hiện diện trong tầm tay của lập trình viên, bao gồm ý tưởng tiếp cận, công cụ hỗ trợ, khó khăn gặp phải, v.v… Mặc dù có nhiều điểm chưa hoàn toàn đồng ý với Boyd, tôi sẽ có một bài tóm tắt về những gì ông đã bàn đến. [...]