Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Параллельные вычисления.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
248.32 Кб
Скачать

Замеры времени на видеокарте.

Cuda Events.

Для измерения времени можно пользоваться событиями cuda. События – это объекты типа сudaEvent_t, используемые для обозначения точки. Каждое событие, привязанное к точке, характеризуется тем, пройдена данная точка или нет. Можно создавать и уничтожать события, привязывать события к местам, узнавать, наступило ли данное событие, ждать наступления события и получать интервал времени между наступлениями двух событий.

Типы памяти cuda.

Чисто физически память видеокарты можно разделить на DRAM и на память, размещенную непосредственно на видеокарте.

Тип памяти

Расположение

Кэш-ся

Доступ

Уровень доступа

Время жизни

Регистры

Мультипроцессор

Нет

R/W

Per-thread

Нить

Локальная

DRAM

Нет

R/W

Per-thread

Нить

Разделяемая

Мультипроцессор

Нет

R/W

Все нити блока

Блок

Глобальная

DRAM

Нет

R/W

Все нити и CPU

Выделяется CPU

Константная

DRAM

Да

R/o

Все нити и CPU

Выделяется CPU

Текстурная

DRAM

Да

R/o

Все нити и CPU

Выделяется CPU

Каждый мультипроцессор содержит 8192 или 16384 32-хбитовых регистров. Имеющиеся регистры распределяются между нитями блока на этапе компиляции. Каждая нить получает в свое монопольное использование некоторое количество регистров, доступных как на чтение, так и на запись. Регистры обладают максимальной скоростью доступа. Если регистров не хватает, то задействуется локальная память. Доступ к локальной памяти характеризуется высокой латентностью (от 400 до 600 тактов). Разделяемая память – быстродействующая. Она выделяется на уровне блоков. Каждый блок получает одно и то же количество этой памяти. Каждый мультипроцессор содержат 16 Кб разделяемой памяти. Эта память обладает небольшой латентностью. Глобальная память – обычная DRAM память, выделяемая специальными функциями на CPU. Латентность высокая. Константная и текстурная память имеют возможность кэширования. Из них можно только читать информацию. Запись в них может осуществляться только ЦП. Общий объем константной памяти ограничен 64 Кб.

Работа с константной памятью.

Выделяется с помощью оператора constant. Все нити сетки могут читать из неё данные. При этом она кэшируется. ЦП имеет доступ к этому виду памяти как на чтение, так и на запись при помощи следующих функций: cudaMemcpyToSymbol (const char *symbol, const void *src, size_t const, size_t offset, enum cudaMemcpyKind kind) - копирование в константную память; cudaMemcpyFromSymbol (void *dst, const char *symbol, size_t count, size_t offset, enum cudaMemcpyKind kind) – копирование из константной памяти; В качестве kind выступает константа копирования.

_ _constant_ _ float constData [256];

float hostData [256];

cudaMemcpyToSymbol (constData, hostData, sizeof(hostData), 0, cudaMemcpyHostToDevice);