问题标签 [ppl]

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 回答
333 浏览

c++ - 从文件并发处理

考虑以下代码:

我想让这段代码尽可能快地并行。

使用PPL将其并行化的一种方法是:

这种方法的问题是我想在同一个线程中处理数据(适合 CPU 缓存),因为它被读入内存(数据在缓存中很热),这不是这里的情况,它只是浪费了使用热数据的机会。

我有两个想法如何改进这一点,但是,我也无法实现。

  1. 在单独的任务上开始下一次迭代。

    /li>
  2. 使用内存映射文件并映射文件的所需区域,而不是仅仅从具有正确偏移量的指针中读取。使用 处理数据范围parallel_for_each。但是,我不了解内存映射文件在何时读取到内存和缓存注意事项方面的性能影响。也许我什至不必考虑缓存,因为文件只是 DMA:d 到系统内存,从不通过 CPU?

有什么建议或意见吗?

0 投票
2 回答
398 浏览

c++ - C++ catch 由 PPL parallel_for 引发的错误

我编写了这段代码来捕获 ppl 发起的错误

尽管我强烈怀疑它确实引发了异常,但没有发现任何错误(try{}catch(...){}它捕获一个更大的std::exception,没有明确的消息。

我对捕获 ppl 代码中引发的异常的语法是否正确?

0 投票
1 回答
2834 浏览

c++ - 上下文“use_current”的任务继续不起作用

自三天前以来,我一直在尝试寻找答案。要么我做了一些根本错误的事情(有一个明显的错误),要么事情太新而没有任何参考,我似乎无法理解为什么像这样的简单案例会失败。

下面的代码在一个Windows Store应用中使用了C++中的PPL任务库,模拟了一个文件加载操作,需要2秒才能跳出循环(当然这是为了用最少的代码说明问题,真正的循环做了其他渲染也显示进展)。

如果我使用“use_current”作为延续上下文,则代码的延续部分(即“fileLoaded = true”)永远不会被调用:

如果我使用“use_default”或“use_arbitrary”,并且将“fileLoad”正确设置为“true”,则相同的代码可以工作。此代码可以放置在 Windows 应用商店 C++ 应用程序(例如 Direct2D 应用程序)中的任何位置,但它会失败(我已将其放置在“DirectXPage::DirectXPage”构造函数主体中,我希望它是主 UI 线程)。我做错了什么可怕的事情吗?

在此先感谢您的帮助!:)

0 投票
1 回答
551 浏览

c++ - 如何使用 Microsoft PPL 轻量级任务计划程序实现回退?

我们使用 PPL Concurrency::TaskScheduler将事件从我们的媒体管道分派到订阅的客户端(通常是 GUI 应用程序)。

这些事件是传递给Concurrency::TaskScheduler::ScheduleTask()的 C++ lambda 。

但是,在负载下,管道生成事件的速率可能高于客户端消耗它们的速率。

如果计划任务的“队列”大于 N,是否可以使用 PPL 策略使事件调度程序不对事件(实际上是计划任务)进行排队?如果没有,我将如何推出自己的产品?

0 投票
1 回答
926 浏览

task - VC++ PPL,将调度程序分配给 task_group

假设我们有一个类:

如何将调度程序分配给此 task_group?我不想使用默认调度程序,因为我还在代码的其他地方使用了 parallel_for。

task_group 将通过调度程序设置其最大并发级别,以根据小时使用所有内核或它们的子集。应用程序可能会运行数小时,因此需要更改 maxconcurrency。

我在 PPL 中找不到这样做的好方法。在 .NET 中,这很容易——您所要做的就是设置 MaxDegreeOfParallelism。

有任何想法吗?

0 投票
2 回答
8275 浏览

c++ - .then 在 PPL 任务中构造的目的是什么?

我很有趣 .then 在 PPL 中构造的目的是什么,我在哪里可以测试它?似乎 Visual Studio 2012 还不支持它(可能是一些未来的 CTP?)。它在标准 C++11 异步库中有等价物吗?

0 投票
1 回答
450 浏览

winforms - 在 VC++ 中使用“VS2010 并行模式库”

我创建了一个 vc++ windows 窗体应用程序(VS 2010),当我尝试包含 ppl.h(并行模式库)时,出现以下编译错误。

错误:编译 /clr 时不支持并发运行时。c:\Program 文件 (x86)\Microsoft Visual Studio 10.0\VC\include\concrt.h 27"

我想在我的程序中使用“VS 2010 Parallel Patterns Library”提供的“parallel_for”算法。

谁能告诉我如何克服上述问题以及如何在 Windows 窗体应用程序中使用“并行模式库”?

0 投票
1 回答
64 浏览

c++ - 在每对上同时运行

我有很多对象。我需要同时处理每一(不是每一对,任意配对),但每个对象应该只串行处理。

我正在努力描述一种可以处理这个问题的算法,最好不涉及一堆锁。我从 Microsoft 获得了 PPL,因此我可以使用一些相当高级的并发函数。

最后,很多时候我会处理每个对象很少的配对——零和特别常见的配对。但多对多配对是我必须处理的边界条件。

对这种算​​法有什么建议吗?

0 投票
2 回答
690 浏览

c++ - 立即执行 .then

由于 C++11 没有future.then我已经concurrency::task从 MicrosoftPPL库开始使用。它大部分时间都很好用。

但是,现在我处于使用 GPGPU 的情况,因此在调度程序中PPL安排 .then 延续会导致 GPU 空闲时出现不必要的延迟。

我的问题是是否有任何可能的解决方法concurrency::taskconcurrency::task::then让它们直接执行。

据我了解,由于缓存效率的原因,在大多数情况下,定期安排的任务会立即继续执行。但是,对于从显式线程(即 GPU 线程)使用concurrency::task_completion_event.

我正在做的一个例子:

0 投票
1 回答
1089 浏览

windows-runtime - WinRT C++/CX 任务未编译

我正在尝试使用 C++/CX 创建 WinRT 组件。我有以下代码,但无法编译。它有什么问题?据我了解,PPL 任务应该透明地转换为 IAsyncOperation 如果它是一个有结果的任务。

错误信息