C++ AMP

C++ AMP

C++ Accelerated Massive Parallelism (сокращенно C++ AMP) — библиотека, использующая DirectX 11, и открытая спецификация, созданные Microsoft для реализации параллельных программ для гибридных систем на языке C++. Система C++AMP позволяет переносить вычисления на GPU (видеоускорители) без внесения большого количества изменений в программы. Код, которые не может запуститься на GPU, например, из-за своей сложности, будет автоматически запущен на центральном процессоре с применением SIMD (SSE) инструкций. Реализация системы от Microsoft (единственная на настоящий момент) включена в Visual Studio 2012 и включает в себя отладчик и профилировщик. Поддержку других платформ и оборудования могли бы реализовать компания Microsoft или другие в будущем.

Для изначального релиза C++ AMP от Microsoft требуется ОС Windows 7 или Windows Server 2008 R2.[1]

В язык добавлена синтаксическая конструкция «restrict(amp)», которая может быть указана для любой функции (в том числе для лямбда-функции), обозначающая что она может быть исполнена на акселераторе C++ AMP. Ключевое слово restrict в данном случае означает, что компилятор должен оценить, подходит ли данная функция для GPU (использует ли она лишь те возможности языка C++, которые могут быть исполнены на большинстве GPU).

Пример использования:

void myFunc() restrict(amp) 
 {
   // Код функции
 }

Microsoft или другие будущие производители систем, совместимых с C++ AMP могли бы добавить другие спецификаторы restrict, в дополнение к «amp».

Остальная часть C++ AMP доступна через заголовочный файл <amp.h> и пространство имен «concurrency». Основные классы C++ AMP: array (контейнер данных для акселератора), array_view (обертка для данных), index (координаты точки в N-мерном декартовом пространстве с целочисленными координатами), extent (N-мерная целочисленная размерность), accelerator (вычислительный блок, например, GPU, на котором будет выделяться память и запускаться вычисление), accelerator_view (вид акселератора).

Также определена глобальная функция parallel_for_each, которая позволяет определить параллельный цикл для C++ AMP.

Пример C++ функции, использующей C++ AMP для суммирования двух двухмерных массивов:

void AddArrays(int n, int m, int * pA, int * pB, int * pSum) 
{
    concurrency::array_view<int,2> a(n, m, pA), b(n, m, pB), sum(n, m, pSum);
    concurrency::parallel_for_each(sum.extent, [=](concurrency::index<2> i) restrict(amp)
    {
        sum[i] = a[i] + b[i];
    });
}

Содержание

См. также

Примечания

  1. C++ AMP One-page summary // MSDN Blogs  (англ.)

Литература

  • Kate Gregory, Ade Miller. C++ Amp: Accelerated Massive Parallelism With Microsoft Visual C++ - Microsoft, 2012 - 326 pages - ISBN 9780735664739
  • István Novák and others. Beginning Windows 8 Application Development. - John Wiley & Sons, 2012 - 624 pages - ISBN 9781118221839. Chapter 13 "Creating windows 8 style application with C++". Section "Using Accelerated Massive Parallelism", pages 486-489
  • Sasha Goldshtein and others. Pro .NET Performance: Optimize Your C# Applications. - Apress, 2012 - 372 pages - ISBN 9781430244585. Chapter 6 "Concurrency and Parallelism". Section "General Purpose GPU Computing", pages 205-214

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "C++ AMP" в других словарях:

  • AMP Energy — Type Energy drink Manufacturer PepsiCo, Inc. Country of origin USA Introduced …   Wikipedia

  • AMP Limited — Тип публичная ком …   Википедия

  • Amp — or AMP may refer to: cience* Adenosine monophosphate, a nucleotide found in RNA; * Ampere, a unit of electrical current; * Amplifier, a device that increases the amplitude of a signal; * Antimicrobial peptides, immune system… …   Wikipedia

  • Amp — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. {{{image}}}   Sigles d une seule lettre   Sigles de deux lettres > Sigles de trois lettres …   Wikipédia en Français

  • AMP-Desaminase — Masse/Länge Primärstruktur 747 / 879 / 767 Aminosäuren …   Deutsch Wikipedia

  • AMP Limited — Création 1849 Siège social   …   Wikipédia en Français

  • AMP (Unternehmen) — AMP Limited Rechtsform Aktiengesellschaft ISIN AU000000AMP6 Gründung 1996 (1849) …   Deutsch Wikipedia

  • Amp Energy 500 — Veranstaltungsort: Talladega Superspeedway Hauptsponsor: Amp Energy Erstes Rennen: 1969 Distanz …   Deutsch Wikipedia

  • AMP Energy NHL Winter Classic — AMP NHL Winter Classic AMP NHL Winter Classic 1 2 3 …   Wikipédia en Français

  • AMP NHL Winter Classic — 1 2 3 …   Wikipédia en Français

  • AMP-aktivierte Proteinkinase — Masse/Länge Primärstruktur 1150 = 550+269+331 Aminosäuren …   Deutsch Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»