- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下问题:
我有一个代码可以执行非常基本的操作。我正在传递一个指向 concurrency::array_view 的指针,因为我想更早地存储值以避免使用多线程的函数中的瓶颈。问题是以下结构无法编译:
parallel_for_each((*pixels).extent, [=](concurrency::index<2> idx) restrict(amp)
{
int row=idx[0];
int col=idx[1];
(*pixels)(row, col) = (*pixels)(row, col) * (*taps)(row, col); //this is the problematic place
});
有人知道如何解决这个问题吗?我真的需要在运行该方法之前准备数据,所以这是这样做的唯一方法,因为我不能花时间在 RAM 和加速器内存之间复制数据。
//编辑:
在解决了头文件的一些问题后,我留下了以下问题:
parallel_for_each((*pixels).extent, [=](concurrency::index<2> idx) restrict(amp)
{
int row=idx[0];
int col=idx[1];
});
上面的代码不起作用(它给出了异常)。是否有任何方法可以更早地准备数据,例如类的构造函数可以处理一次复制?我真的需要在我的头文件中有一个指向 array_view 的指针,并在构造函数中初始化它,如下所示:
在 cci_subset.h 中:
concurrency::array_view<float, 2> *pixels, *taps;
在 subset.cpp 中:
concurrency::array_view<float, 2> pixels(4, 4, pixel_array);
...
concurrency::array_view<float, 2> taps(4, 4, myTap4Kernel_array);
//编辑2:
我发现 parallel_for_each 的参数只能按值传递。这就是为什么我仍在寻找一种方法来在初始化类或将一些参数(即图像数据)传递给类时将值从 CPU 复制到 GPU。
最佳答案
您的 C++ AMP 问题
C++ AMP 支持在 GPU 上引用数据的两种核心数据类型
An array represents data on an accelerator. You can construct it andfill it with data in a single step or construct it and fill it withdata later. In either case, after some calculations have beenperformed on it, you will almost certainly copy the results from anarray back to the CPU so that you can use them in some other part ofyour application.
You can certainly write useful applications using only arrays,but C++ AMP also offers the array_view, which supports featuresthat often make it more convenient than working directly with arrays.An array_view looks like an array to the accelerator, but it saves youthe trouble of arranging to copy the data to and from theaccelerator.
The relationship between an array_view and an array issomewhat (but not precisely) like that between a reference and theobject it refers to. Like a reference, array views must be initializedwhen they are created. Also as with a reference, changing thearray_view changes (eventually) the data it was created from. However,the reverse is not true: changing the data from which thearray_view was created might not automatically change the array_view,so you should approach such operations with care.
发件人:C++ AMP: Accelerated Massive Parallelism
我不认为你使用 pixels
本身就是问题。您不能在 C++ AMP lambda 期间使用全局范围的变量。没有办法解决这个问题。 C++ AMP 代码在具有不同内存空间的设备上执行。
但是您可以初始化您的 array
或 array_view
早先在单独的方法或构造函数中创建对象,然后将它们传递给完成所有工作的函数。下面的代码按照这些思路做了一些事情。 m_frames
是指向 (C++ AMP) array
的指针数组声明为类的一部分然后在 ConfigureFrameBuffers
中初始化的对象.
请注意,它使用 STL 智能指针,我强烈推荐使用原始指针。
class FrameProcessorAmpBase
{
private:
std::shared_ptr<array<float, 2> m_frame;
public:
FrameProcessorAmpBase()
{
}
void ConfigureFrameBuffers(int width, int height)
{
m_frame = std::make_shared<array<float, 2>>(height, width));
}
您的最小/最大 header 问题
这可能是因为您包含了 windef.h 或依赖它的东西。这是混合 STL 和 Windows header 时的一个已知问题。 “修复”它的方法是定义 NOMINMAX
在文件的顶部,在任何其他包含之前,然后使用 STL 或 AMP 声明的最小/最大函数(它还定义了用于 restrict(amp)
lambda 的最小/最大函数)。
#define NOMINMAX
如果您使用的是 GDI,您也会遇到问题,因为它需要 Windows MIN/MAX 宏。
我将 GIDPlus.h 包装在包含以下内容的包装器 header 中:
#pragma once
#define NOMINMAX
#include <algorithm>
#ifndef max
#define min std::min
#endif
#ifndef min
#define max std::max
#endif
#include <gdiplus.h>
#undef max
#undef min
关于c++ - 在 C++Amp 中使用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20936445/
我正在关注 this关于在自己的网站中集成 Paypal 的教程。 例如,在页面中的第 3 步的第 20 行,我发现了这个: if (!isset($_POST["txn_id"]) &
amp-story 是否与 amp-access(或 amp-subscription)一起使用? 这里是 amp-access 的示例代码 { "authorization": "
我在一个主题中有几个非 AMP 页面。我的非 AMP 页面将在文章正文中包含指向同一主题中其他非 AMP 页面的链接。页面的 AMP 版本应该链接到同一主题中的其他 AMP 页面,还是文章中的所有链接
这是我正在尝试做的事情: 使用 google API 对邮政编码或城市和州进行地理定位。地址参数的值来自表单字段。 将地理线插入同一表单中的隐藏字段 提交表格。 我已经尝试使用 AMP-LIST 和
搜索控制台添加了一系列“引用的 AMP 网址不是 AMP”问题。 如果我使用 AMP Test我得到: 但是,当我 checkin https://validator.ampproject.org/时
更具体地说,您可以在未通过 AMP 验证的页面上使用 AMP 标记和代码吗? 用例:我想使我的网站完全使用 AMP,为此,我需要使用类似 on='tap:' 的东西对于我的下拉菜单和 用于跟踪,但我网
更具体地说,您可以在未通过 AMP 验证的页面上使用 AMP 标记和代码吗? 用例:我想使我的网站完全使用 AMP,为此,我需要使用类似 on='tap:' 的东西对于我的下拉菜单和 用于跟踪,但我网
如何使用 amp-list、amp-mustache、amp-form 和 amp-bind 实现自动建议? 想要为页内搜索实现自动建议 研究过这个Google example 希望autosugge
我想知道如何根据用户选择的选项获取文本内容并将其设置为amp-state。例如,如果用户选择“红色”选项。我想将“胭脂”设置为 amp-state 而不是“红色”。我知道我可以通过 setState
示例:- Open Iframe in Lightbox 我还尝试从顶部操纵 iFrame 的位置 75% 或 600px,但它也不起作用。 AMP iFr
我有一个名为 currentItem 的状态,其中包含 url、标题、描述...当我按下按钮时,currentItem 应保存在名为 myItems 的其他状态中。它将包含一个项目对象列表。 现在的问
我是 Azure SQL 数据库的新手(之前没有数据库经验),目前正在尝试从 microsoft learn 获得学位。我被困在这节课中,似乎无法弄清楚,但我认为这很容易。问题: PS /home/s
我正在尝试测试新的 amp-script 功能有多强大。但是,我收到此错误: Experiment "amp-script" is not enabled. log.js:187 "E
我在 AMP 结合 amp-state 和 amp-position-observe 时遇到问题。 { "visible": "n"
有 3 种方法可以将 AMP 与 PWA 结合起来(如 here 中所述): 具有 PWA 功能的 AMP 页面 AMP 作为 PWA 的入口点 AMP 作为 PWA 的数据源 在第一种和第三种方法中
我在 AMP 结合 amp-state 和 amp-position-observe 时遇到问题。 { "visible": "n"
我有一个 amp 故事,我需要从动态生成的 url 创建一个包含全屏视频的页面。在下面的第 2 页中,我直接使用 amp-video 组件呈现全屏,在第 3 页中,我使用 amp-list 提供视频
查看 AMP 规范,鉴于自定义样式元素依赖于 CSS 变量,这意味着当前的浏览器支持范围很窄。见:Can I use reference 我猜非自定义样式有一个“优雅的回退”,因为不理解 CSS 变量
我是 AMP 的新手。我有一个响应式网站,我需要在其主页上实现 AMP。是否可以使其与 AMP 兼容而不影响桌面 View ?或者我需要为 AMP 重写单独的代码? 最佳答案 您可以使用@media来
我在实现 amp-iframe 时在控制台中收到以下验证错误: Overflow element must be defined for resizable frames 有什么解决办法吗? 最佳答
我是一名优秀的程序员,十分优秀!