Các API tính toán GPU ngày nay
(threedots.ovh)Nvidia
Người khai phá thị trường, bộ công cụ đã phát triển rất hoàn thiện. Vẫn đang phát triển nhanh chóng, và đặc biệt các API cấp cao (higher-level) thì càng như vậy. Mọi GPU mà Nvidia bán ra đều hỗ trợ CUDA.
HPC SDK trước đây được gọi là PGI, chỉ dùng được trên Linux, đã bổ sung hỗ trợ OpenACC, song song hóa chuẩn C++ (stdpar), và OpenMP (beta).
Một trong những vấn đề về cấp phép của HPC SDK của Nvidia là điều khoản sau:
You shall strictly prohibit the further distribution of the Run-Time Files by users of an End-User Application
Vì người dùng không thể phân phối lại ứng dụng khi vẫn kèm theo các tệp runtime mà ứng dụng đóng gói cần đến, nên có thể sẽ không thể phân phối ứng dụng ngay từ đầu. Vấn đề này không áp dụng cho CUDA SDK mà đa số mọi người đang sử dụng.
AMD
ROCm là nền tảng lập trình GPGPU chủ lực trên phần cứng AMD. Ngoài HIP do AMD sở hữu, các lựa chọn được hỗ trợ chính thức là OpenMP và OpenACC.
Ở đây có một vài nhược điểm rõ ràng:
-
Chỉ dành cho Linux, vì vậy không thể trở thành lựa chọn ở một phần đáng kể của thị trường.
-
Các tệp nhị phân được tạo bởi toolchain ROCm không nhắm tới IR mà phụ thuộc vào phần cứng. Khi có thế hệ mới ra mắt thì phải biên dịch lại tệp nhị phân.
-
Trong một khoảng thời gian khá dài sau khi phát hành, việc hỗ trợ phần cứng mới trên thực tế là không có.
Những nhược điểm này khiến tính hữu dụng trên desktop gần như bằng không và khiến OpenCL trở thành API do nhà cung cấp cung cấp duy nhất cho phần cứng GPU AMD.
Intel
oneAPI được hỗ trợ trên mọi GPU Intel phát hành gần đây, nhưng hiệu năng cao thì vẫn chưa có. Ngoài Level Zero của Intel, các API được hỗ trợ chính thức là OpenMP và SYLC.
Level Zero của oneAPI dùng SPIR-V làm IR, cho phép hỗ trợ liền mạch cho phần cứng sẽ ra mắt trong tương lai. Windows cũng được hỗ trợ.
Khronos
Cung cấp các tiêu chuẩn ngành có thể dùng trên nhiều nhà cung cấp.
Việc làm mới được biết đến với tên OpenCL 3.0 vẫn chưa tạo ra nhiều tác động. Sự kết hợp giữa SYCL và tính toán Vulkan có thể là con đường tốt hơn, cho phép dùng một tệp nhị phân duy nhất trên nhiều nhà cung cấp cùng với trải nghiệm phát triển tốt.
Hỗ trợ OpenCL thực tế:
Ngày nay Nvidia cung cấp OpenCL 1.2 có hỗ trợ extensions.
AMD cung cấp một triển khai OpenCL 1.2 dùng được, cùng với một triển khai OpenCL 2.x cực kỳ nhiều lỗi (cũng không có cách debug cho tử tế).
Intel cung cấp triển khai OpenCL 3.0 cho GPU Intel.
OpenCL 1.2 cũng được hỗ trợ trên macOS, bao gồm cả Apple Silicon, nhưng tài liệu đã bị deprecate.
Microsoft
C++ AMP có vẻ như đã chết. Nó độc lập với nhà cung cấp và từng được Visual C++ hỗ trợ, nhưng chưa từng được cập nhật sau D3D11. Các phiên bản ROCm cũ cũng từng được hỗ trợ.
Apple
Tính toán Metal chỉ dành cho macOS/iOS/… mà thôi. Trong lĩnh vực GPGPU, sức hấp dẫn của nó khá thấp, đặc biệt là về hiệu năng tính toán GPU.
1 bình luận
GPGPU khác biệt rất lớn tùy theo từng vendor và hệ điều hành, nên mong là một ngày nào đó sẽ được thống nhất.
Mà nhắc mới nhớ, bài này lại không đề cập đến DirectML của Windows. Nó hỗ trợ phần cứng khá rộng, gần đây còn được làm cho chạy cả trên WSL nữa nên cũng khiến tôi thấy hứng thú.