2013-01-22 14 views
8

Tôi nhầm lẫn về sự khác biệt giữa việc sử dụng dự định của con trỏ thiết bị và cấu trúc cudaArray. Ai đó có thể vui lòng giải thích tại sao tôi sẽ sử dụng cái này so với cái kia không? Vấn đề cơ bản của tôi là sau khi xem qua tài liệu và đọc cuốn sách "CUDA by Example", tôi không hiểu ý định của các nhà thiết kế API.cudaArray so với con trỏ thiết bị

Từ những gì tôi đã thấy, có vẻ như là cudaArray nên được sử dụng cho họa tiết và con trỏ nên được sử dụng để truy cập trực tiếp vào bộ nhớ. Dường như kết cấu 3D chỉ có thể được tạo bằng cách sử dụng cudaArray. Tất cả các kết cấu có được phân bổ sử dụng cudaArray không? Nhiều ví dụ dường như không. Ngoài ra, tại sao có chức năng cudaMallocArraycudaMallocArray3D, nhưng không tương đương với cudaMallocArray2D? Ngược lại, có một số cudaBindTexturecudaBindTexture2D, nhưng không có cudaBindTexture3D?

Trả lời

16

cudaArray là khối mờ của bộ nhớ được tối ưu hóa để gắn kết với họa tiết. Kết cấu có thể sử dụng bộ nhớ được lưu trữ trong một space filling curve, cho phép tỷ lệ truy cập bộ đệm kết cấu tốt hơn do vị trí không gian 2D tốt hơn. Sao chép dữ liệu vào cudaArray sẽ khiến dữ liệu được định dạng thành đường cong như vậy.

Vì vậy, lưu trữ dữ liệu trong một cudaArray là một kỹ thuật tối ưu hóa có thể mang lại tỷ lệ truy cập bộ nhớ cache kết cấu tốt hơn. Trong các kiến ​​trúc CUDA ban đầu, hạt nhân cũng không thể truy cập vào số cudaArray. Tuy nhiên, các kiến ​​trúc về khả năng tính toán> = 2.0 có thể truy cập mảng thông qua các bề mặt CUDA.

Xác định xem bạn có nên sử dụng cudaArray hoặc bộ đệm thông thường trong bộ nhớ chung đi xuống đến các mẫu sử dụng và truy cập dự định cho bộ nhớ. Nó sẽ là dự án cụ thể.

cudaMallocArray() thực sự phân bổ mảng 2D, vì vậy, tôi cho rằng vấn đề chỉ là đặt tên không phù hợp. Có lẽ sẽ hợp lý hơn nếu gọi nó là cudaMallocArray2D().

Tôi chưa sử dụng họa tiết 3D. Hy vọng rằng, ai đó sẽ trả lời và cho chúng tôi biết lý do tại sao không cần cudaBindTexture3D().

1

Bạn có thể sử dụng cudaBindTextureToArray, nó hoạt động cho cả 2D và 3D.