Quan điểm lịch sử
Thật sự không thể nói những mô hình mới sẽ như thế nào trong tương lai, ví dụ như một viễn cảnh lịch sử tốt đẹp mà tôi khuyên bạn nên đọc Rise and Fall of HPF của Ken Kennedy . Kennedy đưa ra một tài khoản gồm hai mẫu mới nổi, MPI so với trình biên dịch thông minh và chi tiết làm thế nào MPI có số lượng người chấp nhận sớm và linh hoạt để thống trị. HPF cuối cùng đã khắc phục vấn đề của mình nhưng đã quá muộn.
Theo nhiều cách, một số mô hình, chẳng hạn như PGAS và OpenMP, đang theo xu hướng HPF tương tự. Các mã ban đầu không đủ linh hoạt để sử dụng tốt và để lại nhiều hiệu suất trên bàn. Nhưng lời hứa không phải viết mọi iota của thuật toán song song là một mục tiêu hấp dẫn. Vì vậy, việc theo đuổi các mô hình mới luôn luôn được theo đuổi.
Rõ ràng xu hướng trong phần cứng
Bây giờ thành công của Bộ KH & ĐT thường được trích dẫn là gắn chặt với cách thức mô hình hóa phần cứng mà nó chạy. Khoảng mỗi nút có một số quy trình và việc truyền thông điệp đến điểm cục bộ hoặc thông qua các hoạt động tập thể phối hợp được thực hiện dễ dàng trong không gian cụm. Vì điều này, tôi không tin tưởng bất cứ ai đưa ra một mô hình không theo sát xu hướng phần cứng mới, tôi thực sự bị thuyết phục bởi ý kiến này bởi công trình từ Vivak Sarakar .
Để phù hợp với điều đó, đây là ba xu hướng rõ ràng đang đi đầu trong các kiến trúc mới. Và hãy để tôi nói rõ, hiện có mười hai kiến trúc khác nhau đang được bán trên thị trường trong HPC. Điều này tăng từ cách đây chưa đầy 5 năm chỉ có tính năng x86, vì vậy những ngày tới sẽ có nhiều cơ hội sử dụng phần cứng theo những cách khác nhau và thú vị
- Chips mục đích đặc biệt: Hãy nghĩ rằng các đơn vị vectơ lớn như máy gia tốc (được xem bởi Bill Dally của Nvidia)
- Chip công suất thấp: Các cụm dựa trên ARM (để chứa ngân sách năng lượng)
- Ốp lát chip: nghĩ rằng ốp lát chip với các thông số kỹ thuật khác nhau (công việc của Avant Argwal )
Mô hình hiện tại
Mô hình hiện tại thực sự là 3 cấp độ sâu. Mặc dù có nhiều mã sử dụng tốt hai trong số các cấp độ này, nhưng không có nhiều mã đã xuất hiện bằng cả ba cấp độ. Tôi tin rằng trước tiên để có được exascale, người ta cần đầu tư vào việc xác định xem mã của bạn có thể chạy ở cả ba cấp độ hay không. Đây có lẽ là con đường an toàn nhất để lặp lại tốt với các xu hướng hiện tại.
Hãy để tôi lặp lại trên các mô hình và cách chúng sẽ cần thay đổi dựa trên các quan điểm phần cứng mới được dự đoán.
Phân phối
Những người chơi ở cấp độ phân phối phần lớn rơi vào ngôn ngữ MPI và PGAS. MPI là một người chiến thắng rõ ràng ngay bây giờ, nhưng các ngôn ngữ PGAS như UPC và Nhà nguyện đang tiến vào không gian. Một dấu hiệu tốt là Thử thách Điểm chuẩn HPC. Các ngôn ngữ PGAS đang đưa ra các triển khai rất chuẩn của các điểm chuẩn.
Điểm thú vị nhất ở đây là trong khi mô hình này hiện chỉ hoạt động ở cấp độ nút, nó sẽ là một mô hình quan trọng bên trong một nút cho các kiến trúc Tiled. Một dấu hiệu là chip Intel SCC, về cơ bản hoạt động giống như một hệ thống phân tán. Nhóm SCC đã tạo ra triển khai MPI của riêng họ và nhiều nhóm đã thành công trong việc chuyển các thư viện cộng đồng sang kiến trúc này.
Nhưng thành thật mà nói PGAS thực sự có một câu chuyện hay để bước vào không gian này. Bạn có thực sự muốn lập trình MPI internode và sau đó phải thực hiện cùng một intranode lừa không? Một vấn đề lớn với các kiến trúc lát gạch này là chúng sẽ có tốc độ xung nhịp khác nhau trên chip và sự khác biệt lớn về băng thông cho bộ nhớ, do đó, các mã hiệu suất phải tính đến điều này.
Bộ nhớ chia sẻ trên nút
Ở đây chúng ta thấy MPI thường "đủ tốt", nhưng PThread (và các thư viện xuất phát từ các PThread như Intel Parallel Building Blocks) và OpenMP vẫn được sử dụng thường xuyên. Quan điểm chung là sẽ có lúc có đủ các luồng bộ nhớ được chia sẻ mà mô hình ổ cắm của MPI sẽ bị hỏng cho RPC hoặc bạn cần một quy trình trọng lượng nhẹ hơn chạy trên lõi. Bạn đã có thể thấy các dấu hiệu của các hệ thống IBM Bluegene có vấn đề với MPI bộ nhớ dùng chung.
Như Matt nhận xét, hiệu suất tăng lớn nhất cho các mã chuyên sâu tính toán là vector hóa mã nối tiếp. Mặc dù nhiều người cho rằng điều này là đúng trong các máy gia tốc, nhưng nó cũng rất quan trọng đối với các máy trên nút. Tôi tin rằng West 4.0.3 có 4 FPU rộng, do đó người ta chỉ có thể nhận được một phần tư số flops mà không cần vector hóa.
Mặc dù tôi không thấy OpenMP hiện tại bước vào không gian này, nhưng có một nơi dành cho các chip năng lượng thấp hoặc gạch để sử dụng nhiều luồng ánh sáng hơn. OpenMP gặp khó khăn khi mô tả cách thức luồng dữ liệu hoạt động và khi sử dụng nhiều luồng hơn, tôi chỉ thấy xu hướng này trở nên cường điệu hơn, chỉ cần nhìn vào các ví dụ về những gì người ta phải làm để có được tìm nạp trước thích hợp với OpenMP.
Cả OpenMP và PThread ở một mức độ đủ khóa học đều có thể tận dụng lợi thế của vector hóa cần thiết để có được tỷ lệ phần trăm cao nhất, nhưng làm như vậy đòi hỏi phải phá vỡ các thuật toán của bạn theo cách mà vector hóa là tự nhiên.
Đồng xử lý
Cuối cùng, sự xuất hiện của bộ đồng xử lý (GPU, MIC, bộ tích hợp di động) đã được giữ vững. Nó trở nên rõ ràng rằng không có con đường đến exascale sẽ được hoàn thành mà không có họ. Tại SC11, mọi thí sinh đạt giải Bell đều sử dụng chúng rất hiệu quả để đến được các petaflop thấp. Trong khi CUDA và OpenCL đã thống trị thị trường hiện tại, tôi có hy vọng cho trình biên dịch OpenACC và PGAS vào không gian.
Bây giờ để có được exascale, một đề xuất là ghép các chip có công suất thấp với nhiều bộ đồng xử lý. Điều này sẽ tiêu diệt khá tốt lớp giữa của ngăn xếp hiện tại và sử dụng các mã quản lý các vấn đề quyết định trên chip chính và tắt công việc cho các bộ đồng xử lý. Điều này có nghĩa là để mã hoạt động khá hiệu quả, một người phải suy nghĩ lại về các thuật toán về các hạt nhân (hoặc bảng mã), đó là đoạn mã song song ở mức hướng dẫn không phân nhánh. Theo tôi biết, một giải pháp cho sự tiến hóa này là khá rộng mở.
Điều này ảnh hưởng đến nhà phát triển ứng dụng như thế nào
Bây giờ để có được câu hỏi của bạn. Nếu bạn muốn bảo vệ bản thân khỏi sự phức tạp sắp tới của máy exascale, bạn nên làm một số điều:
- Phát triển các thuật toán của bạn để phù hợp với ít nhất ba cấp độ phân cấp song song.
- Thiết kế các thuật toán của bạn theo các hạt nhân có thể được di chuyển giữa chế độ bá đạo.
- Thư giãn nhu cầu của bạn cho bất kỳ quá trình tuần tự, tất cả các hiệu ứng này sẽ xảy ra không đồng bộ bởi vì thực thi đồng bộ là không thể.
Nếu bạn muốn trở thành người biểu diễn ngay hôm nay, MPI + CUDA / OpenCL là đủ tốt nhưng UPC đang đến đó vì vậy không phải là ý tưởng tồi để mất vài ngày và tìm hiểu nó. OpenMP giúp bạn bắt đầu nhưng dẫn đến các vấn đề một khi mã cần được cấu trúc lại. PThreads yêu cầu hoàn toàn viết lại mã của bạn theo phong cách của nó. Điều này làm cho MPI + CUDA / OpenCL là mô hình tốt nhất hiện tại.
Những gì không được thảo luận ở đây
Trong khi tất cả các cuộc nói chuyện về exascale này là tốt đẹp, một điều không thực sự được thảo luận ở đây là nhận dữ liệu vào và ra khỏi máy. Mặc dù đã có nhiều tiến bộ trong các hệ thống bộ nhớ, chúng ta không thấy chúng trong cụm hàng hóa (quá đắt đỏ). Giờ đây, máy tính chuyên sâu dữ liệu đang trở thành một trọng tâm lớn của tất cả các hội nghị siêu máy tính, chắc chắn sẽ có một chuyển động lớn hơn vào không gian băng thông bộ nhớ cao.
Điều này mang đến xu hướng khác có thể xảy ra (nếu các cơ quan tài trợ phù hợp tham gia). Máy móc sẽ ngày càng trở nên chuyên biệt hơn cho loại máy tính cần thiết. Chúng ta đã thấy các máy "thâm dụng dữ liệu" được NSF tài trợ, nhưng các máy này nằm trên một đường đua khác so với Thử thách lớn Exascale 2019.
Điều này trở nên dài hơn dự kiến yêu cầu tham khảo nơi bạn cần chúng trong các ý kiến