типи пам'яті

Таблиця 3.1: Типи пам'яті

Синхронізація

Функція __syncthreads () забезпечує синхронізацію потоків в блоці, яка буде чекати до тих пір, поки всі запущені потоки відпрацюють до цієї точки. Функція необхідна для даних оброблюваних одним потоком, потім будуть використовуватися іншими потоками.

__syncthreads () дозволяє встановлювати точку синхронізації як бар'єр, і до того моменту як всі нитки блоку не закінчать виконання всіх попередніх інструкцій, жоден наступний код не буде виконуватися. Її не рекомендується використовувати всередині умов.

Також можна використовувати event'и для синхронізації на CPU.

Для відстеження виконання коду GPU в CUDA використовуються event'и. Для роботи з ними служать наступні функції:

cudaError_t cudaEventCreate (cudaEvent_t * event);

Функція служить для створення event'а.

cudaError_t cudaEventRecord (cudaEvent_t event. CUstream stream);

Функція cudaEventRecord використовується для завдання місця, проходження якого повинен сигналізувати даний event. Якщо параметр stream не дорівнює нулю, то відстежується тільки завершення виконання всіх операцій в даному потоці. Треба зауважити, що цей запит є асинхронним - він фактично тільки позначає місце в потоці команд, проходження якого потім буде запитуватися.

cudaError_t cudaEventQuery (cudaEvent_t event);

Функція cudaEventQuery виконує миттєву перевірку "проходження" даного EVENTа - управління з неї відразу ж повертається. У разі, якщо всі операції, що передують даному event'у були закінчені, то повертається cudaSuccess. інакше повертається значення
cudaErrorNotReady.

cudaError_t cudaEventSynchronize (cudaEvent_t event);

Явна синхронізація, тобто очікування поки всі операції для даного event'а не будуть завершені, забезпечується цією командою.

cudaError_t cudaEventElapsedTime (float * time. cudaEvent_t startEvent. cudaEvent_t stopEvent);

За допомогою функції cudaEventElapsedTime можна дізнатися час в мілісекундах (з точністю до половини мікросекунди), що минув між даними event'амі (між моментами, коли кожен з цих event'ов був "записаний").

cudaError_t cudaEventDestroy (cudaEvent_t event);

Функція виконує для видалення event'а.

Схожі статті