Khi chúng tôi kiểm tra việc sử dụng đăng ký bằng cách sử dụng xptxas chúng ta thấy một cái gì đó như thế này:CUDA ngân hàng bộ nhớ liên tục
ptxas info : Used 63 registers, 244 bytes cmem[0], 51220 bytes cmem[2], 24 bytes cmem[14], 20 bytes cmem[16]
Tôi tự hỏi nếu hiện có bất kỳ tài liệu giải thích rõ ràng cmem [x]. Điểm tách bộ nhớ liên tục thành nhiều ngân hàng là bao nhiêu ngân hàng, và tổng số ngân hàng khác 0, 2, 14, 16 được sử dụng là gì?
như một lưu ý phụ, @njuffa (nhờ đặc biệt với bạn) trước đây đã giải thích trên diễn đàn nvidia là những gì ngân hàng 0,2,14,16:
bộ nhớ liên tục sử dụng được phân chia trong 'biến' liên tục chương trình (ngân hàng 1), cộng với trình biên dịch tạo ra hằng số (ngân hàng 14).
cmem [0]: đối số kernel
cmem [2]: sử dụng định nghĩa đối tượng liên tục
cmem [16]: trình biên dịch tạo ra hằng (một số trong đó có thể tương ứng với nghĩa đen hằng số trong mã nguồn)
Bạn được hoan nghênh. Tôi nghĩ rằng tôi đã đề cập trong bài viết của tôi trong diễn đàn NVIDIA rằng số lượng các ngân hàng không đổi khác nhau giữa các kiến trúc GPU, cũng như việc phân bổ ngân hàng.Nói cách khác, đây là những chi tiết thực hiện mà các lập trình viên không nên lo lắng vì chúng không phải là một phần của mô hình lập trình. Một lý do để sử dụng nhiều ngân hàng là giảm thiểu khả năng sử dụng xung đột bộ nhớ không đổi, đặc biệt giữ được nhiều ngân hàng có thể nhìn thấy lập trình có sẵn cho mã người dùng. – njuffa
@njuffa Tôi nghĩ rằng điều này (cùng với các trích dẫn từ diễn đàn của bạn đăng ở trên) nên được chuyển đổi thành câu trả lời. :) – harrism
@njuffa Tôi có một câu hỏi tiếp theo. Hướng dẫn lập trình cho biết _Các đối số cho cấu hình thực thi được đánh giá trước các đối số hàm thực tế và giống như các đối số hàm, hiện đang được truyền qua bộ nhớ dùng chung cho thiết bị._ Sự hiểu biết của tôi là lúc biên dịch, các đối số được sao chép vào cmem [0 ], nhưng tại thời gian chạy chúng được sao chép từ cmem sang smem ngay trước khi một khối mới bắt đầu. Đúng không? –