用于图像直方图的串行和并行(使用mpi)代码

时间:2013-11-22 17:40:27

标签: c parallel-processing mpi

任何人都可以帮我编写用c语言生成图像直方图的代码吗?我知道基本逻辑但不能编写代码。我想要一个并行程序。

 for(i=0; i<256;i++)
 histogram[i]=0;   
  for(i=0;i<m;i++)
   for(j=0;j<n;j++)
   {
    color=image[i][j];
    histogram[color]++;
    }

2 个答案:

答案 0 :(得分:0)

我想我会使用线程(与进程)来并行化这个任务(在Unix上使用pthreads)。这样,所有线程都可以共享相同的数据池(而不是必须跨进程边界复制大量的图像数据)。

一种方法是查询系统调用以确定系统有多少CPU线程(n)。然后,分配(n)单独的直方图数组。将图像划分为(n)个水平切片。然后,创建(n)个线程并向每个线程传递一个不同的数字(1..n)。每个线程将处理不同切片的直方图数据,并将结果放在不同的直方图阵列中。

主线程等待(n)工作线程完成,然后将(n)直方图数组加到最终的直方图数组中。

这是解决问题的一种方法。

答案 1 :(得分:0)

OpenMP让这很简单:

#pragma omp for
 for(i=0; i<256;i++)
 histogram[i]=0;   
  for(i=0;i<m;i++)
   for(j=0;j<n;j++)
   {
    color=image[i][j];
    histogram[color]++;
    }