Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

CUDA_full / L03_Threads_Memory

.pdf
Скачиваний:
23
Добавлен:
27.03.2015
Размер:
1.11 Mб
Скачать

Вариант 5

При s <= 32 в блоке работает только один варп.

Можно развернуть цикл, избавившись от синхронизации и проверки условия.

for ( int s = blockDim.x / 2; s > 32; s >>= 1 ) { if ( tid < s )

data [tid] += data [tid + s]; __syncthreads ();

}

if ( tid < 32 ) data [tid] += data [tid] += data [tid] += data [tid] += data [tid] += data [tid] +=

}

{ // unroll last iterations data [tid + 32];

data [tid + 16]; data [tid + 8]; data [tid + 4]; data [tid + 2]; data [tid + 1];

Н. Новгород, 2012 г.

Исполнение потоков. Иерархия памяти

61

 

 

Результаты

Вариант алгоритма

Время выполнения

 

(миллисекунды)

 

 

1

19.09

 

 

2

11.91

 

 

3

10.62

 

 

4

9.10

 

 

5

8.67

 

 

Возможна дальнейшая оптимизация: полное разворачивание на этапе компиляции при помощи параметров шаблонов. В примере в SDK данный вариант

реализован.

Н. Новгород, 2012 г.

Исполнение потоков. Иерархия памяти

62

 

 

Материалы

Линев А.В., Боголепов Д.К., Бастраков С.И. «Технологии параллельного программирования для процессоров новых архитектур» / Учебник.

Дополнительная подготовка магистров по программе «Суперкомпьютерные технологии»: http://hpcc.unn.ru/?doc=493

NVIDIA CUDA C Programming Guide v. 4.1.

А.В. Боресков, А.А. Харламов «Основы работы с технологией CUDA» и материалы курса по CUDA в МГУ: https://sites.google.com/site/cudacsmsusu/file-cabinet

Д. Сандерс, Э. Кэндрот «Технология CUDA в примерах: введение в программирование графических процессоров»

(пер. с англ.).

Н. Новгород, 2012 г.

Исполнение потоков. Иерархия памяти

63

 

 

Соседние файлы в папке CUDA_full