Tôi muốn khởi tạo một lớp trong mã CUDA, chia sẻ một số thành viên của nó với các chủ đề khác trong cùng một khối.Tại sao các biến thành viên không được chia sẻ?
Tuy nhiên, khi cố gắng biên dịch mã sau, tôi nhận được lỗi: »thuộc tính" được chia sẻ "không áp dụng ở đây« (nvcc phiên bản 4.2).
class SharedSomething {
public:
__shared__ int i; // this is not allowed
};
__global__ void run() {
SharedSomething something;
}
Lý do đằng sau điều đó là gì? Có một công việc xung quanh để đạt được hành vi mong muốn (các thành viên được chia sẻ của một lớp trên một khối) không?
Cảm ơn vì công việc. Điều này thậm chí có thể được thực hiện chung chung hơn bằng cách tuyên bố một lớp bên trong được chia sẻ trong Foo chứa tất cả dữ liệu được chia sẻ. Mã kêu gọi instantiates một chia sẻ Foo :: chia sẻ và vượt qua nó để các nhà xây dựng của Foo. Bằng cách này, mã gọi điện không cần phải thay đổi nếu Foo :: Thay đổi được chia sẻ. – user1716882
Có điểm tốt. – harrism