2010-06-14 43 views
5

Có thể khởi chạy hai hạt nhân thực hiện nhiệm vụ độc lập, đồng thời không. Ví dụ: nếu tôi có mã Cuda nàyKhởi chạy đồng thời nhiều hạt nhân bằng CUDA cho GPU

// host and device initialization 
....... 
....... 

// launch kernel1 
myMethod1 <<<.... >>> (params); 

// launch kernel2 
myMethod2 <<<.....>>> (params); 

Giả sử rằng các hạt này độc lập, có cơ sở để khởi chạy chúng cùng lúc phân bổ vài lưới/khối cho mỗi khối. CUDA/OpenCL có quy định này không.

+0

Đồng thời, bạn có nghĩa là thực thi của chúng được đồng bộ hóa hoặc chỉ chồng chéo? –

Trả lời

6

Chỉ các thiết bị có khả năng tính toán CUDA 2.0 trở lên (tức là Fermi) mới có thể hỗ trợ nhiều lần thực thi hạt nhân đồng thời. Xem phần 3.2.6.3 của hướng dẫn lập trình CUDA 3.0, trong đó nêu:

Một số thiết bị khả năng tính toán 2.0 có thể thực hiện nhiều hạt nhân đồng thời. Các ứng dụng có thể truy vấn khả năng này bằng cách gọi cudaGetDeviceProperties() và kiểm tra thuộc tính concurrentKernels.

Số lần khởi chạy hạt nhân tối đa mà thiết bị có thể thực thi đồng thời là bốn.

Một hạt nhân từ một ngữ cảnh CUDA không thể thực hiện đồng thời với hạt nhân từ ngữ cảnh CUDA khác.

Hạt nhân sử dụng nhiều họa tiết hoặc số lượng lớn bộ nhớ cục bộ ít hơn có khả năng thực hiện đồng thời với các hạt nhân khác.

6

Bạn sẽ cần SM 2.0 trở lên cho các hạt nhân đồng thời.

Để thực hiện đồng thời, bạn cần phải chỉ định theo cách thủ công rằng không có sự phụ thuộc giữa hai hạt nhân. Điều này là do trình biên dịch không thể xác định rằng một hạt nhân sẽ không sửa đổi dữ liệu đang được sử dụng trong khác, điều này có thể là bằng cách đọc và ghi vào cùng một bộ đệm có vẻ đơn giản, nhưng thực sự khó phát hiện hơn vì có thể có con trỏ bên trong cấu trúc dữ liệu và vân vân.

Để thể hiện sự độc lập, bạn phải khởi chạy hạt nhân trong các luồng khác nhau. Tham số thứ tư trong cú pháp ba chevron xác định luồng, hãy xem Hướng dẫn lập trình hoặc mẫu SDK concurrentKernels.

3

Tương thích CUDA 2.1 = tối đa 16 hạt nhân đồng thời

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