Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_CUDA.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆
      1. Опции компилятора nvcc

Nvcc – инструмент для управления всеми этапами компиляции, называемый также драйвером компиляции (CUDA compiler driver). Компиляция при помощи nvcc происходит в несколько этапов. Выбор фаз компиляции производится на основе опций, передаваемых через командную строку и расширений входных файлов, причем на выполнение этих фаз можно влиять при помощи других опций командной строки.

В процессе своей работы nvcc вызывает следующие инструменты:

  • CUDAFE (CUDA Language Front End);

  • NVOPENCC (CUDA Open64 Compiler);

  • PTXAS (PTX Optimizing Assembler);

  • Хостовые компилятор и линковщик (Microsoft Visual C++ для ОС Windows или gcc для ОС Linux).

Компилятор поддерживает следующие расширения файлов:

  • .cu – исходные файлы CUDA, содержащие код для хоста и для устройств;

  • .cup – исходные файлы CUDA после предварительной обработки (preprocessed);

  • .cc, .cxx, .cpp – исходные файлы C++;

  • .gpu – промежуточный файл для GPU;

  • .ptx – файл с промежуточным ассемблерным PTX-кодом;

  • .o, .obj – объектный файл;

  • .a, .lib – библиотечный файл;

  • .res – файл с ресурсами;

  • .so – разделяемый объектный файл.

Nvcc не различает объектные, библиотечные и ресурсные файлы, а сразу пропускает их к линковщику на соответствующей фазе. В отличие от gcc, nvcc при получении на входе файла с незнакомым расширением (т.е. не перечисленном выше) генерирует ошибку.

Nvcc различает 3 варианта опций командной строки: булевы (флаги) – без аргументов, опции с одним аргументом и опции с несколькими аргументами (списки). Аргументы отделяются от названия опции символом равенства либо одним или более пробелами. В некоторых случаях совместимости с компилятором gcc (опции –I, -l, -L) аргумент может не отделяться от названия опции. Несколько аргументов одной опции могут разделяться запятыми, допускается повтор таких опций, возможна также комбинация этих двух вариантов.

Каждая опция имеет длинное и сокращенное имена (см.таб. 1.1 – таб.1.8), которые отличаются количеством дефисов: два для длинного имени и один для короткого. Длинные имена, как правило, используются в сценариях автоматической компиляции, где длина менее важна, чем ценность описания.

Таблица 1.1.

Опции, определяющие фазу компиляции

Длинное имя

Короткое имя

Описание

1

2

3

--cuda

-cuda

Компиляция .cu → .cu.c/.cu.cpp

--cubin

-cubin

Компиляция .cu/.gpu/.ptx → .cubin.

Хостовый код отбрасывается.

--ptc

-ptx

Компиляция .cu/.gpu → .ptx.

Хостовый код отбрасывается.

--gpu

-gpu

Компиляция .cu → .gpu

Хостовый код отбрасывается.

--preprocess

-E

Предварительная обработка .c/.cc/.cpp/.cxx/.cu.

1

2

3

--generate-dependencies

-M

Генерация для одного .c/.cc/.cpp/.cxx/.cu файла зависимостей, который может быть включен в make-файл.

--compile

-c

Компиляция .c/.cc/.cpp/.cxx/.cu → .obj

--link

-link

Поведение по умолчанию: компиляция и линковка всех файлов.

--lib

-lib

Компиляция всех входных файлов в объектные и объединение результатов в один библиотечный файл.

--run

-run

Компиляция, линковка и запуск. Путь к необходимым динамическим библиотекам CUDA берется из файла nvcc.profile.

Таблица 1.2.

Опции, указывающие файлы и пути к файлам

Длинное имя

Короткое имя

Описание

--output-file <file>

-o

Выходной файл. Более одного аргумента допускается только в режиме линковки/архивации.

--pre-incude <file>, …

-include

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

--library <file>, …

-l

Библиотечные файлы. Путь для их поиска указывается опцией '-L'.

