OpenMP shared vs. firstprivate performancewise

天大地大妈咪最大 提交于 2019-12-06 00:26:42

问题


I have a #pragma omp parallel for loop inside a class method. Each thread readonly accesses few method local variables, few call private data and a method's parameter. All of them are declared in a shared clause. My questions:

  • Performance wise should not make any difference declare these variables shared or firstprivate. Right?
  • Is the same true if I'm not careful about making variable not sharing the same cache line?
  • If one of the shared variables is a pointer and inside the thread I read a value through it, is there an aliasing problem like in ordinary loops?

Tomorrow I will try to profile my code. In the meantime thanks for your advice!


回答1:


  1. Well, they're not the same thing. With shared, they are shared between all the threads. With firstprivate, each thread gets it's own copy. If you're only reading the variable, then it's better to leave it as shared as to avoid copying it. (In C++, firstprivate will implicitly invoke the copy constructor.)

  2. Correct, multiple threads reading and writing to values that sit on the same cacheline is called false sharing. The cache line will bounce back and forth between the cores that are accessing it - which can result in significant slowdown if it happens often enough.

  3. If you're just reading data through the shared pointer, then there shouldn't be a problem. But if you're also writing to it, then you need to make sure you don't have a race condition.



来源:https://stackoverflow.com/questions/7865555/openmp-shared-vs-firstprivate-performancewise

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!