我正在尝试使用clang-3.9基于以下文档构建一个cuda项目.但我想用cmake来构建我的项目.我已经分别将CMAKE_CC_COMPILER和CMAKE_CXX_COMPILER设置为clang和clang ++.
但问题是,如果我使用
file(GLOB_RECURSE CUDA_SOURCES "./*.cu")
CUDA_ADD_LIBRARY(Benchmarks_CUDA ${CUDA_SOURCES})
Run Code Online (Sandbox Code Playgroud)
在我的CMakeList.txt中,cmake默认使用nvcc编译器.但相反,我想使用clang来编译.cu文件.
相反,如果我使用
add_library (Benchmarks_CUDA ${CUDA_SOURCES})
Run Code Online (Sandbox Code Playgroud)
然后我会得到一个错误
CMake Error: Cannot determine link language for target "Benchmarks_CUDA".
CMake Error: CMake can not determine linker language for target: Benchmarks_CUDA
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何使用cmake使用clang构建.cu文件.
在GPU中,到L2高速缓存的事务可以是32B,64B或128B(读和写)的大小.并且可以使用诸如gst_transactions和gld_transactions之类的nvprof度量来测量此类事务的总数.但是,我无法找到任何详细说明如何映射这些事务以进行DRAM访问的材料,即这些事务如何由DRAM处理,而这些事务通常具有不同的总线宽度?例如,TitanXp GPU具有384位全局内存总线,P100具有3072位内存总线.那么32B,64B或128B指令如何映射到这些存储器总线.如何衡量DRAM控制器生成的事务数量?
PS:dram_read_transactions指标似乎没有这样做.我之所以这么说是因为我在TitanXp和P100上获得了相同的dram_read_transactions值(即使在顺序访问期间),尽管两者的总线宽度差异很大.
在编写c代码时,我注意到当我更改与指针x指向的内存位置相关联的值时,它会导致指针y指向的数据值的更改.
当我再次检查时,我发现malloc将重叠的内存区域分配给2个不同的指针.为什么会这样?
我的代码中有很多动态分配的变量.那是因为可以分配的最大内存量有限制malloc吗?
以下是我的代码的输出.从输出中可以看出,malloc将重叠的内存区域分配给x和y.
size x:32 y:144 //total size allocated to x and y by malloc
//the memory locations allocated to each of the pointers
location x:0x7fb552c04d20 y:0x7fb552c04c70
location x:0x7fb552c04d24 y:0x7fb552c04c8c
location x:0x7fb552c04d28 y:0x7fb552c04ca8
location x:0x7fb552c04d2c y:0x7fb552c04cc4
location x:0x7fb552c04d30 y:0x7fb552c04ce0
location x:**0x7fb552c04d34** y:0x7fb552c04cfc
location x:0x7fb552c04d38 y:0x7fb552c04d18
location x:0x7fb552c04d3c y:**0x7fb552c04d34**
Run Code Online (Sandbox Code Playgroud)
我用来分配内存的代码是
int *x = (int *)malloc((DG_SIZE+1)*sizeof(int));
int *y = (int *)malloc(4*(DG_SIZE+2)*sizeof(int));
printf("\n size x:%d y:%d\n", (DG_SIZE+1)*sizeof(int), 4*(DG_SIZE+2)*sizeof(int));
int a = 0;
for(a = …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写OpenCL代码,利用管道等最新的OpenCL 2.0功能.到目前为止,我一直在研究AMD GPU,它们支持管道.但Nvidia驱动程序不支持OpenCL 2.0.那么有没有可用于Nvidia GPU的管道结构?我的目的是直接在两个内核之间传输数据,而不是通过全局内存传递数据.所以可以使用任何帮助我这样做的东西.