Tôi muốn có thể kết hợp các thiết bị OpenCL với GPU trong hệ thống trên các hệ thống đa GPU được xác định bằng ID PCI.Làm thế nào để kết hợp các thiết bị OpenCL với một GPU cụ thể cho các nhà cung cấp PCI, ID thiết bị và bus trong một hệ thống đa GPU?
Ví dụ: nếu tôi có một hệ thống có nhiều GPU, có thể từ các nhà cung cấp khác nhau, tôi có thể liệt kê các thiết bị bằng cách liệt kê bus PCI. Điều này mang lại cho tôi nhà cung cấp PCI, thiết bị và ID xe buýt. Nếu tôi chọn một trong các thiết bị PCI (GPU) này để sử dụng cho tính toán OpenCL dựa trên một số tiêu chí lựa chọn, làm cách nào để kết hợp nó với thiết bị OpenCL?
Tôi có thể liệt kê các thiết bị GPU trong OpenCL sử dụng clGetDeviceIDs() nhưng không có cách nào rõ ràng để khớp thiết bị OpenCL với thiết bị PCI. Chức năng OpenCL clGetDeviceInfo() cung cấp quyền truy cập vào ID nhà cung cấp PCI và tên thiết bị nhưng không cung cấp ID thiết bị hoặc ID bus. Tôi có thể cố gắng để phù hợp với tên thiết bị PCI với tên thiết bị OpenCL nhưng nó có thể là bạn có nhiều hơn một trong cùng một loại thiết bị và các tên không phải luôn luôn giống nhau anyway.
Tại sao điều này lại cần thiết? Nói rằng tôi biết rằng chương trình X đang chạy CUDA hoặc cái gì khác trên GPU A. Tôi muốn tránh sử dụng GPU A cho một hoạt động OpenCL vì vậy tôi chọn GPU B. Sau đó tôi cần tìm ra thiết bị OpenCL nào là GPU A và GPU là gì B. Các ID PCI có vẻ là cách duy nhất và nền tảng chéo để xác định các thiết bị GPU.
BTW, API CUDA cung cấp cho bạn ID PCI, bus và slot (CU_DEVICE_ATTRIBUTE_PCI_BUS_ID, CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) nhưng CUDA chỉ hoạt động với các thiết bị NVidia.
Lý tưởng nhất là tôi cần giải pháp bằng cách sử dụng C hoặc C++.
Thông số nói CL_DEVICE_VENDOR_ID "có thể là ID PCIe". Nếu điều đó không có được những gì bạn muốn, thì tôi không nghĩ rằng có bất cứ điều gì trong spec đó sẽ. Tuy nhiên, không chắc chắn tại sao bạn cần điều này. Âm thanh như tối ưu hóa sớm. – vocaro
@vocaro: Có, tôi có thể lấy ID nhà cung cấp. Tôi không nghĩ bạn hiểu câu hỏi. – jcoffland
Bạn nói rằng bạn muốn biết ID thiết bị PCI để tránh tranh chấp với một quá trình khác có thể đang sử dụng một ID thiết bị PCI cụ thể. Tôi tự hỏi làm thế nào bạn biết thiết bị PCI nào đang được sử dụng? Tôi đoán bạn không sử dụng OpenCL cho điều đó? – Matt