Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
1. Основные термины: концепция SIMD, мультипроцессор, устройство (device), хост (host), ядро (kernel). Организация потоков.
Технология CUDA — это программно-аппаратная вычислительная архитектура NVIDIA, основанная на расширении языка Си, которая даёт возможность организации доступа к набору инструкций графического ускорителя и управления его памятью при организации параллельных вычислений. CUDA помогает реализовывать алгоритмы, выполнимые на графических процессорах видеоускорителей GeForce восьмого поколения и старше (серии GeForce 8, GeForce 9, GeForce 200), а также Quadro и Tesla. Вычислительная архитектура CUDA реализована на концепции SIMD - один поток команд и множественный поток данных. То есть одна инструкция позволяет обрабатывать множество данных.
Понятие мультипроцессора. Мультипроцессор - многоядерный SIMD-процессор, позволяющий в каждый определенный момент времени обрабатывать, выполнять на всех ядрах одну инструкцию.
Устройство (device) - видеоадаптер, поддерживающий драйвер CUDA, либо другое специализированное устройство, предназначенное для выполнения инструкций CUDA (например NVidia Tesla)
Будем рассматривать GPU только как логическое устройство, не вдаваясь в подробности реализации, то есть устройство можно представить как набор мультипроцессоров и драйвер CUDA.
Хост (host) - обычная программа в оперативной памяти, использующую CPU и выполняющую управляющие функции по работе с device, то есть та часть программы, которая выполняется на CPU - хост, а на GPU - device.
Организация потоков
Пусть необходимо выполнить некоторую процедуру на N потоках, в CUDA эта процедура называется ядром (kernel). Для CUDA характерна блочно-сеточная архитектура, при этом драйвер CUDA сам распределяет ресурсы устройства между потоками.
Все потоки, выполняющим kernel1, которые объединены блоки, которые объединены в решетку grid1. Каждый блок в свою очередь состоит из потоков. Все индексы потоков двухмерные, в CUDA можно работа с 1-3мерными индексами, все определяется спецификацией решаемой задачи. В CUDA можно использовать одномерный-трехмерные индексы. Индексы представляют собой трехмерные векторы, каждый поток знает индекс потока внутри блока threadIdx: threadIdx.x threadIdx.y и знает индекс блока внутри сетки blockIdx: blockIdx.x blockIdx.y. При запуске программы на device все потоки в grid отличаются только индексами, именно через индексы можно управлять потоками, указывая какая часть данных обрабатывается тем или иным потоком. Код задачи выполняется на мультипроцессоре определенными частями (пулами, warp'ами).
·
Дата публикования: 2015-02-03; Прочитано: 360 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!