新手请教一个问题:如何方便地返回值

当kernel计算需要返回一个值的时候,该怎么做好,我一直是用一个大小为1的数组来做,感觉很别扭

比如向量内积,两个向量都已经放到global mem了,计算内积,并且两个向量都不能够被改变,后面的计算还需要它们

你可以直接用一个__device__变量试试,呵呵!
另外,你应当是指结果是向量的内积,但是“并且两个向量都不能够被改变,后面的计算还需要它们”有其它含义没?

[

我看到有的程序就是直接把结果写到原来global mem里向量的一个位置,然后拷回host

[

__device__变量拷回host,还是用cudaMemcpy?

向量内积也用不着一个变量啊,有个用来比向量小很多的规约空间,最后直接从这个规约空间的第一个值到一个标量就可以了,或者直接使用一个__device__变量,这样在其他内核使用时就不需要copy了

[

__device__变量可以直接在主机端访问么?

不可以,但是比如pcg之类的算法,可以不用拷回主机端

如果拷回主机端还是用cudaMemcpy?

用cudaMemcpyFromSymbol,如果我没记错的话