-
nhớ
- Host đã được ghim thành công và lập bản đồ sử dụng
cudaHostAlloc(..., cudaHostAllocMapped)
hoặccudaHostRegister(..., cudaHostRegisterMapped)
; - Con trỏ thiết bị đã được lấy bằng cách sử dụng
cudaHostGetDevicePointer(...)
.
Tôi bắt đầu cudaMemcpy(..., cudaMemcpyDeviceToDevice)
trên src và dest device con trỏ trỏ đến hai vùng khác nhau của bộ nhớ được ánh xạ + được lấy bởi kỹ thuật ở trên. Mọi thứ đều hoạt động tốt.
Câu hỏi: Tôi có nên tiếp tục thực hiện việc này hay chỉ sử dụng kiểu CPU memcpy()
theo kiểu truyền thống vì mọi thứ đều nằm trong bộ nhớ hệ thống? ... hoặc có phải là số cùng một số (ví dụ: cudaMemcpy
ánh xạ đến thẳng memcpy
khi cả hai src và dest được ghim)?
(tôi vẫn đang sử dụng phương pháp cudaMemcpy
vì trước đây tất cả mọi thứ là trong ký ức toàn cầu thiết bị, nhưng có kể từ khi chuyển sang bộ nhớ gắn do hạn chế về kích thước gmem)
Đó là một câu hỏi thú vị. Với điều kiện bạn sử dụng một memcpy tối ưu, CPU có lẽ tốt hơn - bộ nhớ thuộc về nó, sau khi tất cả - và khả năng của một GPU rời rạc để làm host-> host memcpy bị giới hạn băng thông PCIe. Nhưng nếu GPU không hoạt động, tại sao không? – ArchaeaSoftware
Tôi hy vọng GPU sẽ không làm bản sao. Tôi hy vọng thời gian chạy sẽ thấy rằng các con trỏ là cả hai con trỏ lưu trữ và gọi một máy chủ memcpy. Tôi đã yêu cầu để tìm hiểu những gì thực sự xảy ra. – harrism