这不是一个编程问题,而是与之相关的,而且我一直无法找到其他地方的信息。我希望它可以被接受。

我试图移植C++ AMP应用程序以在Surface 2平板电脑上运行。由于C++ AMP可在平板电脑上的WinRT上运行,并且它使用DirectX进行GPU加速,并且Tegra处理器可与DirectX一起使用,因此我期望通过在平板电脑上使用C++ AMP与使用“cpu”来提高性能。与使用单个CPU内核相比,与使用单个CPU内核相比,在GPU上使用相同的代码在台式机上的速度提高了约80倍,并且高度并行。

事实证明,平板电脑上的AMP解决方案仅给我带来了Tegras四核的好处,仅此而已。

我有三个C++ AMP设备,它们是:WARP,ref,CPU

默认值为WARP.Ref的速度要慢得多,并且CPU现在似乎崩溃了。

SIMD内核是否仅不适用于Tegra4上的C++ AMP,还是我需要做一些特别的事情?

最佳答案

除了所有GPU加速器之外,如果使用以下方法枚举可用的加速器,还将看到以下加速器:
std::vector<accelerator> accls = accelerator::get_all()
取自C++ AMP Book:



因此,您看到的行为几乎与预期的一样。

但是,我想您真正想知道的是Tegra 4 GPU在哪里?如果Surface 2具有DirectX 11驱动程序,则希望将其视为加速器选项。 C++ AMP需要DX11。

Surface 2基于Tegra 4(T40a2)SOC,后者似乎仅支持DX9.1。



取自Nvidia's Tegra 4 GPU: Doubling Down On Efficiency。我在NVidia的网站上找不到对此的任何确认。看来您需要Tegra K1才能获得DX11支持。很抱歉成为坏消息的承担者。

从好的方面来说,如果您将代码定向到默认加速器,则其他具有DX11功能的GPU的其他硬件将自动利用它。

关于c++ - Tegra 4 Surface 2上的C++放大器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22129248/

10-10 09:36