【发布时间】:2014-08-06 00:46:22
【问题描述】:
管道任务如下:
- 顺序读取大量(10-15k)~100-200 Mb 压缩文件
- 并行解压每个文件
- 并行反序列化每个解压文件
- 处理结果反序列化对象并根据所有对象(平均值、中位数、分组等)获取一些值
当我得到解压缩的文件内存缓冲区时,序列化块一个接一个,所以我想以相同的方式将它们传递给下一个过滤器,或者至少通过将序列化块打包成一些组来调整这个过程编号,然后通过。但是(据我了解) tbb_pipeline 使我将指针传递给带有所有序列化块的缓冲区,因为每个过滤器都必须获取指针并返回指针。
据我了解,使用并发队列来累积序列化对象包会扼杀使用 tbb_pipeline 的问题。此外,过滤器中 operator() 的常量不允许有我自己的中间“任务池”(但是如果每个线程都有自己的“任务”存储本地副本并且只是正确切割从它的碎片,它会很棒)
主要问题: 在这种情况下有没有办法“调整”粒度? (即某些过滤器获取指向所有序列化对象的指针并传递给下一个过滤器小包对象)
重新格式化(分割等)输入文件几乎是不可能的。
次要问题: 当我积累处理结果时,我并不关心任何一种顺序,我只需要汇总统计信息。我可以使用 parallel 过滤器而不是 serial_out_of_order 并在某处为每个线程累积处理结果,然后合并它们吗?
【问题讨论】:
标签: c++ multithreading pipeline tbb