2012-02-15 38 views
10

NVIDIA cung cấp GPUDirect để giảm chi phí chuyển bộ nhớ. Tôi tự hỏi nếu có một khái niệm tương tự cho AMD/ATI? Cụ thể:OpenCL của AMD có cung cấp cái gì đó tương tự như GPUDirect của CUDA không?

1) Làm GPU AMD tránh chuyển giao bộ nhớ thứ hai khi giao tiếp với thẻ mạng, as described here. Trong trường hợp đồ họa bị mất tại một số điểm, dưới đây là mô tả về tác động của GPUDirect đối với việc lấy dữ liệu từ GPU trên một máy được truyền qua giao diện mạng: Với GPUDirect, bộ nhớ GPU sẽ chuyển tới bộ nhớ Máy chủ rồi chuyển thẳng tới mạng Thẻ giao diện. Nếu không có GPUDirect, bộ nhớ GPU sẽ chuyển đến bộ nhớ Máy chủ trong một không gian địa chỉ, sau đó CPU phải sao chép để lấy bộ nhớ vào một không gian địa chỉ bộ nhớ Máy chủ khác, sau đó nó có thể chuyển sang thẻ mạng.

2) GPU AMD cho phép chuyển giao bộ nhớ P2P khi hai GPU được chia sẻ trên cùng một bus PCIe, as described here. Trong trường hợp đồ họa bị mất tại một số điểm, đây là mô tả về tác động của GPUDirect khi truyền dữ liệu giữa các GPU trên cùng một bus PCIe: Với GPUDirect, dữ liệu có thể di chuyển trực tiếp giữa các GPU trên cùng một bus PCIe mà không cần chạm vào bộ nhớ máy chủ. Nếu không có GPUDirect, dữ liệu luôn phải quay trở lại máy chủ trước khi nó có thể đến GPU khác, bất kể vị trí của GPU đó.

Chỉnh sửa: BTW, tôi không hoàn toàn chắc chắn bao nhiêu phần mềm GPUDirect là phần mềm độc hại và bao nhiêu phần mềm thực sự hữu ích. Tôi đã không bao giờ thực sự nghe nói về một lập trình GPU sử dụng nó cho một cái gì đó thực sự. Suy nghĩ về điều này được chào đón quá.

+0

Ông có thể cung cấp một mô tả văn bản của hai công nghệ trong trường hợp đồ họa liên quan được đưa xuống tại một số ngày sau đó? Ngoài ra, tôi thấy đồ họa thứ hai không rõ ràng về những gì được cung cấp. – James

+0

James, điều này được thực hiện. – arrayfire

+0

@gpu: mvapich2 có hỗ trợ trực tiếp GPU trong bản phát hành gần đây, tôi đã sử dụng nó và nó thực sự nhanh hơn - bạn có thể gọi 'MPI_Send' và' MPI_recv' và chuyển con trỏ bộ nhớ GPU làm đối số và mọi thứ "chỉ hoạt động". – talonmies

Trả lời

2

Tôi nghĩ bạn có thể đang tìm kiếm cờ CL_MEM_ALLOC_HOST_PTR trong clCreateBuffer. Trong khi đặc tả OpenCL chỉ ra rằng cờ này "Cờ này chỉ rõ rằng ứng dụng muốn thực hiện OpenCL để cấp phát bộ nhớ từ bộ nhớ có thể truy cập máy chủ", không chắc chắn việc triển khai của AMD (hoặc các triển khai khác) có thể làm gì với nó.

Dưới đây là một chủ đề thông tin về chủ đề http://www.khronos.org/message_boards/viewtopic.php?f=28&t=2440

Hope this helps.

Chỉnh sửa: Tôi biết rằng SDK OpenCL của nVidia thực hiện việc này dưới dạng phân bổ trong bộ nhớ bị khóa/trang bị khóa. Tôi khá chắc chắn đây là những gì OpenCL SDK của AMD làm khi chạy trên GPU.

+4

CUDA có tương đương CL_MEM_ALLOC_HOST_PTR, nhưng chúng không giống với GPUDirect. CUDA có thể truy cập phân bổ bộ nhớ máy chủ từ bên trong các hạt nhân GPU. Nó cũng có thể phân bổ các con trỏ lưu trữ đã khóa trang để làm cho DMA trở thành GPU hiệu quả hơn. Nhưng GPUDirect vượt xa cả hai điều này, như được mô tả trong câu hỏi của @ gpu. – harrism

+0

Đã hiểu. Sau đó, tại thời điểm này tôi không tin rằng OpenCL có tương đương. – Ani

2

Như được chỉ ra bởi @ananthonline và @harrism, nhiều tính năng của GPUDirect không có tương đương trực tiếp trong OpenCL. Tuy nhiên, nếu bạn đang cố gắng giảm chi phí chuyển bộ nhớ, như đã đề cập trong câu đầu tiên của câu hỏi, bộ nhớ không sao chép có thể giúp bạn. Thông thường, khi một ứng dụng tạo bộ đệm trên GPU, nội dung của bộ đệm được sao chép từ bộ nhớ CPU sang bộ nhớ GPU. Với bộ nhớ không sao chép, không có bản sao trả trước; thay vào đó, dữ liệu được sao chép khi nó được hạt nhân GPU truy cập.

Bản sao không có ý nghĩa đối với tất cả các ứng dụng. Dưới đây là lời khuyên từ Programming Guide AMD APP OpenCL trên khi sử dụng nó:

Zero, bản sao đối tượng cư dân bộ nhớ máy chủ có thể tăng hiệu suất khi bộ nhớ máy chủ được truy cập bởi các thiết bị một cách thưa thớt hoặc khi một chủ lớn bộ nhớ đệm được chia sẻ giữa nhiều thiết bị và các bản sao quá đắt. Khi chọn điều này, chi phí chuyển khoản phải là lớn hơn chi phí bổ sung của các lần truy cập chậm hơn.

Bảng 4.3 của Hướng dẫn lập trình mô tả những cờ nào để chuyển tới clCreateBuffer để tận dụng lợi thế của bản sao không (hoặc CL_MEM_ALLOC_HOST_PTR hoặc CL_MEM_USE_PERSISTENT_MEM_AMD, tùy thuộc vào việc bạn muốn bộ nhớ máy chủ có thể truy cập hoặc bộ nhớ thiết bị có thể truy cập máy chủ). Lưu ý rằng hỗ trợ không sao chép phụ thuộc vào cả hệ điều hành và phần cứng; có vẻ như không được hỗ trợ trong phiên bản Linux hoặc cũ hơn của Windows.

AMD APP OpenCL Lập trình Hướng dẫn: http://developer.amd.com/sdks/AMDAPPSDK/assets/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf

Các vấn đề liên quan