Как я могу отключить предупреждение ptxas о неопределенном размере стека?

При компиляции кода устройства CUDA вы можете получить ошибку (с разрывом строки для удобства чтения):

ptxas warning : Stack size for entry function '_ZN7kernels11print_stuffIiEEvv' 
cannot be statically determined

У этого может быть несколько причин, например динамическое выделение памяти или использование рекурсии , но сейчас это не имеет значения. Я хочу отключить предупреждение, по крайней мере, в какой-то функции. Дело в том, что я не знаю, какой токен использовать для этого. Бесполезно искать этот список (после предложения здесь SO об отключении определенных предупреждений) - потому что это предупреждения в интерфейс C/C++ NVCC, а не ассемблер.

Так как же можно отключить это предупреждение?


person einpoklum    schedule 29.12.2019    source источник
comment
Очевидно, что то, что вы связали с неактуальным, предназначено для отключения предупреждений C или C++ из внешнего интерфейса CUDA. Ваше предупреждение исходит от ассемблера ......   -  person talonmies    schedule 30.12.2019
comment
@talonmies: отредактирую, чтобы уточнить это.   -  person einpoklum    schedule 30.12.2019
comment
@talonmies: Ты уверен? Если да, сделайте это ответом, пожалуйста.   -  person einpoklum    schedule 30.12.2019
comment
в чем проблема с ответом, данным вам здесь? Потому что вам нужно что-то, что работает для каждой функции, например, прагма? Или что вы были обеспокоены тем, что он может подавить другие предупреждения о размере стека (не уверен, что это будут)? Или что-то другое?   -  person Robert Crovella    schedule 31.12.2019
comment
@RobertCrovella: история редактирования здесь информативна. Первоначально вопрос намекал на то, что будет прагма или опция внешнего интерфейса для подавления этого предупреждения, что, очевидно, невозможно. Тем не менее, когда кто-то задал более 350 вопросов по этому тегу, я думаю, может быть трудно вспомнить все вопросы, которые он уже задал и на которые ответил....   -  person talonmies    schedule 31.12.2019


Ответы (1)


Важно отметить, что это предупреждение ассемблера, поэтому ни один из обычных параметров подавления предупреждений внешнего интерфейса не имеет значения.

ptxas поддерживает только очень ограниченное количество опций управления предупреждениями. До CUDA 9 поддерживалось только следующее:

--suppress-double-demote-warning                    (-suppress-double-demote-warning)
        Suppress the warning that is otherwise emitted when a double precision instruction
        is encountered in PTX that is targeted for an SM version that does not have
        double precision support

--disable-warnings                                  (-w)                        
        Inhibit all warning messages.

--warn-on-double-precision-use                      (-warn-double-usage)        
        Warning if double(s) are used in an instruction.

--warn-on-local-memory-usage                        (-warn-lmem-usage)          
        Warning if local memory is used.

--warn-on-spills                                    (-warn-spills)              
        Warning if registers are spilled to local memory.

--warning-as-error                                  (-Werror)                   
        Make all warnings into errors.

В вашем случае единственным вариантом было бы подавить все предупреждения. Этого должно достичь добавление -Xptxas='-w' к любому вызову nvcc.

CUDA 9 и новее добавляют еще одну опцию ptxas, которая подавляет предупреждение, о котором вы спрашиваете:

--suppress-stack-size-warning                       (-suppress-stack-size-warning)
        Suppress the warning that otherwise is printed when stack size cannot be
        determined.

В этом случае добавление -Xptxas='-suppress-stack-size-warning' к любому вызову nvcc должно устранить предупреждение.

person Community    schedule 30.12.2019
comment
@einpoklum: я пропустил, что -suppress-stack-size-warning был добавлен в CUDA 9 (я проводил регрессионное тестирование против CUDA 8, когда запускал ptxas -h). Итак, то, что вы хотите, уже существует. Но вы уже должны знать это из почти идентичного вопроса, который вы задали пару недель назад. - person talonmies; 31.12.2019