![]() |
1
2
我能够在CUDA 8上重现观察结果,但在CUDA 9上无法重现。然而,我不认为这里有任何问题,即使是CUDA 8。让我们从更仔细地查看文档开始: 从…起 CUFFT doc section 2.9.4 :
假设输出中的每个点都有相应的唯一值
因此,我们可以从多个独立的内核调用存储回调例程(注意使用 内核 ),在转换的最后阶段。
这提供了一些额外的线索,我们不应该期望在每种情况下都对所有输出数据进行良好的连续处理。所示的可变性可能取决于精确的变换参数以及袖套库版本。 那么,让我们开始讨论具体问题。CUFFT是否在每个输出点多次调用store回调?事实并非如此。为了证明这一点,我们将您的商店回调修改如下:
该存储回调不会写入预期的输出,只会将给定的输出点增加1。此外,不只是打印
当我在CUDA 8、linux和cc3.5设备(特斯拉K20x)上编译并运行修改后的代码时,输出如下:
我们看到的是:
我认为这个特定的输出模式很可能是在转换的最后阶段由两个独立的内核调用产生的。可以从探查器中获得进一步的证据。 正如我在开头提到的,在这个测试用例中使用CUDA 9而不是CUDA 8时,我看到了不同的行为(只打印出一组从0到19的输出索引)然而,如前所述,文档中也考虑了这种可能性(从库版本到库版本的行为变化)。 预期后续问题:
我认为这里的假设是,您打算应用于 成批的 变换应仅取决于索引位置 批次内 . 在这种假设下,我的期望是:
我在没有证据的情况下提出这一点,也没有试图用文档来证实这一点,但鉴于已经涵盖的观察结果,这是唯一对我有意义的实现。一个优点是,如果您希望应用的转换因批次而异,那么这可能不是实现转换的方法(即通过回调)。然而,正如我已经提到的,CUDA 9中的情况似乎发生了变化。如果您对此有任何顾虑,请随时在以下位置提交带有所需/预期行为(和/或文档更新请求)的RFE(错误报告) http://developer.nvidia.com ,请记住,您的预期行为可能已经在CUDA 9中实现。 |
![]() |
DarkKnight35 · 当我试图打印非字符串的内容时无法触发断点 2 年前 |
![]() |
Som · 使用cmsis库中的fft例程时,引用未定义 7 年前 |
![]() |
Kev · Python中的信号频率滤波 7 年前 |
![]() |
bnc · FFT指数形式在噪声音频中结束 7 年前 |
![]() |
listener · 在Python中创建音频文件的振幅与频谱图 7 年前 |
![]() |
Pazu · 尝试对长度幂为2的向量实现快速傅立叶变换 7 年前 |
![]() |
gmatharu · 限制scipy。信号仅计算特定频率的频谱图 7 年前 |