Chương trình của tôi rất phù hợp với MPI. Mỗi CPU thực hiện công việc riêng, tinh vi (riêng) của nó, tạo ra một double
duy nhất, và sau đó tôi sử dụng một MPI_Reduce
để nhân kết quả từ mọi CPU.MPI + GPU: cách kết hợp hai kỹ thuật
Nhưng tôi lặp lại điều này nhiều lần, nhiều lần (> 100.000). Vì vậy, nó xảy ra với tôi rằng một GPU sẽ tăng tốc đáng kể mọi thứ lên.
Tôi có google'd xung quanh, nhưng không thể tìm thấy bất cứ điều gì cụ thể. Làm thế nào để bạn đi về trộn MPI với GPU? Có cách nào để chương trình truy vấn và xác minh "oh, này xếp hạng là GPU, tất cả đều là CPU"? Có hướng dẫn được đề xuất hay gì đó không?
Quan trọng, tôi không muốn hoặc cần một bộ đầy đủ các GPU. Tôi thực sự chỉ cần rất nhiều CPU, và sau đó là một GPU duy nhất để tăng tốc độ hoạt động thường được sử dụng MPI_Reduce
.
Dưới đây là ví dụ sơ đồ về những gì tôi đang nói về:
Giả sử tôi có 500 CPU. Mỗi CPU bằng cách nào đó tạo ra, ví dụ, 50 double
s. Tôi cần nhân tất cả 250,00 trong số double
giây này với nhau. Sau đó, tôi lặp lại điều này từ 10.000 đến 1 triệu lần. Nếu tôi có thể có một GPU (ngoài 500 CPU), điều này có thể thực sự hiệu quả. Mỗi CPU sẽ tính 50 double
s cho tất cả ~ 1 triệu "trạng thái". Sau đó, tất cả 500 CPU sẽ gửi double
s của họ tới GPU. GPU sau đó sẽ nhân 250.000 double
s với nhau cho mỗi một triệu "tiểu bang", sản xuất 1 triệu doubles
.
Những con số này không chính xác. Tính toán thực sự là rất lớn. Tôi chỉ đang cố gắng truyền đạt vấn đề chung.
Điều này nghe có vẻ không phù hợp lắm với tính toán GPU. Thành phần GPU được đề xuất của bạn chỉ chứa vài trăm MFLops chính xác gấp đôi. Đơn đặt hàng có độ lớn nhỏ hơn lợi nhuận cho GPU và sẽ bị ảnh hưởng bởi chi phí mạng truyền dữ liệu qua dây tới nút Node lưu trữ GPU và qua bus PCI-e vào bộ nhớ GPU – talonmies
@talonmies Xin lỗi cho ví dụ sơ đồ gây hiểu lầm. Tôi sẽ cập nhật trong câu hỏi của mình. phức tạp hơn, tôi cần phải nhân đôi giữa * O * (10k) 'double' lại với nhau, mỗi CPU sẽ tạo ra một loạt các' double '(không chỉ một). Số lượng bang sẽ nằm trong khoảng từ ~ 10.000 đến vài triệu (không phải 100.000 đơn giản) Toàn bộ quá trình này sẽ được lặp lại thường xuyên – cmo
Như tôi đã viết, đó vẫn chỉ là vài trăm MFlops. lượng tính toán, ngay cả đối với CPU. – talonmies