2011-12-12 47 views
19

Tôi đọc có thể sử dụng khởi chạy hạt nhân để đồng bộ hóa các khối khác nhau, nếu tôi muốn tất cả các khối hoàn thành thao tác 1 trước khi chúng hoạt động 2, tôi nên đặt hoạt động 1 trong một hạt nhân và hoạt động 2 trong hạt nhân khác. Bằng cách này, tôi có thể đạt được sự đồng bộ hóa toàn cầu giữa các khối. Tuy nhiên, hướng dẫn lập trình cuda c đề cập đến các cuộc gọi hạt nhân là không đồng bộ. CPU không đợi cuộc gọi hạt nhân đầu tiên kết thúc và do đó, CPU cũng có thể gọi hạt nhân thứ hai trước khi 1st hoàn thành. Tuy nhiên, nếu điều này là đúng, thì chúng ta không thể sử dụng các khởi chạy hạt nhân để đồng bộ hóa các khối. Vui lòng cho tôi biết nơi tôi đang gặp sự cốCác cuộc gọi hạt nhân cuda đồng bộ hoặc không đồng bộ

Trả lời

28

Gọi hạt nhân không đồng bộ từ quan điểm của CPU, vì vậy nếu bạn gọi 2 nhân liên tiếp, lần thứ hai sẽ được gọi mà không cần chờ kết thúc đầu tiên. Nó chỉ có nghĩa là điều khiển trở lại CPU ngay lập tức. Ở bên GPU, nếu bạn chưa chỉ định các luồng khác nhau để thực thi hạt nhân, chúng sẽ được thực hiện theo thứ tự chúng được gọi (nếu bạn không chỉ định luồng, cả hai đều đi tới luồng mặc định và được thực thi). Quay lại đầu trang serially). Chỉ sau khi hạt nhân đầu tiên kết thúc, hạt nhân thứ hai sẽ thực hiện.

Hành vi này hợp lệ đối với các thiết bị có khả năng tính toán 2.x hỗ trợ thực thi hạt nhân đồng thời. Trên các thiết bị khác mặc dù các cuộc gọi hạt nhân vẫn không đồng bộ, việc thực hiện hạt nhân luôn luôn tuần tự.

Kiểm tra hướng dẫn lập trình CUDA C trên phần 3.2.5 mà mọi lập trình viên CUDA nên đọc.

0

Thực thi hạt nhân đồng thời được hỗ trợ kể từ phiên bản 2.0 phiên bản CUDA.

Ngoài ra, việc trả lại mã CPU có thể được thực hiện sớm hơn tất cả hạt nhân dọc đã hoạt động.

Trong trường hợp này, bạn có thể tự cung cấp đồng bộ hóa.

2

Câu trả lời được chấp nhận không phải lúc nào cũng chính xác.

Trong hầu hết các trường hợp, khởi chạy hạt nhân không đồng bộ. Nhưng trong trường hợp sau, nó là đồng bộ. Và chúng dễ bị mọi người bỏ qua.

  • biến môi trường CUDA_LAUNCH_BLOCKING tương đương với 1.
  • sử dụng một hồ sơ (nvprof), mà không tạo điều kiện cho hạt nhân đồng thời profiling
  • memcpy có liên quan đến bộ nhớ máy chủ mà không phải là trang bị khóa.

Các lập trình viên có thể vô hiệu hóa toàn cầu asynchronicity của hạt nhân ra mắt cho tất cả các ứng dụng CUDA chạy trên một hệ thống bằng cách thiết lập các biến môi trường CUDA_LAUNCH_BLOCKING để 1. Tính năng này được cung cấp cho chỉ gỡ lỗi các mục đích và không nên được sử dụng như một cách để làm cho phần mềm sản xuất chạy đáng tin cậy.

Khởi chạy hạt nhân là đồng bộ nếu bộ đếm phần cứng được thu thập thông qua trình lược tả (Nsight, Visual Profiler) trừ khi đồng bộ hóa hồ sơ hạt nhân được bật. Bản sao bộ nhớ không đồng bộ cũng sẽ đồng bộ nếu chúng liên quan đến bộ nhớ máy chủ không bị khóa trang.

Từ hướng dẫn lập trình NVIDIA CUDA (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#concurrent-execution-host-device).

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