Chương trình CUDA của tôi đang bị truy cập bộ nhớ toàn cầu chưa được kết hợp. Mặc dù thread idx-th chỉ đối phó với ô [idx] -throng một mảng, có nhiều truy cập bộ nhớ gián tiếp như được hiển thị bên dưới.Truy cập bộ nhớ toàn cầu không được hợp nhất do truy cập gián tiếp trong CUDA
int idx=blockDim.x*blockIdx.x+threadIdx.x;
.... = FF[m_front[m_fside[idx]]];
Đối m_fisde [idx], chúng tôi đã kết hợp từ các truy cập, nhưng những gì chúng tôi thực sự cần là FF [m_front [m_fside [idx]]]. Có một truy cập gián tiếp hai cấp.
Tôi đã cố gắng tìm một số mẫu dữ liệu trong m_front hoặc m_fsied để làm cho điều này trở thành truy cập tuần tự trực tiếp, nhưng phát hiện ra rằng chúng gần như 'ngẫu nhiên'.
Có cách nào để giải quyết vấn đề này không?
Đây là vấn đề tương tự như địa chỉ ma trận thưa thớt và đã có khá nhiều công việc được thực hiện để hiểu cách cải thiện điều đó. Bạn có thể nhận được một số ý tưởng từ việc xem xét tài liệu về các hoạt động ma trận thưa thớt trên GPUS. – talonmies
Nếu có bất kỳ địa phương nào trong các truy cập, [câu hỏi này] (http://stackoverflow.com/questions/12938333/coalesced-global-memory-writes-using-hash/12938726#12938726) có thể được quan tâm. –
@RobertCrovella ... Liên kết ** Texture Mechanism ** được cung cấp trong câu trả lời được liên kết ở trên, đã hết hạn. Bạn có thể vui lòng cập nhật liên kết không? – sgarizvi