Tbb对具有不同深度的图像的卷积进行了并行化
Tbb-parallelized convolution of images with different depths
我想使用tbb(parallel_fo模式)同时卷积大量图像——每个处理器的核心convolves
单个图像。然而,图像的深度不同:monograyscale(1-channel)
、stereograyscale(2-channel)
、monorgb(3-channel)
、stereorgb(6-channel)
等。
事实证明,不同线程(核心)上的工作负载不断变化。如何在这个任务中正确使用parallel_fo,或者我应该考虑其他并行模式?
形式为parallel_fo(first,last,lambda)的tbb::parallel__for执行一些负载平衡。你可以先试试。尽管它有一个猜测好粒度的启发式方法,有时会被愚弄。
为了获得最佳负载平衡,可能会以每次迭代额外开销为代价,请使用粒度为1的基于范围的tbb::parallel_fo和simple_partitor。这迫使每个迭代作为一个单独的任务运行,从而为TBB运行时提供了最大的灵活性来重新平衡负载。下面是一个执行100次迭代的示例,每次迭代都有一个随机延迟。
#include <tbb/parallel_for.h>
#include <unistd.h>
int main( int argc, char* argv[] ) {
tbb::parallel_for(
tbb::blocked_range<int>(0,100,1), // Interval [0,100) with grainsize==1
[&](tbb::blocked_range<int> r) {
for( int i=r.begin(); i!=r.end(); ++i ) {
printf("%dn",i);
usleep(random()%1000000);
}
},
tbb::simple_partitioner());
}
相关文章:
- 具有可分离内核的 2D 模糊卷积
- CUDA 使用共享内存平铺 3D 卷积实现
- OpneCV - 保留十进制的卷积
- C++中复向量与实向量的二维卷积
- 如何在张量流上使用 fp16(Eigen::half) 进行卷积
- 如何在卷积程序的 c++ 中优化嵌套循环
- 带有多通道内核的图像卷积
- 在 Caffe 中,如何修改特定卷积层的行为?
- 使用膨胀卷积的语义分割中的上采样
- 使用 OpenCL 进行图像卷积中的参数大小无效
- C++的全卷积网络训练
- 卷积二维与深度卷积二维计算
- 优化的图像卷积算法
- 使用高斯模糊进行图像卷积,可以加速
- 图像卷积和边界
- 如何使用fftw包编写计算模板(T)和二维图像(亚胺)之间二维卷积的函数
- 在opencv c++中查找图像卷积时出现分割错误(核心转储)
- Tbb对具有不同深度的图像的卷积进行了并行化
- 在x方向上对图像的每一行进行一维卷积
- 卷积模糊图像产生一个粗略的输出图像