2013-02-12 2 views
12

Я хочу, чтобы отключить конкретный компилятор предупреждение с nvcc, в частностиКак отключить предупреждения компилятора с NVCC

предупреждение: NULL ссылка не допускается

Код я работаю над использует NULL ссылки являются частью SFINAE, поэтому их нельзя избежать.

Идеальное решение было бы #pragma только в исходном файле, где мы хотим отключить предупреждения, но флаг компилятора также будет прекрасен, если существует, чтобы отключить только соответствующее предупреждение.

EDIT: Я связался с кем-то из NVIDIA, и они сказали мне, что в настоящее время нет способа отключения предупреждений, которые поступают от компилятора устройства. Для предупреждения от хоста компилятора вы можете использовать что-то вроде следующих флагов:

-Xcompiler -Wnonull

Я собираюсь закрыть этот вопрос в качестве результата.

+0

вы можете 'google' что, или читать' nvcc' руководство. –

+1

, набрав 'nvcc -help', я вижу, что есть опция' --disable-warnings' или равно '-w'. –

+0

спасибо @ Soroosh129. Я уточню свой вопрос, чтобы быть более конкретным: я хочу что-то с более мелким контролем, чем просто отключить все предупреждающие сообщения, потому что предупреждения - это хорошо! К сожалению, я не смог найти это с помощью Google или просмотрев руководство. – bcumming

ответ

15

На самом деле можно отключить определенные предупреждения на устройстве с помощью NVCC. Мне потребовались годы, чтобы понять, как это сделать.

Вам необходимо использовать флаг -Xcudafe, объединенный с токеном, указанным на this page. Например, чтобы отключить предупреждение «контроль выражения является постоянным», передать следующий NVCC:

-Xcudafe "--diag_suppress=boolean_controlling_expr_is_constant" 

Для других предупреждений см выше link.

+0

Я не могу установить это с помощью Visual Studio 2012 и CUDA 5.5. С 4.2 и старше Studio это сработало. Кстати, была дискуссия по этому вопросу (с тем же заключением, что и здесь) на devtalk.nvidia.com. См.: Https://devtalk.nvidia.com/default/topic/370952/disable-a-warning-/ – hthms

+0

@ user2333829: cudafe исключает несколько (много?) Других токенов, чем те, которые вы упомянули в списке, плюс I ' m не уверен, что он фактически примет все в этом списке. Вы пробовали большинство из них? – einpoklum

+0

Этот ответ является находкой, если вы включаете библиотеку, такую ​​как Eigen, потому что контролирующее выражение, предупреждающее спам, делает невозможным увидеть любое другое предупреждение. – Mranz

1

Я попытался найти подходящее -Xcudafe для моего предупреждения. Так вот другой путь.

Вы можете передать флаг компилятора CL.exe, который отключит определенное предупреждение. Например, чтобы отключить предупреждения о непроверенных итераторах, вы можете пройти /wd4996.

warning C4996: 'std::_Copy_impl': Function call with parameters that may be 
unsafe - this call relies on the caller to check that the passed values are 
correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See 
documentation on how to use Visual C++ 'Checked Iterators' 

Коварное здесь является то, что по умолчанию аргументы от настроек хоста компилятора не передается nvcc, поэтому вам нужно добавить его через диалог CUDA C/C++.

enter image description here

0

Вы можете использовать ж флаг для подавления предупреждений nvcc -w