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.
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
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