Các đơn vị xử lý song song lớn ngày nay có thể chạy automata di động một cách hiệu quả không?


20

Tôi tự hỏi liệu các đơn vị tính toán song song ồ ạt được cung cấp trong các card đồ họa hiện nay (chẳng hạn như một đơn vị được lập trình trong OpenCL ) có đủ tốt để mô phỏng automata di động 1D (hoặc có thể là automata di động 2D không?).

Nếu chúng ta chọn bất kỳ lưới hữu hạn nào phù hợp bên trong bộ nhớ của chip, chúng ta có thể mong đợi một chuyển đổi của một máy tự động di động được xác định trên lưới này sẽ được tính trong thời gian không đổi (gần đúng) không?

Tôi giả sử automata di động 2D sẽ cần nhiều băng thông hơn để liên lạc giữa các phần khác nhau của chip so với automata 1D.

Tôi cũng quan tâm đến câu hỏi tương tự trong trường hợp lập trình FPGA hoặc chip tùy chỉnh.


Có lẽ nó sẽ phù hợp hơn khi so sánh với một con chip "tương đương" mô phỏng cùng một máy tự động di động theo cách thông thường. (lưu trữ các ô trong bộ nhớ theo mô hình Von Newmann thông thường)
jmad

Câu hỏi hay. Tôi không biết loại thuật toán nào hoạt động tốt trên GPU, vì vậy tôi rất mong được trả lời.
Raphael

1
Mặc dù có đồ họa, nhưng pro pro là exp probs. Có lẽ liên quan ở đâyở đây .

Câu trả lời:


7

Câu hỏi tuyệt vời. Tôi tin rằng câu trả lời là có.

Phát triển một máy tự động di động về cơ bản là tương đương với việc thực hiện một tính toán stprint. Trên một số lưới 1D, 2D hoặc 3D, các giá trị liên tiếp của các điểm (hoặc ô) được tính dựa trên giá trị cuối cùng của vùng lân cận điểm. Trong CA 1D đơn giản, vùng lân cận này có thể là ô và hai ô ở bên trái và bên phải. Có rất nhiều ví dụ về tính toán stprint đang được thực hiện trên GPU; Ví dụ, bộ điểm chuẩn SHOC của ORNL cho OpenCL / CUDA chứa ví dụ về bản in 2D.

Ý tưởng cơ bản là để mỗi luồng lấy một bản sao cục bộ của vùng lân cận cho một số điểm, sau đó tính các giá trị tiếp theo cho các điểm được xác định bởi vùng lân cận đó. Bằng cách sử dụng một cách thích hợp hệ thống phân cấp bộ nhớ trong CUDA (thanh ghi, chia sẻ, hằng số, kết cấu và bộ nhớ toàn cầu) và mô hình xử lý SIMT (ví dụ, bằng cách tính toán một cách thích hợp chức năng chuyển đổi mà không đưa ra sự phân kỳ dọc quá mức), có thể đạt được hiệu suất tốt.

Câu trả lời này sẽ tốt hơn rất nhiều nếu tôi đưa ra một ví dụ, nhưng tôi quá bận để viết bất kỳ mã nào ngay bây giờ ... Nhưng theo lý thuyết, tôi nghĩ nên mô phỏng hiệu quả CA trên GPU bằng cách mô hình hóa chúng sau stprint tính toán. Mặc dù vậy, có rất nhiều cân nhắc để viết một tính toán tốt cho GPU.


5

Dù bạn làm gì, tính toán trạng thái tiếp theo cho một máy tự động di động yêu cầu nhiều tính toán hơn so với các tế bào trong máy tự động. Do đó, để có được thời gian liên tục, bạn cần nhiều lõi máy tính như có các ô.

