Мой компьютер имеет GeForce GTX 960M, который, как утверждает NVIDIA, имеет 640 ядер CUDA. Однако, когда я запускаю clGetDeviceInfo, чтобы узнать количество вычислительных устройств на моем компьютере, он выводит 5 (см. Рисунок ниже). Похоже, что ядра CUDA несколько отличаются от того, что OpenCL рассматривает как вычислительные устройства? Или, может быть, группа ядер CUDA образует вычислительный блок OpenCL? Вы можете мне это объяснить?Какова связь между ядрами CUDA NVIDIA и процессорами OpenCL?
ответ
Какова связь между ядрами CUDA графических процессоров NVIDIA и OpenCL вычислительных блоков?
Ваш GTX 960m представляет собой устройство Максвелла с 5 Streaming Мультипроцессоры, каждый из которых имеет 128 ядер CUDA, в общей сложности 640 CUDA cores.
Сетевой процессор NVIDIA is equivalent to an OpenCL Compute Unit. Ранее связанный ответ также предоставит вам полезную информацию, которая может помочь в вопросе определения размера ядра в комментариях.
Архитектура CUDA близка к архитектуре OpenCL.
Устройство CUDA построено вокруг масштабируемого массива многопоточных потоковых многопроцессоров (SMs). Многопроцессор соответствует модулю вычисления OpenCL.
Многопроцессор выполняет поток CUDA для каждого рабочего элемента OpenCL и блок потока для каждой рабочей группы OpenCL. Ядро выполняется над OpenCLNDRange сеткой блоков потоков. Как показано на рисунке 2-1, каждый из блоков потоков, которые выполняют ядро, поэтому однозначно идентифицируется идентификатором ее рабочей группы, а каждый поток - его глобальным идентификатором или комбинацией его локального идентификатора и идентификатора рабочей группы.
Скопировано из Руководства по программированию OpenCL для CUDA Архитектура http://www.nvidia.com/content/cudazone/download/OpenCL/NVIDIA_OpenCL_ProgrammingGuide.pdf
- 1. OpenCL: синхронизация между ядрами
- 2. OpenCL против производительности CUDA на устройстве Nvidia
- 3. Путаница над вычислительными единицами и ожидаемыми ядрами на nvidia GPU
- 4. Передача данных между графическими процессорами в OpenCL
- 5. Pointer Array, разделяемый между ядрами OpenCL
- 6. Как уменьшить дублирование кода между ядрами OpenCL?
- 7. Связь между двумя процессорами (параллельное программирование)
- 8. Приложение OpenCL с 3 различными ядрами
- 9. Какова связь между байесовскими и нейронными сетями?
- 10. Как разделить работу над несколькими ядрами/процессорами
- 11. OpenCL AMD против производительности NVIDIA
- 12. Путаница на CUDA/openCL и C++ AMP
- 13. Обертка cuda для выполнения openCL
- 14. Эксклюзивный вычислительный режим с OpenCL + NVidia
- 15. Поддерживает ли Nvidia графические процессоры, подобные структурам?
- 16. NVIDIA OpenCL on Trusty or Mint 17
- 17. Связь между ядрами и числом потоков, которые я могу создать
- 18. Является ли TLB разделяемым между несколькими ядрами?
- 19. Узнать Nvidia CUDA
- 20. NVIDIA Cuda if-statement
- 21. OpenCL 2.0 на графических картах nVIDIA
- 22. nVidia Tesla vs nViadia CUDA?
- 23. Скомпилировать OpenCL на Mingw Nvidia SDK
- 24. Запуск программы OpenCL на аппаратном обеспечении NVIDIA
- 25. OpenCL FFT на обоих устройствах Nvidia и AMD?
- 26. Отладка OpenCL с NVIDIA Nsight 2.1 и Visual Studio 2010
- 27. Код OpenCL для работы с AMD/Nvidia
- 28. Установить OpenCL на Ubuntu 14.04 и Nvidia
- 29. Какова связь между ARM и Android?
- 30. Какова связь между «кучей» и «кучей»?
Там в таблице, отображающей OpenCL <-> CUDA Лингво плавающей вокруг Интернета. То, что OpenCL вызывает вычислительный блок, - это потоковый многопроцессор CUDA. CUDA «ядра» - это, по существу, ALU/FPU. GTX 960M имеет 5 SM с 128 ядрами, всего 640. –
@Angy Lettuce Спасибо за ответ. Итак, если я правильно понимаю это, каждая рабочая группа будет выполнена в вычислительном устройстве; поэтому, учитывая максимальный размер рабочей группы 1024, лучший параллелизм, который я могу сделать в этом графическом процессоре, заключается в том, чтобы выполнить 1024 * 5 = 5120 рабочих элементов. Это правильно? – mfaieghi