我正在设计一个拥有大量CUDA内核的库来执行并行计算。所有内核都将作用于一个公共对象,比如使用C++样式对象定义的计算网格。计算域不一定需要从主机端访问,因此在设备端创建计算域并将其保持在当前状态是有意义的。我想知道以下几点是否被认为是“良好做法”:
Domain。首先,我定义了一个全局设备端变量来存储计算域:
__device__域*D如果我的域保持固定(即内核在域创建后不会修改它),这可以吗?有更好的办法吗?最初,我尝试在主机端创建Domain对象,并将其复制到设备上,但结果发现这是一个麻烦,因为Domain是一个相对复杂的类型,使用cudaMemCpy甚至Thrust::device_new进行复制非常困难(至少,我无法让它很好地工作)。
发布于 2015-07-24 06:48:36
是的没关系。
也许您可以提高性能使用
__constant__ 使用此关键字,您的对象将在非常快的内存中在所有内核中可用。
为了复制您的对象,您必须使用: cudaMemcpyToSymbol,请注意,有一个限制:您的对象将被只读在您的设备代码中,并且必须没有默认的构造函数。
你可以找到这里的信息
如果您的对象很复杂,很难复制,那么您也许可以查找:统一存储器,然后通过值将变量传递给内核。
https://stackoverflow.com/questions/31599307
复制相似问题