Calculate the histogram with OpenMP

前端 未结 3 696
礼貌的吻别
礼貌的吻别 2020-12-20 03:56

I want to parallelize this code getting the best performance. \"histogram\" stores number of appareances of a certain colour (there are 10 different colours, so the size of

3条回答
  •  隐瞒了意图╮
    2020-12-20 04:41

    I already went into detail on how to to this here Fill histograms (array reduction) in parallel with OpenMP without using a critical section

    It's the same as an array reduction. OpenMP does not have built in support for this in C/C++ (but it does in Fortran) so you have to do it yourself.

    The easy solution is to create private version of the histogram, fill them in parallel, and them merge them into one histogram in a critical section. In your case you can do that like this:

    int i, histogram[10];
    for(i=0; i<10; i++) histogram[i] = 0;
    #pragma omp parallel
    {
        int i, j, histogram_private[10];
        for(i=0; i<10; i++) histogram_private[i] = 0;
        #pragma omp for nowait
        for(i=0; i

    It's possible to merge in parallel as well but that's more complicated. See the first link I mentioned for more details.

提交回复
热议问题