- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经开始尝试使用 C++ AMP。我创建了一个简单的测试应用程序只是为了看看它可以做什么,但是结果让我很惊讶。考虑以下代码:
#include <amp.h>
#include "Timer.h"
using namespace concurrency;
int main( int argc, char* argv[] )
{
uint32_t u32Threads = 16;
uint32_t u32DataRank = u32Threads * 256;
uint32_t u32DataSize = (u32DataRank * u32DataRank) / u32Threads;
uint32_t* pu32Data = new (std::nothrow) uint32_t[ u32DataRank * u32DataRank ];
for ( uint32_t i = 0; i < u32DataRank * u32DataRank; i++ )
{
pu32Data[i] = 1;
}
uint32_t* pu32Sum = new (std::nothrow) uint32_t[ u32Threads ];
Timer tmr;
tmr.Start();
array< uint32_t, 1 > source( u32DataRank * u32DataRank, pu32Data );
array_view< uint32_t, 1 > sum( u32Threads, pu32Sum );
printf( "Array<> deep copy time: %.6f\n", tmr.Stop() );
tmr.Start();
parallel_for_each(
sum.extent,
[=, &source](index<1> idx) restrict(amp)
{
uint32_t u32Sum = 0;
uint32_t u32Start = idx[0] * u32DataSize;
uint32_t u32End = (idx[0] * u32DataSize) + u32DataSize;
for ( uint32_t i = u32Start; i < u32End; i++ )
{
u32Sum += source[i];
}
sum[idx] = u32Sum;
}
);
double dDuration = tmr.Stop();
printf( "gpu computation time: %.6f\n", dDuration );
tmr.Start();
sum.synchronize();
dDuration = tmr.Stop();
printf( "synchronize time: %.6f\n", dDuration );
printf( "first and second row sum = %u, %u\n", pu32Sum[0], pu32Sum[1] );
tmr.Start();
for ( uint32_t idx = 0; idx < u32Threads; idx++ )
{
uint32_t u32Sum = 0;
for ( uint32_t i = 0; i < u32DataSize; i++ )
{
u32Sum += pu32Data[(idx * u32DataSize) + i];
}
pu32Sum[idx] = u32Sum;
}
dDuration = tmr.Stop();
printf( "cpu computation time: %.6f\n", dDuration );
printf( "first and second row sum = %u, %u\n", pu32Sum[0], pu32Sum[1] );
delete [] pu32Sum;
delete [] pu32Data;
return 0;
}
请注意,Timer
是一个使用 QueryPerformanceCounter 的简单计时类。无论如何,代码的输出如下:
Array<> deep copy time: 0.089784
gpu computation time: 0.000449
synchronize time: 8.671081
first and second row sum = 1048576, 1048576
cpu computation time: 0.006647
first and second row sum = 1048576, 1048576
为什么调用 synchronize() 需要这么长时间?有没有办法解决这个问题?除了计算性能令人惊叹之外,sync() 开销让我无法使用它。
也有可能是我做错了什么,如果是这样,请告诉我。提前致谢。
最佳答案
函数 synchronize() 可能需要很长时间,因为它正在等待实际的内核完成其工作。
来自 parallel_for_each from amp.h :
Please note that the parallel_for_each executes as if synchronous to the calling code, but in reality, it is asynchronous. I.e. once the parallel_for_each call is made and the kernel has been passed to the runtime, the [code after the parallel_for_each] continues to execute immediately by the CPU thread, while in parallel the kernel is executed by the GPU threads.
因此,衡量在 parallel_for_each 中花费的时间并没有特别的意义。
编辑:算法的编写方式不会从 GPU 加速中受益。 source[i] 的读取是非合并的,因此它将比合并读取慢 16 倍。可以通过使用共享内存来合并读取,但这并不是很简单。我建议阅读 GPU 编程。
如果您只是想要一个演示 C++ AMP 实用程序的简单示例,请尝试 matrix multiplication .
当然,您观察到的性能也很大程度上取决于您的 GPU 硬件型号。
关于c++-amp - 为什么对 array_view::synchronize() 的调用这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9844559/
我正在关注 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 有什么解决办法吗? 最佳答
我是一名优秀的程序员,十分优秀!