2013-02-12 14 views
12

Voglio disattivare un compilatore specifico avviso con nvcc, specificamenteCome disattivare gli avvisi del compilatore con nvcc

avvertimento: di riferimento NULL non è permesso

Il codice sto lavorando utilizza NULL riferimenti fanno parte di SFINAE, quindi non possono essere evitati.

Una soluzione ideale sarebbe un #pragma nel solo file di origine in cui si desidera disabilitare gli avvisi, ma anche un flag di compilazione andrebbe bene, se ne esiste uno per disattivare solo l'avviso in questione.

EDIT: Sono stato in contatto con qualcuno di NVIDIA e mi hanno detto che attualmente non esiste un metodo per disabilitare gli avvisi provenienti dal compilatore di dispositivo. Per avvertimenti da parte del compilatore di accoglienza si può usare qualcosa come le seguenti bandiere:

-Xcompiler -Wnonull

ho intenzione di chiudere questo problema come un risultato.

+0

si può 'google' che, o leggere' manuali nvcc'. –

+1

digitando 'nvcc --help' Vedo che c'è un'opzione' --disable-warnings' o ugualmente '-w'. –

+0

grazie @ Soroosh129. Modificherò la mia domanda in modo più specifico: voglio qualcosa con un controllo più fine del semplice spegnimento di tutti i messaggi di avviso, perché gli avvertimenti sono una buona cosa! Purtroppo non sono stato in grado di trovarlo utilizzando google o cercando il manuale. – bcumming

risposta

15

In realtà è possibile disabilitare avvisi specifici sul dispositivo con NVCC. Mi ci sono voluti anni per capire come farlo.

È necessario utilizzare il flag -Xcudafe combinato con un token elencato su this page. Ad esempio, per disattivare l'avviso "controllo dell'espressione è costante", passare il seguente per NVCC:

-Xcudafe "--diag_suppress=boolean_controlling_expr_is_constant" 

per altri avvisi, vedi sopra link.

+0

Non riesco a configurarlo con Visual Studio 2012 e CUDA 5.5. Con la versione 4.2 e uno Studio precedente funzionava. Mentre c'era una discussione su questo problema (con la stessa conclusione di qui) su devtalk.nvidia.com. Vedi: https://devtalk.nvidia.com/default/topic/370952/disable-a-warning-/ – hthms

+0

@ user2333829: cudafe fa eccezione a molti (molti?) Altri token rispetto a quelli della lista che hai menzionato, più I ' Non sono sicuro che accetterà effettivamente tutto su quella lista. Hai provato la maggior parte di loro? – einpoklum

+0

Questa risposta è una manna se si include una libreria come Eigen perché lo spam di avviso di espressione di controllo rende effettivamente impossibile vedere altri avvisi. – Mranz

1

Ho faticato a trovare il corrispondente -Xcudafe per il mio avviso. Quindi qui è un altro modo.

È possibile passare un flag del compilatore a CL.exe che disabiliterà un avviso specifico. Ad esempio, per disabilitare gli avvertimenti relativi agli iteratori deselezionati, è possibile passare /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' 

La cosa più difficile è che per default gli argomenti dalle impostazioni del compilatore ospite non vengono passati a nvcc, quindi è necessario aggiungerlo tramite la finestra di dialogo CUDA C/C++.

enter image description here

0

È possibile utilizzare w bandiera per sopprimere gli avvertimenti nvcc -w

Problemi correlati