Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab中维护CUDA内核启动之间的gpuArray数据_Matlab_Cuda - Fatal编程技术网

在Matlab中维护CUDA内核启动之间的gpuArray数据

在Matlab中维护CUDA内核启动之间的gpuArray数据,matlab,cuda,Matlab,Cuda,我正在使用parallel.gpu.CUDAKernel在Matlab2011a中启动CUDA内核。我的代码设计为相同的gpuArray应该由循环中的后续内核启动填充,但每次启动都将自身限制为gpuArray的唯一段 在执行结束时,整个数组应该已满。但是,当我使用gather()将内存传输回主机时,只有上次内核启动写入的内存是正确的;其他的都是空白。如果我在中间某个地方跳出循环,这也是事实。 我已经通过传递一个标志来指示内核迭代来验证了这一点。如果不是第一次迭代,那么内核什么也不做。但是,第一个

我正在使用parallel.gpu.CUDAKernel在Matlab2011a中启动CUDA内核。我的代码设计为相同的gpuArray应该由循环中的后续内核启动填充,但每次启动都将自身限制为gpuArray的唯一段

在执行结束时,整个数组应该已满。但是,当我使用gather()将内存传输回主机时,只有上次内核启动写入的内存是正确的;其他的都是空白。如果我在中间某个地方跳出循环,这也是事实。

我已经通过传递一个标志来指示内核迭代来验证了这一点。如果不是第一次迭代,那么内核什么也不做。但是,第一个内核写入的数据位置仍然是空的,即使后续内核什么都不做!如果我在启动第一个内核后直接跳出循环,情况就不是这样了


因此,在我看来,Matlab在内核启动之间重置gpuArray。有什么方法可以阻止它这样做吗?

如果捕获feval调用的输出,应该可以这样做。考虑一个像这样的小内核:

__global__ void setOneEl( double * array, double val, int element ) {
    array[element] = val;
}
然后,在MATLAB中运行以下代码,正如我相信您所追求的那样:

>> k = parallel.gpu.CUDAKernel('kern.ptx');
>> g = parallel.gpu.GPUArray.zeros(1,10);
>> for ii = 1:2:10, g = k.feval(g, rand, ii); end
>> gather(g)
ans =
         0    0.0975         0    0.2785         0    0.5469         0    0.9575         0    0.9649

为了与普通的MATLAB语义保持一致,
gpuArray
对象是基于值的,因此,当您希望修改
gpuArray
实例时,必须将输出值捕获回同一数组中,这与任何其他MATLAB数据类型一样。但是,请注意,
CUDAKernel.feval
调用可以理解将结果捕获到同一个变量中的时间,并且可以使用就地优化来避免复制。

并行计算工具箱中的gpuArray功能不强。你最好穿件夹克。虽然我有偏见,因为我工作的夹克,我不是在开玩笑,当我说你不应该浪费你的时间与gpuArray的。如果你不打算使用Jacket,最好还是坚持使用CPU或编写自己的CUDA代码。它看起来是一款很棒的产品。不幸的是,作为一名学生,我仅限于自由软件和大学提供的软件。现在我要试着写一个mex接口,听起来不错。如果您向IT部门发送通知,要求他们购买夹克,他们可能会这样做。事实上,他们可能已经有了夹克的许可证(到目前为止,大多数大学都有一些夹克许可证)。