Using OpenMP critical and ordered

前端 未结 2 1011
旧巷少年郎
旧巷少年郎 2021-01-13 19:16

I\'ve quite new to Fortran and OpenMP, but I\'m trying to get my bearings. I have a piece of code for calculating variograms which I\'m attempting to parallelize. However, I

2条回答
  •  感动是毒
    2021-01-13 19:43

    High Performance Mark makes an interesting point about floating point and associativity. This can easily be tested (in C).

    float a = -1.0E8f, b = 1.0E8f, c = 1.23456f;
    printf("sum %f\n", a+b+c);   //output 1.234560
    printf("sum %f\n", a+(b+c)); //output 0.000000
    

    But I would like to point out it is possible to preserve order in OpenMP. I discussed this here C++ OpenMP: Split for loop in even chunks static and join data at the end

    Edit:

    Actually, I confused commutativity and associativity. If you have an operator which is associative but not commuative than it's possible to preserve the order with OpenMP as I did in the post above. However, IEEE floating point is commutative but NOT asssociative so the only thing that came be done is to break IEEE and let it be associative.

提交回复
热议问题