2013-02-12 11 views
12

Chcę wyłączyć konkretny kompilator ostrzeżenie z nvcc konkretnieJak wyłączyć ostrzeżenia kompilatora z nvcc

ostrzeżenie: NULL odniesienia nie jest dozwolone

Kod pracuję używa NULL referencje są częścią SFINAE, więc nie można ich uniknąć.

Idealnym rozwiązaniem byłoby #pragma w pliku źródłowym, w którym chcemy wyłączyć ostrzeżenia, ale flaga kompilatora również byłaby w porządku, jeśli istnieje, aby wyłączyć tylko ostrzeżenie.

EDIT: Byłem w kontakcie z kimś z firmy NVIDIA, i powiedziano mi, że nie ma obecnie metoda wyłączenia ostrzeżenia, które pochodzą z kompilatora urządzenia. Dla ostrzeżeń kompilatora gospodarza można użyć coś podobnego następujących flag:

-Xcompiler -Wnonull

mam zamiar zamknąć to pytanie w wyniku.

+0

możesz 'google' że albo czytać' nvcc' podręcznik. –

+1

wpisując 'nvcc --help' widzę, że istnieje opcja' --disable-warning' lub równie "-w". –

+0

dzięki @ Soroosh129. Zmienię moje pytanie na bardziej szczegółowe: chcę czegoś o bardziej szczegółowej kontroli niż wyłączanie wszystkich komunikatów ostrzegawczych, ponieważ ostrzeżenia są dobre! Niestety nie udało mi się tego znaleźć za pomocą Google lub po przejrzeniu podręcznika. – bcumming

Odpowiedz

15

Możliwe jest wyłączenie określonych ostrzeżeń na urządzeniu za pomocą NVCC. Zajęło mi wieki, aby dowiedzieć się, jak to zrobić.

Należy użyć flagi -Xcudafe w połączeniu z tokenem wymienionym na this page. Na przykład, do wyłączenia „kontroli ekspresji jest stałe” ostrzeżenie przechodzą następujących do nvcc:

-Xcudafe "--diag_suppress=boolean_controlling_expr_is_constant" 

na inne ostrzeżenia, patrz wyżej link.

+0

Nie mogę ustawić tego z Visual Studio 2012 i CUDA 5.5. Z 4.2 i starszym Studio działało. Przy okazji odbyła się dyskusja na ten temat (z tym samym wnioskiem co tutaj) na stronie devtalk.nvidia.com. Zobacz: https://devtalk.nvidia.com/default/topic/370952/disable-a-warning-/ – hthms

+0

@ user2333829: cudafe oprócz kilku (wielu?) Innych tokenów niż te z listy, o której wspomniałeś, plus ja ' nie jestem pewien, czy rzeczywiście zaakceptuje wszystko na tej liście. Wypróbowałeś większość z nich? – einpoklum

+0

Ta odpowiedź jest darem niebios, jeśli dołączysz bibliotekę taką jak Eigen, ponieważ kontrolujący komunikat ostrzegawczy dotyczący spamu sprawia, że ​​praktycznie nie można zobaczyć żadnego innego ostrzeżenia. – Mranz

1

Próbowałem znaleźć pasujące -Xcudafe dla mojego ostrzeżenia. Oto inny sposób.

Możesz przekazać flagę kompilatora do CL.exe, która wyłączy określone ostrzeżenie. Na przykład, aby wyłączyć ostrzeżenia o niezaznaczonych iteratorach, możesz przekazać /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' 

Najtrudniejszą rzeczą jest to, że domyślnie argumenty z ustawieniami kompilatora host nie są przekazywane do nvcc, więc trzeba dodać ją poprzez dialog z CUDA C/C++.

enter image description here

0

można użyć w celu powstrzymania flagi ostrzeżenia nvcc -w

Powiązane problemy