--define-macro <def>, …

-D

Определение макросов.

--undefine-macro <def>, …

-U

Отмена уже определенных макросов.

--include-path <path>, …

-I

Пути поиска заголовочных файлов.

--system-include <path>, …

-isystem

Пути поиска системных заголовочных файлов.

--library-path <path>, …

-L

Пути поиска библиотечных файлов.

--output-directory <dir>

-odir

Путь для сохранения выходного файла. Полезна для генерации зависимостей через ‘--generate-dependencies’.

--compiler-bindir <dir>

-ccbin

Путь к хостовому компилятору:

Microsoft Visual Studio cl или gcc.

Таблица 1.3.

Опции для изменения поведения компилятора/линковщика

Длинное имя

Короткое имя

Описание

--profile

-pg

Инструментирование кода для профилировщика gprof (только в ОС Linux).

--debug <level>

-g

Генерация отлаживаемого кода.

--device-debug

-G

Генерация отлаживаемого кода устройства.

--optimize <level>

-O

Генерация оптимизированного кода.

--shared

-shared

Генерация разделяемой библиотеки во время линковки. Если требуются другие опции линковщика, используйте опцию ‘-Xlinker’.

--machine

-m

Выбор 32-битной или 64-битной архитектуры.

Таблица 1.4.

Опции, управляющие вызываемыми nvcc инструментами

Длинное имя

Короткое имя

Описание

--compiler-options <opts>,…

-Xcompiler

Передача опций компилятору/препроцессору.

--linker-options <opts>, …

-Xlinker

Передача опций линковщику.

--cudafe-options <opts>, …

-Xcudafe

Передача опций cudafe.

--opencc-options <opts>, …

-Xopencc

Передача опций nvopencc, обычно для управления оптимизацией. К примеру, ‘‑LIST:source=on’ приводит к включению в ptx-код комментариев с исходным кодом.

--ptxas-options <opts>, …

-Xptxas

Передача опций оптимизирующему PTX-ассемблеру. К примеру, ‘-v’ приводит к выводу статистики генерации кода.

Таблица 1.5.

Опции, управляющие поведением nvcc

Длинное имя

Короткое имя

Описание

--dryrun

-dryrun

Перечислить команды компиляции, генерируемые nvcc, вместо их выполнения.

--verbose

-v

Перечислить команды компиляции, генерируемые nvcc, вместе с выполнением.

--keep

-keep

Сохранить все промежуточные файлы.

--save-temps

-save-temps

То же, что и '—keep'.

--dont-use-profile

-noprof

Не использовать файл настроек nvcc.profile.

--clean-targets

-clean

Вместо каждой фазы компиляции удалить файлы, которые бы остались после нее.

--run-args <arg>, …

-run-args

Используется вместе с опцией '-R’ для передачи аргументов исполняемому файлу.

--input-drive-prefix <prefix>

-idp

В ОС Windows: сконвертировать все аргументы, включающие имена файлов, в родной формат Windows. Это относится к представлению абсолютных путей к файлам в ‘текущей’ среде разработки.

--dependency-drive-prefix <prefix>

-ddp

В ОС Windows: при генерации файлов с зависимостями (опция '-M') все имена файлов конвертируются в такие, которые поддерживаются используемой утилитой make. К примеру, некоторые варианты make не поддерживают символ двоеточия.

--drive-prefix <prefix>

-dp

Задает префикс логического диска для обеих опций: input-drive-prefix и dependency-drive-prefix.

Таблица 1.6.

Опции, управляющие компиляцией CUDA

Длинное имя

Короткое имя

Описание

1

2

3

--device-emulation

-deviceemu

Сгенерировать код для библиотеки эмуляции GPGPU. В релизе CUDA 3.0 режим эмуляции стал считаться устаревшим.

--use_fast_math

-use_fast_math

Использование библиотеки быстрой арифметики.

1

2

3

--ftz <boolean>

-ftz

