问题标签 [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 回答
807 浏览

c++ - C ++ AMP迭代具有不同维度的array_views

我在 Windows 8 上使用 C++ AMP 和 Visual Studio 2012。我有一个案例,我有 2D array_viewexperimentData和 1D array_view experimentFactors,. 我想遍历 2D array_view 的第一个维度和 1D array_view 的第一个维度。这就是我所拥有的,但我经常收到错误消息,说这个没有重载。我想迭代numberOfTests第一个维度。我想要这条线:

返回整行数据。我认为上面的section方法array_view是做到这一点的方法,但我不知道怎么做。

test对象应该是experimentData array_view. 该factors对象应该是experimentFactors array_view.

澄清

experimentDataarray_view 有 M 行和 N列

experimentFactorsarray_view 有 M行

0 投票
1 回答
176 浏览

gpgpu - 逐行填充 2D AMP 数组

假设我有一个如下所示的 CPU 端数据源:

假设里面的每个行向量都具有相同的大小(一个锯齿状的二维向量,不是锯齿状的)。

我想将其复制到数组内的单个 GPU 内存块。有没有办法逐行执行此操作?像这样的东西:

我知道这不会编译,它显示了我正在尝试做的事情。有什么东西可以做到这一点吗?我能找到的唯一解决方案是将 cpu 向量复制到一维向量中,并将其映射到 array_view,或者将其复制到数组中。

这行得通,但很浪费,而且对于某些算法,连续的一维向量可能不适合剩余的内存空间。

欢迎任何建议,因为我正在努力找出 AMP。

0 投票
1 回答
1352 浏览

visual-c++ - DirectX 11.1 尝试创建设备以不触发超时检测恢复

我正在尝试使用 C++ AMP 在 GPU 上执行长时间运行的内核。这需要使用 DirectX 创建一个不会超时的设备。我正在设置标志,但它仍在触发超时检测恢复。我的盒子里有一个专用的 Radeon HD 7970,没有插入显示器。我还需要做些什么来防止 Windows 8 在内核完成之前取消它吗?

0 投票
2 回答
579 浏览

qt - 使用 qmake 编译 C++ AMP 失败

我有以下 main.cpp 文件:

和一个 .pro 文件:

如果我从 Visual Studio 2012 命令行编译 main.cpp(仅使用 cl /EHsc main.cpp),一切正常。但是如果我使用 qmake 和 nmake 总是会出现链接错误,即存在未解析的外部符号(来自 amp)。有谁知道如何解决这个问题?

0 投票
2 回答
3211 浏览

c++-amp - 将数据从 GPU 复制到 CPU

我正在尝试使用 C++ AMP 计算矩阵。我使用宽度和高度为 3000 x 3000 的数组,并重复计算过程 20000 次:

在计算之前,我将我的矩阵从主机内存复制到 GPU 内存并创建一个array_view从 0 到 7 的代码行。

之后,我开始一个循环来计算一些操作并重复 20000 次。每次迭代我都会开始一个parallel_for_each循环,使用 C++ AMP 进行计算。

GPU计算非常快,但是当我将结果复制到主机时,array _main我发现这个操作需要很多时间,而且我发现如果我number从20000减少到2000,复制的时间也会减少。

为什么会发生这种情况,这是一些同步问题?

0 投票
1 回答
405 浏览

f# - C++ AMP 库对 F# 有用吗?

我正在尝试使用 F# 中的 C++ AMP 库作为使用 GPU 并行工作的一种方式。但是,我得到的结果似乎并不直观。

在 C++ 中,我用一个函数创建了一个库,该函数使用 AMP 对数组中的所有数字求平方:

(代码改编自 Igor Ostrovsky在 MSDN 上的博客。)

然后我编写了以下 F# 来将任务并行库 (TPL) 与 AMP 进行比较:

如果我将数组大小设置为像 10 这样的微不足道的数字,则需要 TPL ~22K 滴答声才能完成,AMP ~10K 滴答声才能完成。这就是我所期望的。据我了解,GPU(因此是 AMP)应该比 TPL 更适合这种情况,在这种情况下,工作被分成非常小的部分。

但是,如果我将数组大小增加到 1000,则 TPL 现在需要约 30K 滴答,而 AMP 需要约 70K 滴答。从那里开始变得更糟。对于 100 万大小的数组,AMP 所需的时间几乎是 TPL 的 1000 倍。

由于我希望 GPU(即 AMP)能更好地完成此类任务,我想知道我在这里缺少什么。

我的显卡是 1GB 的 GeForce 550 Ti,据我所知,这不是一个懒散的。我知道使用 PInvoke 调用 AMP 代码会产生开销,但我希望这是一个固定成本,可以在更大的数组大小上摊销。我相信数组是通过引用传递的(尽管我可能是错的),所以我不认为复制它会产生任何成本。

谢谢大家的建议。

0 投票
2 回答
525 浏览

c++-amp - C++ AMP如何在GPU内存中返回值?

假设我有一个这样的算法:

现在这在 CPU 和 CUDA 上都很好,我可以让函数返回指向 gpu 内存块的指针,然后让另一个函数消耗该中间值。

你如何在 C++ AMP 中做到这一点?我猜你必须使用 concurrency::array 对象,但我找不到任何这样做的示例代码。

0 投票
1 回答
557 浏览

c++ - 通过原始缓冲区数据缩放和旋转纹理到另一个纹理

我将此提交给gamedev,但它们似乎相当慢,所以我希望我能在这里找到答案。

我一直在搞乱 C++ AMP 和 OGRE,试图让我更容易根据自己的喜好写入/更改纹理。在这我一直试图在我的“动态”纹理上绘制一个纹理,结果很奇怪。我的图像的 3/4 似乎被裁剪掉了,这让我发疯,因为我似乎找不到修复方法。

这是问题的视频:http ://www.youtube.com/watch?v=uFWxHtHtqAI

为了便于理解,这里有所有必要的代码,即使内核确实是手头的问题所在:

动态纹理.h

主文件

如您所见,动态纹理是窗口的大小(在本例中为 800x600),minotaur.jpg 为 84x84。我只是将它放置在宽度和高度的一半(中心),将其旋转 ang(弧度),然后将其缩放为 4 倍。

在内核本身中,我只是遵循了一个 2D 旋转矩阵(其中 x 和 y 被参数“x”和“y”偏移):

另请注意, idx[1] 表示数组中的 x 值,而 idx[0] 表示 y,因为它的排列方式value = buffer[y + (x * height)](或类似的方式,但只要知道它的格式正确)。

感谢您的任何帮助!

问候, Tannz0rz

0 投票
1 回答
743 浏览

c++ - C++ AMP 在硬件上崩溃 (GeForce GTX 660)

我在编写一些 C++ AMP 代码时遇到问题。我已经包含了一个样本。它在模拟加速器上运行良好,但在我的硬件(Windows 7、NVIDIA GeForce GTX 660、最新驱动程序)上崩溃了显示驱动程序,但我看不出我的代码有任何问题。

我的代码有问题还是硬件/驱动程序/编译器问题?

0 投票
1 回答
605 浏览

microsoft-metro - 将 C++ AMP 与 Direct2D 结合使用

是否可以将 C++ AMP 生成的纹理用作屏幕缓冲区?

我想用我的 C++ AMP 代码(已经完成)生成一个图像,并使用这个图像来填充 Windows 8 Metro 应用程序的整个屏幕。图像每秒更新 60 次。

我一点也不精通 Direct3D。我使用 Direct2d 模板应用程序作为起点。

首先,我尝试直接从 C++ AMP 代码中的交换链操作缓冲区,但是任何写入该纹理的尝试都会导致错误。

在 GPU 上使用 AMP 处理数据,然后将其移动到 CPU 内存以创建可以在 D2D API 中使用的位图似乎效率低下。

有人可以分享一段代码,让我可以直接使用 C++ AMP 操作交换链缓冲区纹理(数据不离开 GPU),或者至少用来自另一个不离开 GPU 的纹理的数据填充该缓冲区?