2012-01-09 45 views
6

Tôi đang kết nối với cụm GPU từ bên ngoài và tôi không biết cách chọn thiết bị để chạy các chương trình CUDA của mình.Cách chọn thiết bị khi chạy tệp thực thi CUDA?

Tôi biết có hai GPU Tesla trong cụm và tôi muốn chọn một trong số chúng.

Bất kỳ ý tưởng nào? Làm thế nào để bạn chọn thiết bị bạn muốn sử dụng khi có nhiều kết nối với máy tính của bạn?

Trả lời

9

Cách kinh điển để chọn thiết bị trong API thời gian chạy đang sử dụng cudaSetDevice. Điều đó sẽ định cấu hình thời gian chạy để thực hiện thiết lập bối cảnh lười biếng trên thiết bị được chỉ định. Trước CUDA 4.0, cuộc gọi này đã không thực sự thiết lập một bối cảnh, nó chỉ nói với thời gian chạy mà GPU để thử và sử dụng. Kể từ CUDA 4.0, cuộc gọi này sẽ thiết lập ngữ cảnh trên GPU được chỉ định tại thời điểm gọi. Ngoài ra còn có cudaChooseDevice, sẽ chọn giữa các thiết bị có sẵn để tìm thiết bị phù hợp với tiêu chí do người gọi cung cấp.

Bạn có thể liệt kê các GPU sẵn có trên hệ thống với cudaGetDeviceCount và truy xuất thông tin cụ thể của chúng bằng cách sử dụng cudaGetDeviceProperties. Ví dụ về thiết bị SDK cho thấy chi tiết đầy đủ về cách thực hiện điều này.

Bạn có thể cần phải cẩn thận, tuy nhiên, về cách bạn chọn GPU trong hệ thống nhiều GPU, tùy thuộc vào cấu hình máy chủ và trình điều khiển. Trong cả trình điều khiển Linux và Windows TCC, có tồn tại tùy chọn cho GPU được đánh dấu "tính toán exculsive", có nghĩa là trình điều khiển sẽ giới hạn từng GPU tới một ngữ cảnh hoạt động cùng một lúc hoặc tính toán bị cấm, nghĩa là không có chương trình CUDA nào có thể thiết lập ngữ cảnh trên thiết bị đó. Nếu mã của bạn cố thiết lập ngữ cảnh trên thiết bị bị tính toán bị cấm hoặc trên thiết bị độc quyền tính toán đang được sử dụng, kết quả sẽ là lỗi thiết bị không hợp lệ. Trong một hệ thống nhiều GPU, trong đó chính sách là sử dụng tính độc quyền tính toán, cách tiếp cận chính xác không phải là thử và chọn một GPU cụ thể, mà chỉ đơn giản là cho phép thiết lập bối cảnh lười biếng xảy ra một cách ngầm định. Trình điều khiển sẽ tự động chọn một GPU miễn phí để chạy mã của bạn. Bạn có thể kiểm tra trạng thái chế độ tính toán của bất kỳ thiết bị nào bằng cách đọc trường cudaDeviceProp.computeMode bằng cách sử dụng cuộc gọi cudaGetDeviceProperties. Lưu ý rằng bạn được tự do kiểm tra các GPU không khả dụng hoặc bị cấm và truy vấn các thuộc tính của chúng, nhưng bất kỳ hoạt động nào yêu cầu thiết lập ngữ cảnh sẽ không thành công.

Xem tài liệu runtime API trên tất cả các calls

+3

Một giải pháp khác là sử dụng biến môi trường 'CUDA_VISIBLE_DEVICES'. (https://devblogs.nvidia.com/parallelforall/cuda-pro-tip-control-gpu-visibility-cuda_visible_devices/) – Soravux

1

Bạn có thể thiết lập các biến môi trường CUDA_VISIBLE_DEVICES vào một danh sách bằng dấu phẩy của các ID thiết bị để chỉ những thiết bị có thể nhìn thấy một ứng dụng. Sử dụng tính năng này để che dấu các thiết bị hoặc thay đổi thứ tự hiển thị của thiết bị sao cho thời gian chạy CUDA liệt kê chúng theo một thứ tự cụ thể.

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