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

CUDA_full / L04_Optimization_Libraries

.pdf
Скачиваний:
60
Добавлен:
27.03.2015
Размер:
540.62 Кб
Скачать

Использование CUBLAS

cublasAlloc(int n, int elemSize, void **devicePtr) – создает объект в пространстве памяти GPU, содержащий массив из n элементов размера elemSize. Указатель на созданный объект размещается в devicePtr (данный указатель не должен впоследствии изменяться в коде, выполняемом на хосте)

cublasFree(const void *devicePtr) – освобождает память,

выделенную на GPU

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

Рекомендации по оптимизации. Использование библиотек CUDA

21

 

 

Использование CUBLAS

cublasSetVector (int n, int elemSize, const void *x, int incx, void *y, int incy) – копирует n элементов вектора x (пространство памяти CPU) в вектор y (пространство памяти GPU)

cublasGetVector (int n, int elemSize, const void *x, int incx, void *y, int incy) – копирует n элементов вектора x (пространство памяти GPU) в вектор y (пространство памяти CPU)

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

Рекомендации по оптимизации. Использование библиотек CUDA

22

 

 

Использование CUBLAS

cublasSetMatrix (int rows, int cols, int elemSize, const void *A, int lda, void *B, int ldb) – копирует rows*cols элементов матрицы A (пространство памяти CPU) в матрицу B (пространство памяти GPU); матрицы хранятся по столбцам, lda – ведущая размерность матрицы A, ldb – ведущая размерность матрицы B

cublasGetMatrix (int rows, int cols, int elemSize, const void *A, int lda, void *B, int ldb) – копирует rows*cols элементов матрицы A (пространство памяти CPU) в матрицу B (пространство памяти GPU); см. cublasSetMatrix

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

Рекомендации по оптимизации. Использование библиотек CUDA

23

 

 

Некоторые функции CUBLAS

void cublasScopy (int n, const float *x, int incx, float *y, int incy) – осуществляет копирование float-вектора x в вектор y, векторы x, y хранятся в глобальной памяти GPU со смещениями incx, incy

float cublasSdot (int n, const float *x, int incx, const float *y, int incy) – вычисляет скалярное произведение floatвекторов x и y длины n, хранящихся в глобальной памяти

GPU со смещениями incx, incy

void cublasSaxpy (int n, float alpha, const float *x, int incx, float *y, int incy) – выполняет операцию y += alpha * x для float-векторов x и y длины n, хранящихся в глобальной памяти GPU со смещениями incx, incy, и float-скаляра alpha

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

Рекомендации по оптимизации. Использование библиотек CUDA

24

 

 

Некоторые функции CUBLAS

void cublasSgemv (char trans, int m, int n, float alpha,

const float *A, int lda, const float *x, int incx, float beta, float *y, int incy) – выполняет операцию y=alpha*op(A)*x + beta*y, где

op(A)=A при trans=‘N’ или ‘n’, op(A)=AT при trans=‘T’, ‘t’, ‘C’ или ‘c’, m – количество строк матрицы A, n – количество столбцов матрицы A, alpha, beta – floatскаляры, A – матрица, записанная по стоблцам, lda – ведущая размерность матрицы A, x, y – float-векторы длины n, хранящихся в глобальной памяти GPU со смещениями incx, incy

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

Рекомендации по оптимизации. Использование библиотек CUDA

25

 

 

Использование CUFFT

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

Рекомендации по оптимизации. Использование библиотек CUDA

26

 

 

FFT

FFT – быстрое преобразование Фурье, быстрый алгоритм выполнения дискретного преобразования Фурье.

Множество оптимизированных реализаций, в том числе от производителей устройств:

FFTW (независимая);

FFT в составе Intel MKL;

CUFFT в составе CUDA Toolkit с версии 1.0;

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

Рекомендации по оптимизации. Использование библиотек CUDA

27

 

 

Функциональность CUFFT

1D, 2D, 3D преобразования вещественных и комплексных данных с плавающей запятой одинарной и двойной точности.

Возможность параллельного выполнения нескольких преобразований.

In-place, out-of-place преобразования.

Требования на длину входа в виде максимального значения:

8 млн для 1D;

16384 по каждой размерности для 2D и 3D.

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

Рекомендации по оптимизации. Использование библиотек CUDA

28

 

 

Использование CUFFT

Заголовочный файл cufft.h.

Библиотека cufft.lib.

Работа с CUFFT API на стороне хоста.

Все функции CUFFT API возвращают cufftResult.

Данные и вычисления на GPU.

Схема использования во многом напоминает FFTW.

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

Рекомендации по оптимизации. Использование библиотек CUDA

29

 

 

Типы данных и типы преобразований

Используются следующие типы данных:

cufftReal = float (сокращенно R);

cufftDoubleReal = double (сокращенно D);

cufftComplex = float2 (сокращенно C);

cufftDoubleComplex = double2 (сокращенно Z).

Поддерживаются следующие типы преобразований:

CUFFT_R2C, CUFFT_C2R, CUFFT_C2C, CUFFT_D2Z, CUFFT_Z2D, CUFFT_Z2Z.

Направление преобразования определяется макросами

CUFFT_FORWARD и CUFFT_INVERSE.

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

Рекомендации по оптимизации. Использование библиотек CUDA

30

 

 

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