c++ - 图像处理中的并发设计

标签 c++ multithreading c++11 concurrency

我是本主题的新手,我需要为包含以下任务的程序设计并发性:

  • 从数据库加载图像(100毫秒)
  • 查找图像的一些元数据(50毫秒)
  • 将图像转换为灰度。 (100ms)
  • 查找灰度图像中的所有对象。 (600毫秒)
  • 裁剪包含对象的图像部分。 (100毫秒/对象)
  • 将数据(原始图像,元数据和新裁剪的图像)保存在数据库中(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
    ...
    

    最佳答案

    您可以将工作负载分解为任务,它们之间具有依赖性。并使用Intel Task Scheduler执行并自动并行化您的工作负载。参见Tutorial : Task Based Programming

    为了获得更多的见识,我不建议您足够观看Plain Threads are the GOTO of todays computing - Hartmut Kaiser - Keynote Meeting C++ 2014

    关于c++ - 图像处理中的并发设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60498222/

    相关文章:

    C++ opencv自定义阈值

    c++ - 生产者-消费者队列- std::queue 还是用户编写的链表?

    C++将解析器的结果放入数组

    c++ - 使用精神以替代方式解析结构时混淆输出

    c# - c#中的方法锁

    C++动态检测参数类并将其转换为

    c++ - 快速 SSE 射线 - 4 个三角形相交

    c++ - 共享指针谓词;

    c++ - boost socket 的函数在哪里读取

    python - 如何将异步生成器合并到 python 3.5+ 中的普通生成器中