2016-09-29 1 views
-1

Ich habe Probleme, selbst die einfachsten Code für CUDA 8 und Visual Studio 2015 Update 3.Wie funktioniert CUDA 8 in Visual Studio 2015 Update 3 mit CMake?

CUDASample.cuh

class CUDASample { 
public: 
    CUDASample(); 
    ~CUDASample(); 
}; 

CUDASample.cu

#include "CUDASample.cuh" 

CUDASample::CUDASample() { 
} 

CUDASample::~CUDASample(){ 
} 

Ich erhalte Kompilation zu kompilieren Fehler wie

1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(63): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(64): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(76): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(98): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(118): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(125): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(126): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(137): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(144): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(161): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(170): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(171): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(180): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(188): error : unknown attribute "guard" 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(189): error : unknown attribute "guard" 

ich bin ziemlich su Es ist ein CUDA-Problem, denn wenn ich die Quelldateierweiterung auf "cpp" und die Header-Erweiterung auf "h" ändere, funktioniert alles wie gewohnt. Wie kann ich das lösen?

EDIT:

Die Kommandozeile in Eigenschaften gezeigt -> Linker -> Command Line ist

/OUT:"C:\Users\David\Desktop\sample\build\bin\Release\cudasample.dll" /MANIFEST /NXCOMPAT /PDB:"C:/Users/David/Desktop/sample/build/bin/Release/cudasample.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "comdlg32.lib" "advapi32.lib" "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cudart_static.lib" /IMPLIB:"C:/Users/David/Desktop/sample/build/lib/Release/cudasample.lib" /DLL /MACHINE:X64 /INCREMENTAL:NO /PGD:"C:\Users\David\Desktop\sample\build\bin\Release\cudasample.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"cudasample.dir\Release\cudasample.dll.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1 

EDIT:

Wie Robert erwähnt, da ich erfolgreich die CUDA-Proben zu kompilieren bin in der Lage möglicherweise hängt das Problem mit der Cmake-Konfiguration zusammen. Unten sind die CMakeLists, die ich verwendet habe, die für mich beim Kompilieren auf Visual Studio 2013 + CUDA 7.5 funktionieren.

project(cudasample) 

set(PROJECT_SRCS 
${PROJECT_SOURCE_DIR}/src/CUDASample.cu 
) 

set(PROJECT_INCS 
${PROJECT_SOURCE_DIR}/include/CUDASample.cuh 
) 

include_directories(${PROJECT_SOURCE_DIR}/include) 

find_package(CUDA REQUIRED) 
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_52,code=sm_52;") 
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_50,code=sm_50;") 
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_35,code=sm_35;") 
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_30,code=sm_30;") 
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) 
    set(CUDA_PROPAGATE_HOST_FLAGS OFF) 
    list(APPEND CUDA_NVCC_FLAGS "-std=c++11;") 
endif() 

cuda_add_library(${PROJECT_NAME} SHARED ${PROJECT_SRCS} ${PROJECT_INCS}) 

Was könnte falsch sein?

+0

Wird dies bei der endgültigen Version von CUDA 8.0 oder dem Release-Kandidaten beobachtet? Wie lautet die Versionsnummer von 'nvcc'? Kannst du deiner Frage den genauen Aufruf von 'nvcc' hinzufügen, der zu diesen Fehlermeldungen geführt hat? – njuffa

+0

@njuffa Dies ist die endgültige Version von CUDA 8, 'nvcc --version' ergibt V8.0.44. Der sln wird von cmake erzeugt, mit den Standard 'find_package (CUDA REQUIRED)' und 'cuda_add_library' – user3667089

+0

Viele Leute benutzen CMAKE nicht, oder benutzen vielleicht eine andere Version als Ihre. Indem Sie die eigentliche 'nvcc'-Befehlszeile veröffentlichen, erhöhen Sie die Wahrscheinlichkeit, dass andere das Problem, das Sie sehen, reproduzieren und diagnostizieren können. – njuffa

Antwort

1

Ich habe es zumindest geschafft, es zur Arbeit zu bringen. Die Ursache ist der sdl Compiler-Flag in meinem Kopf

CMakeLists.txt
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /sdl") 

Also, wenn ich in dieser Zeile im Projekt CMakeLists.txt hinzufügen

string(REGEX REPLACE "/sdl" "/sdl-" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 

es erfolgreich kompiliert.

Es ist mir jedoch immer noch unklar, warum der sdl-Compiler-Flag NVCC in der Kombination von CUDA 8 und Visual Studio 2015 Update 3 fehlschlagen lässt. Hoffentlich kann jemand eine bessere Antwort finden.

Verwandte Themen