问题标签 [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.
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
.
澄清
experimentData
array_view 有 M 行和 N列
experimentFactors
array_view 有 M行
gpgpu - 逐行填充 2D AMP 数组
假设我有一个如下所示的 CPU 端数据源:
假设里面的每个行向量都具有相同的大小(一个锯齿状的二维向量,不是锯齿状的)。
我想将其复制到数组内的单个 GPU 内存块。有没有办法逐行执行此操作?像这样的东西:
我知道这不会编译,它显示了我正在尝试做的事情。有什么东西可以做到这一点吗?我能找到的唯一解决方案是将 cpu 向量复制到一维向量中,并将其映射到 array_view,或者将其复制到数组中。
这行得通,但很浪费,而且对于某些算法,连续的一维向量可能不适合剩余的内存空间。
欢迎任何建议,因为我正在努力找出 AMP。
visual-c++ - DirectX 11.1 尝试创建设备以不触发超时检测恢复
我正在尝试使用 C++ AMP 在 GPU 上执行长时间运行的内核。这需要使用 DirectX 创建一个不会超时的设备。我正在设置标志,但它仍在触发超时检测恢复。我的盒子里有一个专用的 Radeon HD 7970,没有插入显示器。我还需要做些什么来防止 Windows 8 在内核完成之前取消它吗?
qt - 使用 qmake 编译 C++ AMP 失败
我有以下 main.cpp 文件:
和一个 .pro 文件:
如果我从 Visual Studio 2012 命令行编译 main.cpp(仅使用 cl /EHsc main.cpp),一切正常。但是如果我使用 qmake 和 nmake 总是会出现链接错误,即存在未解析的外部符号(来自 amp)。有谁知道如何解决这个问题?
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,复制的时间也会减少。
为什么会发生这种情况,这是一些同步问题?
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 代码会产生开销,但我希望这是一个固定成本,可以在更大的数组大小上摊销。我相信数组是通过引用传递的(尽管我可能是错的),所以我不认为复制它会产生任何成本。
谢谢大家的建议。
c++-amp - C++ AMP如何在GPU内存中返回值?
假设我有一个这样的算法:
现在这在 CPU 和 CUDA 上都很好,我可以让函数返回指向 gpu 内存块的指针,然后让另一个函数消耗该中间值。
你如何在 C++ AMP 中做到这一点?我猜你必须使用 concurrency::array 对象,但我找不到任何这样做的示例代码。
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
c++ - C++ AMP 在硬件上崩溃 (GeForce GTX 660)
我在编写一些 C++ AMP 代码时遇到问题。我已经包含了一个样本。它在模拟加速器上运行良好,但在我的硬件(Windows 7、NVIDIA GeForce GTX 660、最新驱动程序)上崩溃了显示驱动程序,但我看不出我的代码有任何问题。
我的代码有问题还是硬件/驱动程序/编译器问题?
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 的纹理的数据填充该缓冲区?