Компилятор NVIDIA (nvcc) может перестать работать на соединяющемся этапе из-за несоответствия в максимальном количестве регистров, вычисленных при компиляции. Сгенерированное ядро CUDA скомпилировано с макс. количеством регистра, решенным NVCC. Ядро может вызвать функцию устройства в различном файле CUDA. Функция устройства может быть скомпилирована, чтобы использовать большее число регистров, превышающих макс. количество регистра ядра.
Можно столкнуться с сообщением об ошибке со следующим шаблоном:
ошибка nvlink: функция записи 'xxx' с макс. regcount n вызывает функцию 'yyy' с regcount m.
nvlink error : entry function 'xx' with max regcount of n calls function 'yyy' with regcount of m.
где 'xxx'
и 'yyy'
искаженные имена функций, n
и m
целые числа и m
больше, чем n
.
Используйте '-maxrregcount n'
флаг компилятора NVCC, чтобы задать максимальное количество регистров. Используйте опцию флагов компилятора в параметрах конфигурации графического процессора кода, чтобы передать флаги компилятора NVCC. Например,
cfg = coder.gpuConfig;
cfg.GpuConfig.compilerFlags = '-maxrregcount n';
где n является самым маленьким целым числом количества регистра в сообщении об ошибке, выданном nvlink
.