【问题标题】:serial and parallel(using mpi) code for histogram of an image图像直方图的串行和并行(使用 mpi)代码
【发布时间】:2013-12-07 16:52:46
【问题描述】:

谁能帮我用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]++;
    }

【问题讨论】:

    标签: c parallel-processing mpi


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      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]++;
          }
      

      【讨论】:

      • 感谢您的帮助。我必须在 Windows 操作系统上使用 mpi 来实现它。
      猜你喜欢
      • 2016-01-20
      • 2013-12-20
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 2013-09-11
      相关资源
      最近更新 更多