如何利用48K共享存储的问题

1、首先我用的显卡是Tesla C2050,是属于Fermi结构,共享存储和L1公用64K
2、我利用cudaDeviceSetCacheConfig(cudaFuncCachePreferShared)方法,编译还是提示错误,用cudaThreadSetCacheConfig(cudaFuncCachePreferShared)方法,编译还是提示错误。
3、后来我谷歌了下,说我用的是sdk例子用的makefile的问题,后来我学习了下写makefile,写了一个简单的makefile,如下:

NVCCFLAGS := -O3 --ptxas-options=-v -arch sm_20
NVCC := /usr/local/cuda/bin/nvcc

#定义变量
objects = MICompute.o MICompute_kernel.o

#依赖关系
MICompute: $(objects)
g++ $(objects) -o MICompute -lcudart -L/usr/local/cuda/lib64

MICompute.o: MICompute.cpp MICompute.h
g++ -c MICompute.cpp -I/usr/local/cuda/include

MICompute_kernel.o: MICompute_kernel.cu
nvcc -c MICompute_kernel.cu

.PHONY: clean
clean:
rm MICompute $(objects)

结果还是编译错误,说我用的共享存储大于16K,请问各位大神该如何解决这个问题?

顶起来啊 有大神会吗 求教啊 这个问题折腾我好多天了

楼主您好,cudaDeviceSetCacheConfig在运行的时候才会起作用。

而导致您编译错误的是:ptxas发现您用超了16KB了。

而ptxas会这么认为的原因是,您的-arch sm_20虽然设置在变量NVCCFLAGS里了,但是却没有在命令行使用,如图:
nvcc -c MICompute_kernel.cu

建议的解决方案:
改成:
nvcc $(NVCCFLAGS) -c …

谢谢,试过,有效。真心谢谢了。。。

谢谢,试过,有效。真心谢谢了。。。

您客气了。服务您是我们的荣幸。

欢迎下次光临。