Согласно информации на сайте, краткий обзор различий между CUDA и OpenCL. Пожалуйста, указывайте на любые ошибки.
Отступление: Симуляционный тест в Национальной лаборатории Сандия в США показал, что из-за ограничений механизмов хранения и пропускной способности памяти процессоры с 16, 32 или даже 64 ядрами не только не могут повысить производительность суперкомпьютеров, но и привести к значительному снижению эффективности.
Что такое OpenCL?
Это открытый и свободный стандарт для параллельного программирования для общего назначения гетерогенных систем, инициированный Apple и совместно разработанный многими известными производителями отрасли, а также представляет собой унифицированную программную среду. Он удобен для разработчиков программного обеспечения для написания эффективного и легкого кода для высокопроизводительных вычислительных серверов, настольных вычислительных систем и портативных устройств, широко применяется в многоядерных процессорах (CPU), графических процессорах (GPU), архитектурах ячеточного типа и других параллельных процессорах, таких как цифровые сигнальные процессоры (DSP), а также имеет широкие перспективы развития в различных областях, таких как игры, развлечения, научные исследования и медицинская помощь.
Что такое CUDA?
CUDA — это архитектура, основанная на параллельных вычислениях на GPU Nvidia. CUDA в основном включает два аспекта: первый — архитектура набора команд ISA; второй аппаратный вычислительный движок; На самом деле это аппаратное обеспечение и набор инструкций. Другими словами, можно рассматривать CUDA как архитектуру, похожую на X86 или cell, но основанную на GPU, а не на традиционных процессорах.
Что такое OpenCL на самом деле?
OpenCL — это на самом деле совершенно новый API для параллельного программирования гетерогенных систем, и OpenCL может использовать GPU для выполнения параллельных вычислений. OpenGL предназначен для графов, а OpenCL — для параллельных вычислений. В процессе разработки OpenCL техническими платформами являются все GPU NVIDIA, и фактически OpenCL разрабатывается на базе платформ NVIDIA GPU. Кроме того, первая демонстрация OpenCL также работала на видеокартах NVIDIA. По сути, OpenCL — это технологический эквивалент DirectX на платформе Windows. Точнее, это интерфейс API, который соединяет аппаратное и программное обеспечение. В этом отношении он похож на OpenGL, но OpenCL гораздо шире, чем OpenGL, и используется не только для 3D-графики. Если описать это одним предложением, роль OpenCL — раскрыть аппаратный потенциал, вызывая вычислительные ресурсы процессора и GPU, чтобы программа работала быстрее и лучше.
Что такое CUDA на самом деле?
Архитектура CUDA является собственной, специально созданной для вычислительных интерфейсов, и эта аппаратная архитектура, включая наборы инструкций, представляет собой полный набор архитектур, предназначенных для такого рода параллельных и гетерогенных вычислений. Архитектура CUDA поддерживает API, включая OpenCL или DirectX, а CUDA также поддерживает C, C++, Fortran, Java, Python и другие языки.
Какова связь между OpenCL и CUDA?
Отношения между CUDA и OpenCL — это не конфликтные отношения, а инклюзивные отношения. OpenCL — это API, на первом уровне архитектура CUDA — более высокий уровень, будь то язык OpenCL, DX11 или C, могут поддерживаться вычисления на Fortran, DX11. Как разработчики программ, обычно они понимают только эти языки или API и могут использовать несколько языков для разработки собственных программ, независимо от выбранного языка; если они хотят использовать вычислительную мощность GPU, они могут использовать CUDA для программирования на этой архитектуре. Технические различия между OpenCL и CUDA в основном отражаются в методе реализации. CUDA, основанный на языке C, упакован в простой для написания код, поэтому даже исследователи, не знакомые с проектированием микросхем, могут использовать инструменты CUDA для написания практических программ. Хотя OpenCL синтаксически близок к CUDA, он больше акцентирует внимание на базовых операциях, поэтому сложнее, но благодаря этому OpenCL может работать на разных платформах. CUDA — это параллельная вычислительная архитектура, содержащая архитектуру набора команд и соответствующий аппаратный движок. OpenCL — это интерфейс прикладного программирования (API) для параллельных вычислений, а OpenCL — новый путь разработки программ CUDA, дополняющий C для CUDA на архитектуре NVIDIA CUDA. Если хотите получить больше контроля над аппаратным обеспечением, можно использовать OpenCL API для программирования, а если мало знаете об этом API, то также на CUDA C — это два разных способа программирования, у которых есть свои сходства и различия. Но при разработке языков OpenCL и CUDA C в параллельных вычислениях их концепции схожи, эти две программы имеют большое сходство в программах, поэтому портировать программы между собой относительно просто.
Язык CUDA C позиционируется иначе, чем OpenCL, то есть использует разных людей. CUDA C — это язык высокого уровня, которым легко пользоваться непрофессионалы, мало разбирающиеся в аппаратном обеспечении; OpenCL — это аппаратно-ориентированный интерфейс для разработки приложений, который даёт программистам больше контроля над аппаратным обеспечением и будет сложнее начать и разрабатывать. Привычки использования программистов также очень важны: те, кто использует язык C на платформе процессора X86, легко примут язык C на базе GPU CUDA; Люди, привыкшие к разработке графики на OpenGL, будут более дружелюбны к OpenCL, и на его основе будет очень просто разрабатывать вычислительные программы, связанные с графикой и видео.
|