Số lượng các GPU này hiện tại nhiều nhất là vài nghìn, trong khi việc tính toán trạng thái tiếp theo đơn giản đến mức tôi mong đợi kết quả bị ràng buộc IO, tức là bạn có thể có được xấp xỉ rất tốt thời gian cần thiết chỉ bằng cách xem xét di chuyển dữ liệu cần thiết (và nếu đó không phải là một xấp xỉ tốt, thì việc triển khai có hiệu quả hoặc kiến ​​trúc không phù hợp, nhưng điều đó sẽ rất đáng ngạc nhiên).

Đối với FPGA, câu hỏi khó hơn và có thể sẽ phụ thuộc vào sự pha trộn giữa các đơn vị bộ nhớ và tính toán có sẵn. Nếu tôi không ở quá xa, bạn sẽ không có đủ bộ nhớ để giữ cho tất cả các đơn vị bận rộn và nếu bạn dựa vào bộ nhớ ngoài, bạn ở cùng chỗ với GPU, băng thông bộ nhớ sẽ là yếu tố hạn chế và tôi sẽ không ngạc nhiên nếu kết luận là không có lợi thế so với GPU. (Lưu ý rằng trong khi tôi đã làm việc với FPGA, cách đây nhiều năm, giờ đây có thể có các mô hình FPGA với sự pha trộn phù hợp).

ASIC cung cấp linh hoạt hơn. Bạn có thể dễ dàng thực hiện như tâm thu (nhưng với luồng dữ liệu hai chiều, một số tâm thu thường bị giới hạn ở luồng dữ liệu một chiều), mỗi ô vật lý là một logic: bit bộ nhớ và logic cần thiết để tính toán trạng thái tiếp theo của nó và được đặt ra Vì vậy, đó là hàng xóm vật lý của nó là hợp lý. Bạn rõ ràng là trong cõi thời gian liên tục. Tùy thuộc vào loại macro cứng nào bạn có, bạn có thể tốt hơn một chút rõ ràng hơn và có các ô vật lý tập hợp lại một số logic. Mục tiêu là tối đa hóa những gì được thực hiện trong một chip, hay nói cách khác là giảm thiểu giao tiếp với bên ngoài chip ngay khi nhu cầu liên lạc của bạn tỷ lệ thuận với số lượng tế bào, bạn sẽ bị giới hạn băng thông. Vâng, điều đó có nghĩa là nếu bạn cần xem tất cả các ô cho mỗi bước, bạn có thể không tốt hơn nhiều so với GPU. (Tùy chỉnh đầy đủ sẽ chỉ cung cấp tích hợp tốt hơn, tức là nhiều ô hơn trên mỗi chip).

Tóm tắt: - nếu bạn muốn xem xét tất cả các trạng thái trung gian, GPU là cách tiếp cận hiệu quả nhất - nếu bạn không, bạn cần âm lượng để chứng minh ASIC có gì đó tốt hơn, có lẽ FPGA sẽ không cung cấp đủ lợi thế nếu chúng có bất kỳ.


2

Tôi tự hỏi liệu các đơn vị tính toán song song ồ ạt được cung cấp trong các card đồ họa hiện nay có đủ tốt để mô phỏng automata di động 1D (hoặc có thể là automata di động 2D không?) Một cách hiệu quả.

nói chung, có điện toán GPU là sự thay thế tốt nhất trong phần cứng tiêu chuẩn có sẵn cho mọi người.

O(1)nPnPO(1)

về phía FPGA và ASIC, tôi biết rằng có nghiên cứu về việc xây dựng một CA vật lý như một mạng lưới các cổng logic với các trạng thái, tất cả được kết nối bởi các nước láng giềng; tức là mảng tâm thu . Ý tưởng là không sử dụng bộ nhớ chung nữa mà thay vào đó dựa vào trạng thái của từng nút trong lưới. Một loại máy này sẽ là một cuộc cách mạng kể từ đó chúng ta có thể ngừng nói về một máy tính mô phỏng CA và bắt đầu nói về một CA chạy như một máy tính (một số CA đã hoàn tất).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.