Một phần của sự nhầm lẫn ở đây tôi nghĩ đến thuật ngữ. Những gì mọi người GPU thường gọi là lõi, không thực sự, và những gì GPU người thường gọi chủ đề chỉ trong một ý nghĩa nhất định.
lõi Một lõi, về GPU tiếp thị có thể tham khảo một cái gì đó giống như một lõi CPU, hoặc nó có thể tham khảo một làn đường duy nhất của một đơn vị SIMD - có hiệu lực một lõi x86 CPU duy nhất sẽ được bốn lõi của việc này loại đơn giản hơn. Đây là lý do tại sao số lượng lõi GPU có thể rất cao. Nó không thực sự là một so sánh công bằng, bạn phải chia cho 16, 32 hoặc một số tương tự để có được một số lõi so sánh trực tiếp hơn.
Các mục công việc Mỗi mục công việc trong OpenCL là một luồng về luồng điều khiển và mô hình bộ nhớ của nó. Phần cứng có thể chạy nhiều mục công việc trên một chuỗi, và bạn có thể dễ dàng hình dung điều này bằng cách tưởng tượng bốn mục công việc OpenCL hoạt động trên các làn riêng biệt của một vector SSE. Nó sẽ chỉ đơn giản là trình biên dịch trickery mà đạt được điều đó, và trên GPU nó có xu hướng là một hỗn hợp của trình biên dịch trickery và hỗ trợ phần cứng. OpenCL 2.0 thực sự phơi bày khái niệm chuỗi phần cứng cơ bản này thông qua các nhóm con, vì vậy có một cấp bậc phân cấp khác để xử lý.
làm việc nhóm Mỗi công việc nhóm chứa một tập hợp các công việc mục mà phải có khả năng thực hiện tiến bộ trong sự hiện diện của các rào cản. Trong thực tế, điều này có nghĩa là nó là một tập hợp, tất cả trạng thái có thể tồn tại cùng một lúc, như vậy khi một nguyên thủy đồng bộ gặp phải có rất ít chi phí chuyển đổi giữa chúng và có đảm bảo rằng công tắc có thể thực hiện được.
Một nhóm làm việc phải ánh xạ tới một đơn vị tính toán, thực tế có nghĩa là toàn bộ nhóm làm việc phù hợp với một thực thể duy nhất mà mọi người gọi là lõi - CUDA sẽ gọi nó là bộ xử lý đa (tùy thuộc vào thế hệ), AMD là một đơn vị tính toán và những người khác có tên gọi khác nhau. Địa phương này thực hiện dẫn đến đồng bộ hóa hiệu quả hơn, nhưng nó cũng có nghĩa là tập hợp các mục công việc có thể có quyền truy cập vào các đơn vị bộ nhớ được xây dựng cục bộ. Họ dự kiến sẽ giao tiếp thường xuyên, hoặc rào cản sẽ không được sử dụng, và để làm cho giao tiếp này hiệu quả có thể có cache địa phương (tương tự như CPU L1) hoặc bộ nhớ scratchpad (bộ nhớ cục bộ trong OpenCL).
Miễn là rào cản được sử dụng, nhóm công việc có thể đồng bộ hóa nội bộ, giữa các mục công việc, sử dụng bộ nhớ cục bộ hoặc bằng cách sử dụng bộ nhớ chung. Các nhóm làm việc không thể đồng bộ hóa với nhau và tiêu chuẩn không đảm bảo về tiến độ tiến bộ của các nhóm công việc liên quan đến nhau, điều này làm cho việc xây dựng khóa cầm tay và các nguyên tắc đồng bộ hóa một cách hiệu quả là không thể.
Rất nhiều điều này là do lịch sử thay vì thiết kế. Phần cứng GPU từ lâu đã được thiết kế để xây dựng các chủ đề vectơ và gán chúng cho các đơn vị thực hiện theo cách tối ưu xử lý hình tam giác. OpenCL rơi ra khỏi generalising rằng phần cứng là hữu ích cho những thứ khác, nhưng không generalising nó rất nhiều mà nó trở nên không hiệu quả để thực hiện.