2012-09-06 27 views
8

Để phát triển CUDA của tôi, tôi đang sử dụng một máy có 16 lõi và 1 GPU GTX 580 với 16 SM. Đối với công việc mà tôi đang làm, tôi dự định khởi chạy 16 luồng chủ (1 trên mỗi lõi) và khởi chạy 1 hạt nhân cho mỗi luồng, mỗi luồng có 1 khối và 1024 luồng. Mục tiêu của tôi là chạy 16 hạt nhân song song với 16 SM. Điều này có khả thi/khả thi không?Nhiều chủ đề khởi chạy các hạt nhân CUDA riêng lẻ

Tôi đã cố gắng đọc càng nhiều càng tốt về ngữ cảnh độc lập, nhưng dường như không có quá nhiều thông tin. Như tôi đã hiểu, mỗi luồng chủ có thể có ngữ cảnh GPU riêng. Nhưng, tôi không chắc liệu các hạt nhân sẽ chạy song song nếu tôi sử dụng các bối cảnh độc lập.

Tôi có thể đọc tất cả dữ liệu từ tất cả 16 luồng máy chủ thành một cấu trúc khổng lồ và chuyển nó vào GPU để khởi chạy một hạt nhân. Tuy nhiên, nó sẽ được sao chép quá nhiều và nó sẽ làm chậm ứng dụng.

+0

Nhiều bối cảnh không thể đồng thời sử dụng một GPU duy nhất, vì vậy không, điều này sẽ không hoạt động. – talonmies

+0

Cảm ơn. Bạn có thể đặt câu trả lời ở trên để tôi có thể chấp nhận nó không? – gmemon

+0

@gmemon, Xem bình luận của tôi dưới đây để tạo và thực hiện nhiều ngữ cảnh trong CUDA 5.5. Bạn đã thực hiện thành công 16 hạt nhân trong 16SM chưa? Giải pháp của bạn cuối cùng là gì. – Tariq

Trả lời

4

Trong khi ứng dụng đa luồng có thể giữ đồng thời nhiều bối cảnh CUDA trên cùng một GPU, những bối cảnh đó không thể thực hiện thao tác đồng thời. Khi hoạt động, mỗi bối cảnh chỉ sử dụng GPU và phải có năng suất trước một ngữ cảnh khác (có thể bao gồm các hoạt động với API hiển thị hoặc trình quản lý hiển thị) có thể có quyền truy cập vào GPU.

Vì vậy, trong một từ, chiến lược này không thể hoạt động với bất kỳ phiên bản hoặc phần cứng CUDA hiện tại nào.

+0

Tôi đang sử dụng CUDA 5.5. Nó có hỗ trợ thực thi đồng thời nhiều bối cảnh CUDA trên một GPU không? – Tariq

+0

Tôi đang tạo hai luồng riêng biệt trên máy chủ và tạo ngữ cảnh CUDA bằng API trình điều khiển. Những bối cảnh này đang thực hiện cùng một lúc trong CUDA 5.5. – Tariq

6

Bạn chỉ có thể có một ngữ cảnh trên GPU tại một thời điểm. Một cách để đạt được loại song song mà bạn yêu cầu là sử dụng các luồng CUDA. Bạn có thể tạo 16 luồng bên trong ngữ cảnh và khởi chạy các memcopies và kernel thành các dòng theo tên. Bạn có thể đọc thêm trong hội thảo trên web nhanh về cách sử dụng luồng tại: http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf. Tham chiếu API đầy đủ nằm trong hướng dẫn sử dụng bộ công cụ CUDA. Sổ tay CUDA 4.2 có sẵn tại http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_Toolkit_Reference_Manual.pdf.

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