Visual studio 2015 C++;Visual Studio 2015中的AMP:编译器/运行时错误还是错误示例? 我想尝试一下微软文档中的下面的C++ AMP代码示例:

Visual studio 2015 C++;Visual Studio 2015中的AMP:编译器/运行时错误还是错误示例? 我想尝试一下微软文档中的下面的C++ AMP代码示例:,visual-studio-2015,c++-amp,Visual Studio 2015,C++ Amp,(第二个代码示例打开,稍微调整以将其转换为程序): 我想知道这么简单的代码示例怎么会失败得这么严重。是示例代码出错还是编译器出错?当然,它也可以是我的系统中的特定内容,因为毕竟使用C++ AMP可能会涉及到图形驱动程序的低级交互等,这可能会触发错误。任何帮助都将不胜感激 这可能是关键: “毕竟,使用C++ AMP可能涉及到与图形驱动程序等的低级交互,这可能会引发错误。” 该示例应该可以工作,但您需要为DirectX11提供正确的驱动程序 您可能会尝试使用软件仿真器调试生成。如果您使用的是Wind

(第二个代码示例打开,稍微调整以将其转换为程序):


我想知道这么简单的代码示例怎么会失败得这么严重。是示例代码出错还是编译器出错?当然,它也可以是我的系统中的特定内容,因为毕竟使用C++ AMP可能会涉及到图形驱动程序的低级交互等,这可能会触发错误。任何帮助都将不胜感激

这可能是关键:

“毕竟,使用C++ AMP可能涉及到与图形驱动程序等的低级交互,这可能会引发错误。”

该示例应该可以工作,但您需要为DirectX11提供正确的驱动程序


您可能会尝试使用软件仿真器调试生成。如果您使用的是Windows 8或更高版本,请尝试在解决方案资源管理器的“调试”下编辑属性,并查看“调试器类型”列表中的可用选项。查看是否仅使用GPU有助于尝试此操作。

您应该将调试器类型更改为GPU Only

请参见屏幕截图:


我遇到了完全相同的问题,调试版本引发了异常(发布版本没有),对我有效的解决方案是,更新(修复安装)Visual studio,即使我有上一个版本2015更新3,然后安装最新的图形驱动程序。我不知道主要原因是什么,但我认为图形驱动程序…

您好,谢谢-不幸的是,我在解决方案浏览器中找不到仅关于GPU等的选项。在调试中我唯一能找到的是设置“AMP默认加速器”,它可以被设置为“WARP软件加速器”(它已经在)或“使用C++ +AMP运行时默认”。我试着把它改成后者,但完全相同的错误仍然存在。此外,原始设置似乎已经在使用软件(可能是因为项目处于调试模式)。有人可以在他们的系统上尝试上面的示例吗?谢谢!Windows 7和Visual Studio 2015版本14.0.23107.0 D14REL的情况也一样。在另一台装有Windows 7和Visual Studio 2015版本14.0.24720.00的机器上运行。1.4年前更新,未发生任何更改,Win10上的VS2019。Sad-即使错误现象涉及到驱动程序等,这仍然意味着AMP API对于任何客户端应用程序的使用基本上都是无用的,考虑到微软最简单的示例程序在主流机器上失败,4年过去了,所以在VS2019中再次尝试。现在它甚至无法编译(amp.h(2616):错误C3861:“_Access”:找不到标识符)!即amp.h头文件本身的语法错误。该错误无法通过重新排序或先包含Windows.h或诸如此类的内容来解决。显然,修复工作正在进行中(19年5月):。想知道有多少人在使用C++ AMP?它接受了多少测试?;)
#include "stdafx.h"

#include <amp.h>
#include <iostream>
using namespace concurrency;

const int size = 5;

void CppAmpMethod() {
    int aCPP[] = { 1, 2, 3, 4, 5 };
    int bCPP[] = { 6, 7, 8, 9, 10 };
    int sumCPP[size];

    // Create C++ AMP objects.
    array_view<const int, 1> a(size, aCPP);
    array_view<const int, 1> b(size, bCPP);
    array_view<int, 1> sum(size, sumCPP);
    sum.discard_data();

    parallel_for_each(
        // Define the compute domain, which is the set of threads that are created.
        sum.extent,
        // Define the code to run on each thread on the accelerator.
        [=](index<1> idx) restrict(amp)
    {
        sum[idx] = a[idx] + b[idx];
    }
    );

    // Print the results. The expected output is "7, 9, 11, 13, 15".
    for (int i = 0; i < size; i++) {
        std::cout << sum[i] << "\n";
    }
}


int main()
{
    CppAmpMethod();
    return 0;
}
'ConsoleApplication2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\nvwgf2um.dll'. Cannot find or open the PDB file.
'ConsoleApplication2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\psapi.dll'. Cannot find or open the PDB file.
Exception thrown at 0x0F9CC933 (vcamp140d.dll) in ConsoleApplication2.exe: 0xC0000005: Access violation reading location 0xCDCDCDCD.