如何将标志传递给CMAKE中的nvcc编译器

时间:2018-11-12 05:33:54

标签: cmake cuda nvcc

我在cuda中有一个C项目,其中嵌入了--ptxas-options=-v 内核模块

我只想将nvcc传递给nvcc以便查看 每个线程的寄存器使用量每个块的共享内存使用量

通过搜索如何将标记传递到Cmake中的add_compile_options(myprog PRIVATE $<$<COMPILE_LANGUAGE:C>:-Wall> $<$<COMPILE_LANGUAGE:CUDA>:-arch=sm_20 -ptxas-options=-v> ) ,我遇到了一个解决方案

nvcc

但是这并没有告诉我上面的属性。我认为这些标志未正确传递到--ptxas-options=-v

如何将nvcc传递给String inputCSVFile = "/input_folder_path/sample.csv"; BufferedReader bufferedReader = null; String lines = ""; String splitChar = ","; String[] columns; int count = 0; try { PrintStream printStream = new PrintStream(new FileOutputStream("/output_folder_path/e.ldif"));// Step 1 bufferedReader = new BufferedReader(new FileReader(inputCSVFile)); while ((lines = bufferedReader.readLine()) != null) { columns = lines.split(splitChar);// Step 2 if (count > 0) {// Step 3 ,4 printStream.println("dn: cn="+columns[1]+", ou="+columns[2]+", o=Data" + "\ngivenName: "+columns[0] + "\nsn: "+columns[3] + "\n" ); } count++; } } catch (Exception e) { e.printStackTrace(); } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } 编译器?

3 个答案:

答案 0 :(得分:4)

cmake cuda的较新方法设置了其他一些变量。检查docs here

我们需要设置CMAKE_<LANG>_FLAGS,这里实际上是CMAKE_CUDA_FLAGS

set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --ptxas-options=-v")

答案 1 :(得分:3)

仅在目标上设置CUDA标志的正确方法是

target_compile_options(<my_target> PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:my_cuda_option>) 

这将通过生成器表达式设置仅针对以CUDA语言编译的文件的选项。

根据其他答案的建议使用CMAKE_CUDA_FLAGS为所有目标设置全局属性,根据使用情况,这可能是正确的方法,也可能不是正确的方法。

答案 2 :(得分:-1)

怎么样?...

find_package( CUDA REQUIRED )
set( CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "--ptxas-options=-v" )

include_directories( ${CUDA_INCLUDE_DIRS} )
cuda_add_library( kernel_lib ${sources} )    

您也可以在线查看CMake CUDA文档... https://cmake.org/cmake/help/latest/module/FindCUDA.html