【问题标题】:FFT in C++ AMP Throw CLIPBRD_E_CANT_OPEN errorC++ AMP 中的 FFT 引发 CLIPBRD_E_CANT_OPEN 错误
【发布时间】:2018-04-07 15:32:54
【问题描述】:

我正在尝试在 Windows 10 上的 Visual C++ 2017 中使用 C++ AMP(更新到最新版本),并且我在 codeplex 上找到了 C++ AMP 团队的存档 FFT 库。我尝试运行示例代码,但是在创建 DirectX FFT 时程序会抛出内存不足错误。我通过关注微软论坛上的thread 解决了这个问题。

但是,问题并没有停止。当 FFT 库尝试创建无序访问视图时,它会抛出 CLIPBRD_E_CANT_OPEN 错误。反正我没有尝试在剪贴板上操作。

感谢您阅读本文!

【问题讨论】:

    标签: directx c++-amp


    【解决方案1】:

    看来我解决了这个问题。原帖提到我们需要创建一个新的 DirectX 设备,然后在其上创建加速器视图。然后我将该视图作为第二个参数传递给 fft 的 ctor。

    fft( concurrency::extent<_Dim> _Transform_extent, const concurrency::accelerator_view& _Av = concurrency::accelerator().default_view, float _Forward_scale = 0.0f, float _Inverse_scale = 0.0f)

    但是,CLIPBRD_E_CANT_OPEN 仍然崩溃。

    阅读代码后,我意识到我也需要在 DirectX 视图上创建数组。于是我开始改变:

    array<std::complex<float>,dims> transformed_array(extend, directx_acc_view);

    这个想法来自create_uav()的不同行为。内部缓冲区和预计算没有引起任何问题,但是样本的调用会触发剪贴板错误。我想设备在这里很重要,所以我进行了更改。

    希望我的理解是正确的,反正现在没有这样的错误了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多