用于多GPU的CUDA中的cufftXt内存处理

时间:2017-01-30 15:26:44

标签: cuda cufft

我想在cuDoubleComplex中的2 ^ 14x2 ^ 14 2d阵列上计算FFT,需要4GB的内存。我有两个Quadro M5000,每个都有8 GB,可以互相通信。

我设置了GPU并创建了一个计划

cufftXtSetGPUs(plan_multi, nGPUs, whichGPUs);

cufftMakePlan2d(plan_multi, 16384, 16384, CUFFT_Z2Z, worksize);

这会在每个设备上创建一个大约6GB的工作区域,当我尝试分配我的变量时

cudaLibXtDesc *d_u;

cufftXtMalloc(plan_multi, &d_u, CUFFT_XT_FORMAT_INPLACE);

没有空间。

是否可以改善情况,并将袖带设置为使用较小的工作区,即容量的交易速度?文档指向cufftXtSetWorkArea(),但这只是说我必须确保为工作区分配了足够的内存。

此外,我可以通过将描述符中的数据指针设置到不同设备中的位置来将输入数组分割到GPU中(据我所知,这是您在cuBLAS中的方式)?

到目前为止,我设法做的是将输入数组移动到其中一个设备中,在另一个设备上设置一次设备计划(需要超过4GB)并通过P2P进行计算。这在某种程度上并不完全令人满意。

另外,我试图以单精度来解决这个问题 - 我的PDE求解器很乐意在其中一个Quadros上运行6 GB:2GB用于变量2GB用于辅助变量(PDE具有非本地术语)和2GB袖口的工作空间。

使用cufftXt更改了两个GPU的代码,突然我内存不足 - 上述每个实体现在在每台设备上都需要3GB。

我在文档中找不到任何有启发性的内容,所以欢迎任何参考。

0 个答案:

没有答案