2009-11-11 10 views
5

ottengo l'avvertimento controlling expression is constant su assert in questo modo:CUDA: NVCC dà controllo dell'espressione è costante avvertimento sulla asserzione

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

Perchè questo avviso su questo asserzione? Come posso sopprimere questo avviso?

NVCC è il compilatore CUD di NVIDIA, penso che sia basato su LLVM. Perché dà questo avvertimento, quando lo stesso compila bene con i compilatori GCC o Visual C++?

+0

Il compilatore deve essere impostato su gcc su linux in base al riferimento NVCC2.0. –

+0

E gcc (almeno 3.4.4 e 4.3.2) non fornisce tali avvisi. Forse prova a verificare il compilatore tramite '#ifdef __GNUC__' /' __GNUG__'? –

+0

Non riesco nemmeno a riprodurre l'avviso e non ho gcc ha alcun flag per sopprimere questo avviso. Strano. –

risposta

3

Un'alternativa portatile (possibilmente avvolto in una macro) sarebbe qualcosa di simile:

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

a chiarire quello che volevo dire:

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

... dà ad esempio:

assertion "ouch & & (a & & b) "fallito [...]

0

Se si basa LLVM, allora si può usare qualcosa di simile:

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

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

#pragma clang diagnostic pop 

Da Controlling Diagnostics via Pragmas.

1

Mi sono imbattuto in questo problema esatto e finalmente trovato un modo per disabilitare gli avvisi sul dispositivo. Ecco i dettagli ...

Per disabilitare un avviso specifico, è necessario utilizzare il flag -Xcudafe combinato con un token elencato in questa pagina (http://www.ssl.berkeley.edu/~jimm/grizzly_docs/SSL/opt/intel/cc/9.0/lib/locale/en_US/mcpcom.msg). Ad esempio, per disattivare l'avviso "che controlla l'espressione è costante", passare il seguente per NVCC:

-Xcudafe "--diag_suppress = boolean_controlling_expr_is_constant"

Questo ha funzionato per me! Per altri avvisi, vedere il link sopra.

2

Aggiungere il seguente qualche parte vicino all'inizio del codice:

#pragma diag_suppress boolean_controlling_expr_is_constant 

Si noti che questo evita di visualizzare tutti gli avvisi del compilatore per "controllare l'espressione è costante", e non solo l'avvertimento associata con le affermazioni.

A volte ricevo questo avviso quando si controllano le costanti o le proprietà che sono definite (o possono essere derivate) in fase di compilazione, quindi nella mia esperienza l'avviso è stato generalmente benigno e OK da ignorare.

+1

Puoi anche riattivare l'avviso con '#pragma diag_warning boolean_controlling_expr_is_constant'. Tuttavia, questi 'pragma's non possono essere nel codice del dispositivo.Sono anche completamente privi di documenti per quanto riguarda il toolkit CUDA, quindi non sarei sorpreso se un giorno smettessero di funzionare ... – Sam

Problemi correlati