2012-01-23 58 views
10

Tôi biết rằng các mục công việc được nhóm vào các nhóm làm việc và bạn không thể đồng bộ hóa bên ngoài một nhóm làm việc.Các mục công việc OpenCL có được thực hiện song song không?

Điều đó có nghĩa là các mục công việc được thực hiện song song?

Nếu có, có thể/hiệu quả để tạo 1 nhóm làm việc với 128 mục công việc không?

Trả lời

10

Các mục công việc trong một nhóm sẽ được lên lịch cùng nhau và có thể chạy cùng nhau. Điều này tùy thuộc vào phần cứng và/hoặc trình điều khiển để chọn cách thực thi song song. Có nhiều lý do khác nhau cho điều này, nhưng một trong những lý do rất tốt là che giấu độ trễ của bộ nhớ.

Trên thẻ AMD của tôi, các 'đơn vị tính toán' được chia thành 16 đơn vị SIMD 4 rộng. Điều này có nghĩa là 16 mục công việc về mặt kỹ thuật có thể được chạy cùng một lúc trong nhóm. Chúng tôi khuyên bạn nên sử dụng bội số của 64 mục công việc trong một nhóm, để ẩn độ trễ của bộ nhớ. Rõ ràng chúng không thể chạy vào đúng thời điểm. Đây không phải là một vấn đề, bởi vì hầu hết các hạt nhân trong thực tế, bộ nhớ bị ràng buộc, vì vậy bộ lập lịch (phần cứng) sẽ trao đổi các mục công việc đang chờ trên bộ điều khiển bộ nhớ, trong khi các mục 'sẵn sàng' có thời gian tính toán của chúng. Số lượng mục công việc thực tế trong nhóm được thiết lập bởi chương trình máy chủ và bị giới hạn bởi CL_DEVICE_MAX_WORK_GROUP_SIZE. Bạn sẽ cần phải thử nghiệm với kích thước nhóm làm việc tối ưu cho hạt nhân của bạn.

Việc triển khai CPU 'tệ hơn' khi nói đến các mục công việc đồng thời. Chỉ có bao nhiêu mục công việc đang chạy khi bạn có sẵn lõi để chạy chúng. Chúng hoạt động tuần tự hơn trong cpu.

Vì vậy, các mục công việc có chạy cùng một lúc không? Hầu như không bao giờ thực sự.Đây là lý do tại sao chúng ta cần phải sử dụng các rào cản khi chúng ta muốn chắc chắn rằng chúng dừng lại ở một điểm nhất định.

+0

Bạn có chắc chắn rằng chỉ có bao nhiêu mục công việc đang chạy khi bạn có lõi? Theo [trang này] (http://software.intel.com/sites/products/documentation/ioclsdk/2013/OG/Basic_Concepts.htm), các lõi riêng biệt là các đơn vị tính toán, điều đó có nghĩa là một lõi không tương ứng với bất kỳ cách nào để một mục công việc. – HelloGoodbye

+0

Tôi chắc chắn về điều này. Đúng là có thể có nhiều hạng mục công việc 'bay' hơn là có lõi trên cpu - đây thực sự là nhóm công việc. Xét về tính toán đồng thời, lõi cpu chỉ thực hiện một hàng đợi lệnh tại một thời điểm nhất định. Ngay cả trong các ứng dụng không phải là opencl, luồng được giả mạo thông qua chuyển đổi ngữ cảnh, hoặc nó được thực hiện thông qua nhiều phần cứng lõi (và đôi khi với chức năng SIMD giới hạn). – mfa

0

Có, các mục công việc được thực thi song song.

Để nhận số lượng mục công việc tối đa có thể, hãy sử dụng clGetDeviceInfo với CL_DEVICE_MAX_WORK_GROUP_SIZE. Nó phụ thuộc vào phần cứng.

Cho dù hiệu quả hay không chủ yếu phụ thuộc vào tác vụ bạn muốn triển khai. Nếu bạn cần nhiều đồng bộ hóa, có thể OpenCL không phù hợp với nhiệm vụ của bạn. Tôi không thể nói nhiều hơn nữa mà không biết bạn thực sự muốn làm gì.

1

Ý tưởng là chúng có thể được thực thi song song nếu có thể (cho dù chúng thực sự sẽ được thực hiện song song phụ thuộc).

5

Trong mô hình thực thi OpenCL (trừu tượng), có, tất cả các mục công việc đều hoạt động song song và có thể có hàng triệu mục.

Bên trong GPU, tất cả các mục công việc của cùng một nhóm công việc phải được thực hiện trên một "lõi" đơn. Điều này đặt một hạn chế vật lý về số lượng các mục công việc cho mỗi nhóm làm việc (256 hoặc 512 là tối đa, nhưng nó có thể nhỏ hơn đối với các hạt nhân lớn sử dụng rất nhiều thanh ghi). Tất cả các nhóm công việc sau đó được lên lịch trên (thường là 2 đến 16) lõi của GPU. Bạn có thể đồng bộ hóa các chủ đề (các mục công việc) bên trong một nhóm làm việc, vì tất cả chúng đều nằm trong cùng một lõi, nhưng bạn không thể đồng bộ hóa các chủ đề từ các nhóm làm việc khác nhau, vì chúng có thể không được lên lịch cùng một lúc, và có thể được thực hiện trên các lõi khác nhau.

Có, có thể có 128 mục công việc bên trong một nhóm làm việc, trừ khi nó tiêu thụ quá nhiều tài nguyên. Để đạt hiệu suất tối đa, bạn thường muốn có số lượng chủ đề lớn nhất có thể trong một nhóm làm việc (ít nhất 64 yêu cầu để ẩn độ trễ của bộ nhớ, xem Vasily Volkov's presentations về chủ đề này).

0

Các mục công việc trong một nhóm làm việc nhất định thực hiện đồng thời trên các phần tử xử lý của một đơn vị xử lý sigle.

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