Có cách nào trong CUDA phân bổ bộ nhớ trong hàm __device__ không? Tôi không thể tìm thấy bất kỳ ví dụ nào về việc này.CUDA cấp phát bộ nhớ trong hàm __device__
Từ hướng dẫn sử dụng: B.15 Phân bổ bộ nhớ động toàn cầu void * malloc (size_t size); void miễn phí (void * ptr); phân bổ và giải phóng bộ nhớ tự động từ một vùng nhớ có kích thước cố định trong bộ nhớ toàn cầu. Hàm CUDA trong hạt nhân malloc() phân bổ ít nhất kích thước byte từ vùng nhớ thiết bị và trả về một con trỏ tới bộ nhớ được phân bổ hoặc NULL nếu không đủ bộ nhớ để đáp ứng yêu cầu. Con trỏ trả về được đảm bảo được căn chỉnh với một ranh giới 16-byte. Hàm CUDA in-kernel free() deallocates bộ nhớ được trỏ tới bởi ptr, mà phải được trả về bởi một cuộc gọi trước đó đến malloc(). Nếu ptr là NULL, lệnh gọi free() bị bỏ qua. Các cuộc gọi lặp lại tới free() với cùng một ptr có hành vi không xác định. Bộ nhớ được cấp phát bởi một chuỗi CUDA đã cho qua malloc() vẫn được cấp phát cho toàn bộ thời gian của ngữ cảnh CUDA, hoặc cho đến khi nó được giải phóng một cách rõ ràng bằng một lời gọi đến free(). Nó có thể được sử dụng bởi bất kỳ chủ đề CUDA nào khác ngay cả khi khởi chạy hạt nhân tiếp theo. Bất kỳ chuỗi CUDA nào cũng có thể giải phóng bộ nhớ được phân bổ bởi một luồng khác, nhưng cần lưu ý để đảm bảo rằng cùng một con trỏ không được giải phóng nhiều lần.
bạn đang cố gắng cấp phát bộ nhớ động? – jmilloy
Có. Tôi hiểu rằng đó là một yêu cầu kỳ lạ nhưng tôi đang chuyển mã cơ sở hiện tại – SparcU