2012-09-05 37 views
7

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)

+5

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

+0

@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

+0

@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? –

Trả lời

4

Việc sử dụng các ngân hàng không đổi GPU của CUDA không được chính thức ghi nhận trong tài liệu của tôi. Số lượng và cách sử dụng của các ngân hàng không đổi khác nhau giữa các thế hệ GPU. Đây là những chi tiết thực hiện cấp thấp mà các lập trình viên không phải lo lắng.

Việc sử dụng các hằng số ngân hàng có thể được đảo ngược thiết kế, nếu muốn, bằng cách xem mã máy (SASS) được tạo cho một nền tảng nhất định. Trong thực tế, đây là cách tôi đã đưa ra các thông tin trích dẫn trong câu hỏi ban đầu (thông tin này đến từ một bài đăng trên diễn đàn của nhà phát triển NVIDIA của tôi). Khi tôi nhớ lại, thông tin tôi đưa ra dựa trên kỹ thuật đảo ngược adhoc được áp dụng cụ thể cho các thiết bị lớp Fermi, nhưng tôi không thể xác minh điều này vào lúc này vì các diễn đàn không thể truy cập được vào lúc này.

Một lý do để có nhiều ngân hàng không đổi là đặt trước bộ nhớ liên tục có thể nhìn thấy cho việc sử dụng các lập trình viên CUDA, trong khi lưu trữ thêm thông tin chỉ đọc được cung cấp bởi phần cứng hoặc công cụ. Lưu ý rằng thư viện toán CUDA được cung cấp dưới dạng tệp nguồn và các hàm được đưa vào mã người dùng, do đó việc sử dụng bộ nhớ liên tục của các hàm thư viện toán CUDA được bao gồm trong số liệu thống kê cho bộ nhớ liên tục có thể nhìn thấy.

0

Vui lòng xem "Miscellaneous NVCC Usage". Họ đề cập đến, việc phân bổ ngân hàng không đổi là cụ thể cho từng cấu hình.

Trong số PTX guide, họ nói rằng ngoài bộ nhớ không đổi 64KB, họ còn có thêm 10 ngân hàng cho bộ nhớ không đổi. Trình điều khiển có thể cấp phát và khởi tạo bộ đệm liên tục trong các vùng này và chuyển con trỏ tới bộ đệm làm tham số hàm của hạt nhân.

Tôi đoán, cấu hình được cung cấp cho nvcc sẽ xử lý các hằng số đi vào bộ nhớ nào. Dù sao, chúng ta không cần phải lo lắng nếu mỗi cmem bộ nhớ không đổi [n] nhỏ hơn 64KB, bởi vì mỗi ngân hàng có kích thước 64KB và phổ biến cho tất cả các luồng trong lưới.

Các vấn đề liên quan