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) 
 {
   // Код функції
 }

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]