Архитектура CUDA -sm_11 проблема компиляции в NSight

В качестве моего графического устройства Quadro FX 3700 не поддерживает arch> sm_11. Я не смог использовать перемещаемый код устройства (RDC). Поэтому я объединил все необходимые утилиты в один большой файл (скажи x.cu).
Дать обзор x.cu он содержит 2 класса с 5 функциями-членами в каждом, 20 функций устройства, 1 глобальное ядро, 1 функцию вызова ядра.

Теперь, когда я пытаюсь скомпилировать через Nsight, он просто показывает Построить% как 3.
Когда я пытаюсь скомпилировать с помощью

nvcc x.cu -o output -I"."

Он показывает следующие сообщения и компилируется через долгое время,

/tmp/tmpxft_0000236a_00000000-9_Kernel.cpp3.i(0): Warning: Olimit was exceeded on function _Z18optimalOrderKernelPdP18PrepositioningCUDAdi; will not perform function-scope optimization.
To still perform function-scope optimization, use -OPT:Olimit=0 (no limit) or -OPT:Olimit=45022
/tmp/tmpxft_0000236a_00000000-9_Kernel.cpp3.i(0): Warning: To override Olimit for all functions in file, use -OPT:Olimit=45022
(Compiler may run out of memory or run very slowly for large Olimit values)

куда optimalOrderKernel это глобальное ядро. Поскольку компиляция не должна занимать много времени. Я хочу понять причину этого сообщения, особенно Olimit.

2

Решение

Olimit довольно ясно, я думаю. Это предел, который компилятор накладывает на количество усилий, которые он потратит на оптимизацию кода.

Большинство кодов компилируется просто отлично, используя nvcc, Тем не менее, ни один компилятор не является идеальным, и некоторые, казалось бы, безобидные коды могут заставить компилятор тратить много времени на процесс оптимизации, который обычно был бы быстрым.

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

Поскольку существует случай, когда компилятор проводит непропорционально много времени на определенных этапах оптимизации, Olimit предоставляет удобный сторожевой таймер, так что у вас есть представление о том, почему это занимает так много времени. Кроме того, Olimit действует как сторожевой таймер в процессе оптимизации, который занимает слишком много времени. Когда оно превышено, определенные шаги по оптимизации отменяются, и вместо этого генерируется «менее оптимизированная» версия вашего кода.

Я думаю, что сообщения компилятора, которые вы получили, совершенно ясно о том, как изменить Olimit в зависимости от ваших намерений. Вы можете переопределить его, чтобы увеличить период наблюдения, или полностью отключить его (установив его на ноль). В этом случае процесс компиляции может занять произвольно длительный период времени и / или исчерпать память, как указывают сообщения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]