Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 图像直方图的串行和并行(使用mpi)代码_C_Parallel Processing_Mpi - Fatal编程技术网

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

C 图像直方图的串行和并行(使用mpi)代码,c,parallel-processing,mpi,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]++; } for(i=0;i我想我应该使用线程(vs.进程)来并行化这个任务(Unix上的pthreads)。这

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

for(i=0;i我想我应该使用线程(vs.进程)来并行化这个任务(Unix上的pthreads)。这样,所有线程都可以共享相同的数据池(而不必跨进程边界复制大量的图像数据)

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

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

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

使这一点变得简单明了:

#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]++;
    }
#pragma omp for

for(i=0;ithnx)谢谢你的帮助。我必须在windows操作系统上使用mpi实现它。