C++ AMP
C++ Accelerated Massive Parallelism (скорочено C++ AMP) - бібліотека реалізована на основі DirectX 11 з відкритою специфікацією від компанії Microsoft для реалізації паралельних програм для гетерогенних систем на мові програмування C++. Для роботи програм написаних з використанням цієї бібліотеки необхідна операційної системи Windows 7 або Windows Server 2008 R2 або вищі, з встановленим DirectX 11, якщо у системі немає графічного адаптера на якому може бути запущений код то він буде запущений за допомогою центрального процесору і використовувати SSE інструкції. На даний час розробку програм можна робити лише за допомогою середовища Microsoft Visual Studio 2012,
Розробка
Для того щоб почати розробляти програми використовуючи дану бібліотеку першочергово слід підключити хідер файл: <amp.h>
. Даний файл містить опис усіх необхідних функцій та типів. Окрім хідер файлу ще треба використовувати простір імен concurrency
.
Класи C++ AMP:
- accelerator: обчислювальний блок на котрому буде виділятися пам'ять і будуть робитися обрахунки.
- accelerator_view: тип accelerator.
- extent: N-вимірна цілочисельна розмірність даних.
- index: індекс для роботи у N-вимірному просторі.
- array: контейнер даних для акселератора.
- array_view: обґортка над даними, дозволяє створювати багатомірні обгортки на даними, масивами або векторами
Ключове слово restrict
Дане ключове слово, або умова, вказує тип пристрою на якому планується запуск коду, дана умова може бути додана до функцій та лямбда-функцій. На даний час існує лише два вида умов:
- restrict(amp): дана умова вказує що функція може бути виконана на акселераторі C++ AMP. Використання умови «restrict(amp)» означає, що компілятор має оцінити можливість виконання даної функції на GPU(перевірити чи не використовуються заборонені інструкції).
- restrict(cpu): дана умова вказує що функція може використовувати усі особливості С++, якщо біля функції не стоїть жодної умови то за замовчуванням використовується умова restrict(cpu).
Приклад використання умови restrict(amp):
void myFunc() restrict(amp)
{
// Код функції
}
Посилання
- C++ AMP : Language and Programming Model — Version 1.0 : August 2012 (англ.)
- Parallel Programming in Native Code — C++ AMP Team Blog MSDN (англ.)
- Get started with C++ AMP Video (англ.)
- Умова restrict (C++ AMP) (англ.)