小编Joh*_*aul的帖子

在CMake中指定CUDA编译器

我正在尝试使用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文件.

cmake llvm clang llvm-clang

7
推荐指数
1
解决办法
993
查看次数

L2事务如何映射到GPU中的DRAM?

在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值(即使在顺序访问期间),尽管两者的总线宽度差异很大.

cuda gpu gpgpu nvidia

3
推荐指数
1
解决办法
134
查看次数

malloc将相同的内存位置分配给2个指针

在编写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)

c malloc pointers memory-management

2
推荐指数
1
解决办法
1142
查看次数

Nvidia GPU是否支持管状结构?

我正在尝试编写OpenCL代码,利用管道等最新的OpenCL 2.0功能.到目前为止,我一直在研究AMD GPU,它们支持管道.但Nvidia驱动程序不支持OpenCL 2.0.那么有没有可用于Nvidia GPU的管道结构?我的目的是直接在两个内核之间传输数据,而不是通过全局内存传递数据.所以可以使用任何帮助我这样做的东西.

gpu amd nvidia opencl

2
推荐指数
1
解决办法
187
查看次数

标签 统计

gpu ×2

nvidia ×2

amd ×1

c ×1

clang ×1

cmake ×1

cuda ×1

gpgpu ×1

llvm ×1

llvm-clang ×1

malloc ×1

memory-management ×1

opencl ×1

pointers ×1