问题标签 [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 投票
3 回答
700 浏览

c++ - ppl 中的任务执行属性

C++ ppl 库中新创建的任务是否会自动执行,或者是否需要任何机制来启动上述任务的执行?

0 投票
0 回答
104 浏览

c++ - 将 std::bind 与 Concurrency::parallel_for 一起使用时编译失败

在将一些使用 boost 库的旧代码迁移到 C++11 时遇到一个奇怪的编译错误。具体来说,使用 Visual Studio 2013 Professional Update 5。

以下示例代码无法编译并出现错误 C3848。但是,如果您将调用更改std::bindboost::bind,则代码将按预期编译。

我期待std::bind并且boost::bind完全可以互换,但事实并非如此。

谁能建议如何使用上面的示例进行编译std::bind

0 投票
0 回答
69 浏览

c++ - 了解 work_queue 和 create_thread C++

了解 work_queue 或 create_thread 之间的区别。我对 work_queue 的理解是它在内核上执行线程,这些线程彼此异步工作,因为它们能够休眠和被调度。我对 create_thread 的理解是,在执行时分配了一个作业,并且只有该作业并通过操作系统执行。

提问的原因:所以我们在我的并行处理类中使用了parallel_for,但我有点困惑。所以 p_f 在 create_thread 上使用 work_queue 但我不确定我明白为什么。Create_thread 将创建 n 个线程(由函数指定),以便在工作队列根据可用的 cpu 数量创建线程时执行某些操作。这就是 p_f 使用 work_queue 而不是 create 线程的原因吗?感谢帮助!

0 投票
1 回答
359 浏览

c++ - 使用 PPL 查找数组中的最大元素

我需要实现一个函数,该函数将使用ppl.h.

我有这个代码,基于这个答案

但是,这段代码有一个问题:

  • 它在执行之前抛出以下异常:

错误 C2780 'void Concurrency::_Parallel_for_each_impl(const _Random_iterator &,const _Random_iterator &,const _Function &,_Partitioner &&,std::random_access_iterator_tag)':需要 5 个参数 - 4 个提供的 parp D:\Microsoft Visual Studio 14.0\VC\include\ ppl.h 2987

错误 C2780 'void Concurrency::_Parallel_for_each_impl(_Forward_iterator,const _Forward_iterator &,const _Function &,const Concurrency::auto_partitioner &,std::forward_iterator_tag)':需要 5 个参数 - 4 个提供的 parp D:\Microsoft Visual Studio 14.0\VC\包括\ppl.h 2987

错误 C2893 无法专门化函数模板 'iterator_traits<_Iter>::iterator_category std::_Iter_cat(const _Iter &)' parp D:\Microsoft Visual Studio 14.0\VC\include\ppl.h 2987


  1. 你能帮我解决这个问题吗?

  2. 如何重写代码以使用parallel_for?(我无法引用传递给parallel_for块中函数的数组参数)

0 投票
1 回答
1191 浏览

c++ - 在数组中查找最大元素 OpenMP 和 PPL 版本的运行速度比串行代码慢得多

我正在尝试实现一个函数的两个版本,该函数将在浮点数组中找到最大元素。但是,我的并行函数似乎比串行代码运行得慢得多。

使用 4194304 (2048 * 2048) 浮点数组,我得到以下数字(以微秒为单位):

  • 序列号:9433

  • PPL 代码:24184(慢两倍以上

  • OpenMP 代码:862093(几乎慢了100

这是代码:

PPL:

开放式MP:


  1. 是什么让代码运行如此缓慢?我错过了什么吗?

  2. 你能帮我找出我做错了什么吗?

0 投票
1 回答
109 浏览

c++ - 解释此 Concurrency::Task 调用中的“=”符号参数

有人可以向我解释这段代码中“=”参数的用途吗?我可以使用哪些其他参数来代替=?它会有什么不同?MSDN 在这个问题上不是很清楚。

0 投票
1 回答
727 浏览

ppl - PPL:错误 C3861:“parallel_for”:找不到标识符

使用 win7 x86 和 vs2012 我有这样的代码:

得到一个这样的错误 error C3861: 'parallel_for': identifier not found
but visual studio 给出了“goto definition”,我有一个非常相似的项目,它编译得很好。而 vs 可以“-”我的 parallel_for 抽象

0 投票
1 回答
495 浏览

sockets - Windows 10 套接字和 MS PPL。服务器和客户端之间的 TCP 连接在几秒钟后中断

我的系统:

服务器:Windows 10 Pro 1511 10586.36 Microsoft Visual Studio 2015 社区 14.0.24720.00 更新 1

客户端:Windows 10 IoT Core(内部版本 10586)Raspberry Pi 2。

我的错误:

连接建立成功,但在正常工作几秒钟后丢失。所以数据交换实际上是有效的,但在 Release 版本中只有几秒钟,而在 Debug 版本中大约是 40-60 秒。

我总是得到:

我有时在客户端,有时在服务器端收到这些错误。

我阅读了 MS 示例 - https://code.msdn.microsoft.com/windowsapps/StreamSocket-Sample-8c573931。我还发现了如何使用 SocketStream 对象实现异步读/写操作的多种方法 - https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/DataReaderWriter

但我无法实现稳定的工作。下面是代码。

服务器端:

客户端:

我觉得某些东西(内部缓冲区或线程池)开销很大,这会导致异常。

可以请任何人解释一下吗?

0 投票
1 回答
1295 浏览

c++ - 如何在循环中使用 ppl 任务和 .then?

我正在努力学习 ppl。而不是使用线程。让我们从头开始。我有这个简单的问题:

v1:

v1 显然很糟糕,因为这两个调用都会阻塞并最终相互等待。

v2:

v2 更好,因为不重要的消息不会阻塞重要的消息。此外,重要消息在收到后也会在实例中进行处理。尽管在我们收到重要消息之前不会检查不重要的消息。因此,当我收到这条不重要的信息时,它可能已经 20 多岁了。

v3:

v3 更快地获取不重要的消息。但它对于重要消息的速度也较慢。重要消息的处理不会在收到后立即进行。但只有当我四处检查时。由于我添加了睡眠以避免忙等待(并消耗过多的 cpu 时间),因此接收和处理重要消息的时间将比使用 v2.0 更长。

v4:

V4 与 v3 相同。只是用 ppl 任务代替。它的问题是一旦收到重要消息就不能立即处理。

v5)我想删除睡眠并使用important_msg_task“.then”在收到它后触发处理,“.then”在处理旧消息后侦听新消息,“.then”处理新消息等(对 unimportant_msg_task 执行相同的操作)。我不知道如何在循环中完成此操作。看来我最终会得到一个不断增长的连接任务链,一个接一个,永远。

那么你如何用 ppl 解决这个问题(或者至少没有原始​​线程)?

0 投票
1 回答
72 浏览

c++ - 如何在循环中等待两个不同类型的东西?

如何同时等待两件或多件事情(不同类型)?就像在事件循环中一样: