我在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();
}
}
}
编译器?
答案 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