CUDA: NVCC дает управляющему выражению постоянное предупреждение об assert - PullRequest
6 голосов
/ 11 ноября 2009

Я получаю предупреждение controlling expression is constant об утверждении assert, как это:

assert(... && "error message");

Почему это предупреждение об этом утверждении? Как я могу подавить это предупреждение?

NVCC - это компилятор NVIDIA cuda, я думаю, что он основан на LLVM. Почему выдается это предупреждение, когда то же самое прекрасно компилируется с компиляторами GCC или Visual C ++?

Ответы [ 5 ]

3 голосов
/ 11 ноября 2009

Переносимая альтернатива (возможно, завернутая в макрос) будет выглядеть примерно так:

 {
     const bool error_message = true;
     assert([...] && error_message);
 }

Чтобы понять, что я имел в виду:

#define myAssert(msg, exp) { const bool msg(true); assert(msg && (exp)); }
// usage:
myAssert(ouch, a && b);

... дает напр .::1007*

Утверждение "ой && (a && b)" не удалось [...]

2 голосов
/ 28 мая 2014

Добавьте следующее где-нибудь в начале вашего кода:

#pragma diag_suppress boolean_controlling_expr_is_constant

Обратите внимание, что это подавит все предупреждения компилятора для "управления выражением константы", а не только предупреждение, связанное с вашими утверждениями.

Иногда я получаю это предупреждение при проверке констант или свойств, которые определены (или могут быть получены) во время компиляции, поэтому, по моему опыту, предупреждение было в целом мягким, и его можно игнорировать.

2 голосов
/ 14 июня 2013

Я столкнулся с этой проблемой и, наконец, нашел способ отключить предупреждения на устройстве. Вот подробности ...

Чтобы отключить конкретное предупреждение, необходимо использовать флаг -Xcudafe в сочетании с токеном, перечисленным на этой странице (http://www.ssl.berkeley.edu/~jimm/grizzly_docs/SSL/opt/intel/cc/9.0/lib/locale/en_US/mcpcom.msg). Например, чтобы отключить предупреждение «Управляющее выражение постоянно», передайте следующее NVCC:

-Xcudafe "--diag_suppress = boolean_controlling_expr_is_constant"

Это сработало для меня! Другие предупреждения см. По ссылке выше.

0 голосов
/ 11 ноября 2009

Попробуйте #pragma warning.

0 голосов
/ 11 ноября 2009

Если он основан на LLVM, вы можете использовать что-то вроде этого:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"

char b = 'df'; // no warning.

#pragma clang diagnostic pop

С Управление диагностикой с помощью Pragmas .

...