Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_CUDA.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.04 Mб
Скачать
    1. Среда разработки nvidia Parallel Nsight

Продукт Parallel Nsight (кодовое имя Nexus) является первой попыткой разработки единого инструмента, специализированного под массивно-параллельные вычисления, который был бы интегрирован с Microsoft Visual Studio, самой популярной средой разработки. Этот мощный плагин предназначен для гетерогенных систем и добавляет возможность отладки, профилирования и анализа GPU-кода с использованием стандартных средств. Он поддерживает практически все распространенные программные GPGPU-платформы: CUDA C, OpenCL, DirectCompute, Direct3D и OpenGL.

Продукт включает в себя следующие три основных инструмента.

Parallel Nsight Debugger – позволяет отлаживать код на CUDA C/C++ и DirectCompute прямо на аппаратном GPU, что значительно ускоряет отладку и показывает реальную точность вычислений. Работоспособность служебных окон Visual Studio (Locals, Watches, Memory, Breakpoints) сохранена. Для разработки, связанной с трехмерной графикой, имеется аналогичная поддержка всех видов HLSL-шейдеров (вершинных, пиксельных, геометрических и тесселяционных).

Parallel Nsight Analyzer (только в платной профессиональной версии) позволяет локализовать узкие места в производительности через наблюдение событий, охватывающих систему CPU+GPU целиком. Поддерживаются платформы CUDA C/C++, OpenCL, DirectCompute.

Parallel Nsight Graphics Inspector – позволяет в реальном времени обрабатывать уже отрендеренные при помощи Direct3D кадры. Функция Frame Profiler помогает автоматически обнаруживать узкие места и выдает информацию о производительности на уровне отдельных вызовов DirectX. Функция Pixel History показывает все операции, касающиеся заданного пикселя.

    1. Подключаемые библиотеки

      1. Библиотека cublas

CUBLAS – это реализация BLAS (Basic Linear Algebra Subprograms), подпрограмм для базовых операций линейной алгебры, на основе интерфейса времени выполнения CUDA. Она позволяет быстро получить ускорение за счет использования GPU в имеющихся программах и не требует явного программирования драйвера CUDA. Данная версия библиотеки прикрепляется к одному GPU и не обеспечивает автоматическое распараллеливание на несколько GPU.

Простая модель работы с этой библиотекой включает создание объектов в памяти GPU для хранения матриц и векторов, их заполнение, вызов последовательности из функций CUBLAS и отправку данных обратно на хост. Библиотека CUBLAS предоставляет вспомогательные функции для всех этих операций.

Для максимальной совместимости с существующей базой кода на языке Фортран используется хранение матриц, при котором первый индекс означает номер столбца (column-major order), а нумерация индексов начинается с единицы. Так как в языках программирования C/C++ первый индекс означает номер строки (row-major order), то требуется дополнительное преобразование индексов посредством макросов или встраиваемых (inline) функций для реализации матриц на основе одномерных массивов. Самый простой перевод кода с языка Фортран на язык Си при сохранении нумерации индексов с единицы возможен при помощи следующего макроса:

#define IDX2F(i,j,ld) ((((j)-1)*(ld))+((i)-1))

где i – номер строки, j – номер столбца, ld (leading dimension) – размер матрицы по ведущему измерению, т.е. в случае, когда первый индекс означает номер столбца, здесь необходимо указать число строк матрицы. Если же код изначально написан на C/C++ и хочется сохранить нумерацию индексов с нуля, то можно использовать другой макрос:

#define IDX2C(i,j,ld) (((j)*(ld))+(i))

Небольшие примеры на Фортране и C, демонстрирующие эти особенности, приводятся в руководстве по библиотеке CUBLAS.

Поскольку основные функции CUBLAS не возвращают прямо код ошибки из-за совместимости с существующими библиотеками BLAS, для получения последней ошибки имеется отдельная функция.

Интерфейс библиотеки CUBLAS доступен через заголовочный файл cublas.h. Соответствующая динамическая библиотека на ОС Windows называется cublas.dll (cublasemu.dll для режима эмуляции устройства).

Функции библиотеки CUBLAS разделены на следующие группы:

  1. Вспомогательные функции (инициализация и завершение работы, получение ошибки, выделение и освобождение памяти на GPU, чтение и запись векторов и матриц).

  2. Функции BLAS1 – скалярные, векторные и вектор-векторные операции. Имеются варианты для вещественных и комплексных чисел одинарной и двойной точности.

  3. Функции BLAS2 для плавающей арифметики одинарной точности – операции матрица-вектор.

  4. Функции BLAS2 для плавающей арифметики двойной точности.

  5. Функции BLAS3 – операции матрица-матрица.

  6. Интерфейс для языка Фортран в двух формах:

  • fortran_thunking.c – переключающая (thunking) обертка;

  • fortran.c – прямая обертка.