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];
    });
}




См. также

Напишите отзыв о статье "C++ AMP"

Примечания

  1. [blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-29-86-29/cppAMPv6_2D00_gen.pdf 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 978-0-7356-6473-9
  • István Novák and others. Beginning Windows 8 Application Development. — John Wiley & Sons, 2012—624 pages — ISBN 978-1-118-22183-9. Chapter 13 «Creating windows 8 style application with C++». Section [books.google.ru/books?id=sgETRqi5l7UC&pg=PA486 «Using Accelerated Massive Parallelism»], pages 486—489
  • Sasha Goldshtein and others. Pro .NET Performance: Optimize Your C# Applications. — Apress, 2012—372 pages — ISBN 978-1-4302-4458-5. Chapter 6 «Concurrency and Parallelism». Section [books.google.ru/books?id=fhpYTbos8OkC&pg=PA205 «General Purpose GPU Computing»], pages 205—214

Ссылки

  • [download.microsoft.com/download/4/0/E/40EA02D8-23A7-4BD2-AD3A-0BFFFB640F28/CppAMPLanguageAndProgrammingModel.pdf C++ AMP : Language and Programming Model] — Version 1.0 : August 2012  (англ.)
  • [blogs.msdn.com/b/nativeconcurrency/ Parallel Programming in Native Code — C++ AMP Team Blog]  (англ.)

Отрывок, характеризующий C++ AMP



Наташе было 16 лет, и был 1809 год, тот самый, до которого она четыре года тому назад по пальцам считала с Борисом после того, как она с ним поцеловалась. С тех пор она ни разу не видала Бориса. Перед Соней и с матерью, когда разговор заходил о Борисе, она совершенно свободно говорила, как о деле решенном, что всё, что было прежде, – было ребячество, про которое не стоило и говорить, и которое давно было забыто. Но в самой тайной глубине ее души, вопрос о том, было ли обязательство к Борису шуткой или важным, связывающим обещанием, мучил ее.
С самых тех пор, как Борис в 1805 году из Москвы уехал в армию, он не видался с Ростовыми. Несколько раз он бывал в Москве, проезжал недалеко от Отрадного, но ни разу не был у Ростовых.
Наташе приходило иногда к голову, что он не хотел видеть ее, и эти догадки ее подтверждались тем грустным тоном, которым говаривали о нем старшие:
– В нынешнем веке не помнят старых друзей, – говорила графиня вслед за упоминанием о Борисе.
Анна Михайловна, в последнее время реже бывавшая у Ростовых, тоже держала себя как то особенно достойно, и всякий раз восторженно и благодарно говорила о достоинствах своего сына и о блестящей карьере, на которой он находился. Когда Ростовы приехали в Петербург, Борис приехал к ним с визитом.
Он ехал к ним не без волнения. Воспоминание о Наташе было самым поэтическим воспоминанием Бориса. Но вместе с тем он ехал с твердым намерением ясно дать почувствовать и ей, и родным ее, что детские отношения между ним и Наташей не могут быть обязательством ни для нее, ни для него. У него было блестящее положение в обществе, благодаря интимности с графиней Безуховой, блестящее положение на службе, благодаря покровительству важного лица, доверием которого он вполне пользовался, и у него были зарождающиеся планы женитьбы на одной из самых богатых невест Петербурга, которые очень легко могли осуществиться. Когда Борис вошел в гостиную Ростовых, Наташа была в своей комнате. Узнав о его приезде, она раскрасневшись почти вбежала в гостиную, сияя более чем ласковой улыбкой.
Борис помнил ту Наташу в коротеньком платье, с черными, блестящими из под локон глазами и с отчаянным, детским смехом, которую он знал 4 года тому назад, и потому, когда вошла совсем другая Наташа, он смутился, и лицо его выразило восторженное удивление. Это выражение его лица обрадовало Наташу.
– Что, узнаешь свою маленькую приятельницу шалунью? – сказала графиня. Борис поцеловал руку Наташи и сказал, что он удивлен происшедшей в ней переменой.
– Как вы похорошели!
«Еще бы!», отвечали смеющиеся глаза Наташи.
– А папа постарел? – спросила она. Наташа села и, не вступая в разговор Бориса с графиней, молча рассматривала своего детского жениха до малейших подробностей. Он чувствовал на себе тяжесть этого упорного, ласкового взгляда и изредка взглядывал на нее.