c++ - 图像处理中的并发设计
问题描述
我是这个主题的新手,我需要为包含以下任务的程序设计并发:
- 从数据库加载图像(100ms)
- 查找图像的一些元数据(50ms)
- 将图像转换为灰度。(100 毫秒)
- 查找灰度图像中的所有对象。(600 毫秒)
- 裁剪包含对象的图像部分。(100ms/对象)
- 将数据(原始图像、元数据和新裁剪的图像)保存在数据库中(100 毫秒)
我如何设计程序以并发方式运行?
我发现第2步独立于第3、4、5、6步,所以可以并行运行如下:
1->2 -> 6
3->4->5
但是,由于任务 2 只有 50 毫秒,任务 6 需要完成所有任务 2、3、4、5 才能执行。如何指定任务 2 需要“等待”其他任务?
要同时运行,这个问题的合理模式是什么?可能会出现什么样的问题?我正在考虑这样的“管道模式”。但不确定是否有更有效的模式
1->2 -> 6
3->4->5
1->2 -> 6
3->4->5
1->2 -> 6
3->4->5
...
解决方案
您可以将工作负载分解为任务之间存在依赖关系的任务。并使用英特尔 Task Scheduler 执行并自动并行化您的工作负载。请参阅教程:基于任务的编程。
要获得更多见解,我不能推荐足够多的观看纯线程是当今计算的 GOTO - Hartmut Kaiser - Keynote Meeting C++ 2014。
推荐阅读
- javascript - 上传完成前通过 Web Socket 中断文件上传
- clojure - 您如何在 clojure 中将哈希图的其余部分作为新的哈希表?
- html - 媒体查询在 html 电子邮件中不起作用吗?
- react-redux - 如何测试动作创建者调度正确的动作?
- php - 作曲家搜索错误“没有足够的参数(缺少:“令牌”)”
- abap - PBO 不能使用 Select Single
- r - R中的数值问题
- google-apps-script - 使用带有 GAS 的 Mailjet API 发送邮件
- android - 谷歌地图 - 常见案例定价混淆
- filter - Power BI 中的相关主题