问题标签 [c++-amp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
190 浏览

visual-c++ - 专门针对 C++AMP 受限 lambda 的模板

使用这个问题(以及其他一些问题)的洞察力,我已经能够编写以下内容来询问正常的 lambda 函数类型信息(即返回类型、参数计数等)

然后我可以使用它,lambda_traits<decltype(myLambda)>但这就是我自鸣得意的编码结束的地方,因为如果我的 lambda 是 gpu 的放大器限制,即

显然没有选择模板专业化。但是添加新的专业

仍然没有解决问题,因为我发现编译器吠叫

是否有另一种方法来询问 lambdas 中的类型,或者有一种方法可以去除 lambda 类型的限制?

0 投票
1 回答
420 浏览

c++ - 设备定位的像素数组(来自 C++ AMP)到使用 D3D / D2D 的窗口

concurrency::array在设备上有一个(C++ AMP)颜色,为每个像素保存颜色。

我想将此数组提供给 Direct3D,以便将其用作在窗口中显示的缓冲区,而无需将数据复制到主机。

我也尝试使用concurrency::direct3d::make_array,它将 anID3D11Buffer与 an相关联accelerator_view,但我不知道如何获取此数组并将其作为窗口中显示的图像的源提供给 Direct3D。

或者,我可以将此数据转换为纹理。

所以基本问题是:给定设备上每个像素的一大块颜色信息,如何将它们提供给 Direct3D 以用作各种屏幕缓冲区?(这个块恰好是由 C++ AMP 计算的。)

0 投票
1 回答
721 浏览

c++ - 在 C++Amp 中并行化的几个算术运算

我正在尝试使用 C++Amp 并行化卷积滤波器。我希望以下功能开始工作(我不知道如何正确执行):

}

主要问题是我不知道如何正确使用像素结构(这里使用哪个并发数据结构,因为我不需要所有 16 个元素)。而且我不知道我是否可以通过这种方式安全地添加值。以下代码不起作用,它没有向像素 [0] 添加适当的值。我也想定义

在方法之外(例如在头文件中)并在 costructor 或其他函数中对其进行初始化(因为这是一个瓶颈并且需要大量时间在 CPU 和 GPU 之间复制数据)。有人知道怎么做这个吗?

0 投票
1 回答
1467 浏览

c++ - 在 C++Amp 中使用指针

我有以下问题:

我有一个执行非常基本操作的代码。我正在传递一个指向 concurrency::array_view 的指针,因为我想更早地存储这些值以避免在使用多线程的函数中出现瓶颈。问题是以下构造无法编译:

有人知道如何解决这个案子吗?我真的需要在运行该方法之前准备数据,所以这是这样做的唯一方法,因为我不能花时间在 RAM 和加速器的内存之间复制数据。

//编辑:

在解决了头文件的一些问题后,我遇到了以下问题:

上面的代码不起作用(它给出了异常)。有什么方法可以更早地准备数据,例如类的构造函数可以处理一次复制它吗?我真的需要在我的头文件中有一个指向 array_view 的指针,并在构造函数中初始化它,如下所示:

在 cci_subset.h 中:

在subset.cpp中:

//编辑2:

我发现parallel_for_each的参数只能按值传递。这就是为什么在初始化类或将一些参数(即图像数据)传递给类时,我仍在寻找一种将值从 CPU 复制到 GPU 的方法。

0 投票
2 回答
484 浏览

multithreading - 在 OpenCL/C++Amp 中访问 GPU 内存

我需要找到有关统一着色器阵列如何访问 GPU 内存的信息,以了解如何有效地使用它。我的显卡架构图显示不清晰。

在此处输入图像描述

我需要使用 C++Amp 将大图像加载到 GPU 内存中并将其分成小块(如 4x4 像素)。每一块都应该用不同的线程计算。我不知道线程如何共享对图像的访问。

在此处输入图像描述

有什么方法可以使线程在访问图像时不会相互阻塞?也许他们有自己的内存可以独占访问?

在此处输入图像描述

或者也许对统一内存的访问太快了以至于我不应该关心它(但我不相信它)?这非常重要,因为我需要为每张图像计算大约 10k 个子集。

0 投票
1 回答
244 浏览

multithreading - C++ AMP 中操作符 [] 在 1D 和 2D 数组上的行为。

在 C++Amp 中编写代码时,我遇到了一个非常奇怪的异常。我定义了两个 concurrency::array 对象,如下所示:

当我想访问第一个元素时

一切运行正常,但是当我想访问第二个时

我收到以下异常:

例外:(在 CPU 上无法访问该阵列)

这是一个非常奇怪的情况,因为我可以访问 2+ 维数组并且禁止仅访问一维数组?有任何想法吗?

0 投票
2 回答
375 浏览

multithreading - 在 C++AMP 中定义函数

我正在尝试编写一个卷积滤波器,它使用特定的函数来确定像素的确切输出颜色。有谁知道是否可以定义一个可以在parallel_for_each块中使用的函数?

0 投票
1 回答
345 浏览

c++ - 为什么在构建 C++ AMP 项目期间会出现链接器错误

我尝试制作一个需要激活器功能的系统。这个激活器函数可能有状态,所以我尝试将状态放入一个concurrency::array_view。当我尝试构建解决方案时,我收到以下链接器错误。

错误 2 错误 LNK2019:无法解析的外部符号“public: static double __thiscall ArtNeuroNet::ActivationFunctions::Activator::function(double,class Concurrency::array_view) restrict(cpu, amp)”(?function@Activator@ActivationFunctions@ArtNeuroNet@ @SENNV?$array_view@N$00@Concurrency@@@ DZ _B) 在函数 _wmain D:\Projekte\ArtNeuroNet\ArtNeuroNet\ArtNeuroNet.obj ArtNeuroNet 中引用

错误 3 error LNK1120: 1 unresolved externals D:\Projekte\ArtNeuroNet\Debug\ArtNeuroNet.exe 1 1 ArtNeuroNet

我的简化激活器看起来像

我的激活器创建看起来像

出于测试目的,我添加了最后一行,即调用activator.lin_function(0.4, state)。如果我注释掉该行,项目将毫无问题地构建。

我现在的问题是,我错过了什么或者我在做什么,而我实际上不应该这样做?

编辑

方法 lin_function 是私有的。但是,在 Activator 中有一个公共方法函数,它调用私有方法 lin_function。出于简化的原因,我将源代码的那部分排除在外。这两种方法都是可访问的,否则当对方法 lin_function 的调用被注释掉时,我将无法构建解决方案。

Activator 完全位于同一个项目中,该项目目前是一个控制台应用程序。

lin_function 依赖于单个状态变量。但是,激活函数的阈值实现根本不需要任何状态存储。将所有内容更改为阈值激活函数并将其余部分注释掉的反应方式相同。特别是“lin_function 已注释掉 -> 没有链接器错误,否则 -> 链接器错误”</p>

编辑 2

对于 Activator,存在一个标头 (Activator.h) 和源文件 (Activator.cpp)。不知何故,链接器似乎无法从声明为restrict(cpu, amp)的标头中找到任何方法。

编辑 3

在头文件中将所有包含限制(amp,cpu)的方法定义为静态后,一切都正确构建并且运行没有问题。

当使用 restrict(amp, cpu) 时,实际上是否对需要静态的方法有限制?

0 投票
1 回答
721 浏览

c++ - 在 MSVC++ 2012 下使用 C++Amp 将程序与库链接时出现未解析的符号

我正在尝试解决以下问题:我有一个使用 C++Amp 的库。该库编译时没有任何警告,并且单元测试表明一切正常。我有一个基于 QT 的项目,它是这个库的 GUI,问题就从这里开始了。每次我编译 GUI 时,在链接阶段都会出现以下错误:

部件。 “void __cdecl 'public 的动态初始化器:静态类 std::_Future_error_category std::_Future_error_object::_Future_object''(void)” (??__E?_Future_object@?$_Future_error_object@H@std@@2V_Future_error_category@2@A @@YAXXZ)

该库链接到 lib 文件,而不是 dll。

项目中的其他目标文件也是如此。在使用 C++Amp 时,有没有人在链接阶段遇到过类似的问题。我确信这是一个非常简单的问题,但目前我不知道我该怎么做。提前致谢。

更新:当我尝试将 QT 项目包含在 MSVC++ 中时,也会发生同样的情况。

0 投票
3 回答
295 浏览

c++ - 如何应对修改原子值

我想编写一个简单的代码,根据输入的数据向量进行一些计算。它应该只返回一个值。我不知道如何实现这一点。我写了一个简单的测试来检查它是如何工作的,我得到了一个编译错误。这是代码:

当我尝试编译此代码时,出现以下错误:

错误 C3590:“sum”:如果 lambda 受放大器限制,则不支持按引用捕获或“this”捕获错误 C3581:“cci::Subset::parallel_tests::”:放大器限制代码中的类型不受支持