- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚读到这个:
因为 Concurrency::completion_future
的功能似乎模仿了 std::future
我想我可以做类似的事情,但是这个相对简单的例子失败了:
#include <assert.h>
#include <chrono>
#include <iostream>
#include <amp.h>
int main()
{
using namespace Concurrency;
int big = 1000000; // this should take a while to send back to the host
array_view<int> av(big);
parallel_for_each(extent<1>(big), [=](index<1> idx) restrict(amp)
{
av[idx] = idx[0];
});
int i = 0;
completion_future future = av.synchronize_async();
// this should be false; how could it instantly sent back so much data?
bool const gpuFinished = future.wait_for(std::chrono::seconds(0)) == std::future_status::ready;
assert(!gpuFinished); // FAIL! why?
future.wait();
system("pause");
}
为什么断言会失败?
最佳答案
在 OP 中观察到的行为是正确的。
array_view<int> av(big)
创建一个数组 View 没有数据源,而av.synchronize_async()
将修改同步到数据源。因此,对于没有数据源的 array_view,根据定义,它是无操作的。通过扩展,它也不会强制执行前面的 parallel_for_each
.
如果目的是将数据同步到 CPU 内存,在这种情况下需要使用 av.synchronize_to_async(accelerator(accelerator::cpu_accelerator).default_view)
显式请求。 .当然返回了completion_future
只有在前面的 parallel_for_each
时才准备就绪和(可选)复制操作完成。
将前者的同步调用替换为后者会使断言成功,请记住,它在具有 CPU 共享内存的系统上或在某些罕见的时机上仍可能(按设计)失败。
关于c++ - 如何获取 Concurrency::completion_future 的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19995996/
我刚刚读到这个: Get the status of a std::future 因为 Concurrency::completion_future 的功能似乎模仿了 std::future 我想我可
我是一名优秀的程序员,十分优秀!