Управление денормализацией чисел с одинарной точностью (false – поддержка денормализованных чисел, true –обнуление).

--prec-div <boolean>

-prec-div

Управление точностью 32-битного деления (true – для соответствия стандарту IEEE, false – использование аппроксимации).

--prec-sqrt <boolean>

-prec-sqrt

Управление точностью 32-битного квадрат-ного корня (true – для соответствия стандарту IEEE, false – использование аппроксимации).

--entries <entry>, …

-e

В случае компиляции .ptx/.gpu → .cubin: определить функции, являющиеся глобальными точками входа, для которых будет сгенерирован код. По умолчанию код генерируется для всех.

Таблица 1.7.

Опции, управляющие генерацией GPU-кода

Длинное имя

Короткое имя

Описание

1

2

3

--gpu-architecture <gpuarch>

-arch

Задает архитектуру GPU – реальную или виртуальную (PTX) – для всех этапов компиляции вплоть до генерации PTX-кода. Поддерживаются виртуальные архитектуры: compute_10, compute_11, compute_12, compute_13; и реальные: sm_10, sm_11, sm_12, sm_13, которые их реализуют.

--gpu-code <gpuarch>, …

-code

Влияет на генерацию бинарного кода, который задействуется только в случае его совместимости с используемым GPU иначе происходит компиляция встроенного PTX-кода.

Указанная архитектура должна быть совместима с указанной в опции ‘-arch’. Если опция ‘-arch’ указана, то здесь должна быть выбрана виртуальная PTX архитектура.

Если опция ‘-code’ не указана, то берется значение из опции '-arch'.

1

2

3

--generate-code

’‑arch=<arch> ‑code=<code>, …’

-gencode

Позволяет многократно вызывать компилятор nvopencc, генерируя код для нескольких виртуальных архитектур. Аргументы 'arch' и 'code' соответствуют двум предыдущим опциям.

--extern-mode <all|none|real|virtual>

-ext

Определяет, какие образы кода будут скопированы в директорию, указанную в опции 'export-dir'.

Если эта опция и 'intern-mode' не указаны, то все образы кода будут считаться внутренними.

--export-dir <file>

-dir

Указывает директорию или zip-файл, в которые будут скопированы все сгенерированные образы кода. Этот файл будет играть роль репозитория кода, инспектируемого драйвером CUDA во время выполнения программы. В обоих случаях nvcc сохранит структуру директорий для помощи драйверу CUDA при поиске.

Если эта опция не указана, то все внешние образы будут отброшены. Если указано имя несуществующего файла, то будет создана директория с таким именем.

--intern-mode <all|none|real|virtual>

-int

Определяет, какие образы кода будут встроены в выходной (например, исполняемый) файл.

Если эта опция и 'extern-mode' не указаны, то все образы кода будут считаться внутренними.

--maxrregcount <amount>

-maxrregcount

Определяет максимальное число регистров, которые может использовать один поток GPU. Из-за ограниченных ресурсов мультипроцессора GPU слишком большое значение приведет к ограничению на колличество потоков в связке. Однако при недостаточно большом для какого-то вычислительного ядра значении его производительность будет ниже, в том числе за счет использования вместо регистров медленной локальной памяти GPU.

Указанное значение округляется в верхнюю сторону до кратного четырем, вплоть до максимума в 128 регистров.

Если опция не указана, то ограничение не применяется (только физические ограничения).

Таблица 1.8.

Список общих опций

Длинное имя

Короткое имя

Описание

--help

-h

Вывод справочной информации.

--version

-v

Вывод версии nvcc.

--options-file <file>, …

-optf

Использовать опции, сохраненные в указанном файле.

В среде разработки Microsoft Visual Studio опции компилятора nvcc доступны для каждого файла с расширением .cu.(рис. 1.4).

Рис. 1.4. Настройка файла в проекте для компиляции платформой CUDA

Проверить список опций можно в подразделе “Command Line” раздела “CUDA Build Rule”.