如何使用OpenMP解决以下问题:
编辑: Panni是对的,我的并行方法不起作用,那么这样做的好方法是什么?
情况:
函数调用顺序:
函数<script type="text/javascript">
$(document).ready(function() {
$('#showdiv').fadeOut();
var timedelay = 1;
function delayCheck()
{
if(timedelay > 5)
{
$('#showdiv').fadeIn();
if(timedelay == 12)
{
window.location = "https://www.google.com";
}
timedelay = timedelay+1;
}
} // closing the function
$(document).mousemove(function() {
$('#showdiv').fadeOut();
timedelay = 1;
clearInterval(_delay);
_delay = setInterval(delayCheck, 900);
});
// page loads starts delay timer
_delay = setInterval(delayCheck, 900)
});
</script>
通过calc()
并行化循环,并更改包含#pragma omp parallel for
和x
值的结构的数组。
函数y
仅通过move()
并行化循环,并访问#pragma omp for
中更改的值。
问题:
在访问函数calc()
之前,如何在OpenMP中确保函数1
已设置值?
更具体:
2
那么,我怎样才能确保#include <...>
static b_t *b;
static void calc() {
#pragma omp parallel for private(j)
for(i = 0; i < n - 1; i++)
for(j = i + 1; j < n; j++) {
b[i].f.x += some_value;
b[i].f.y += some_value;
b[j].f.x -= some_value;
b[j].f.y -= some_value;
}
}
}
static move() {
#pragma omp for
for (i = 0; i < n; i++) {
d.x = b[i].f.x;
d.y = b[i].f.y;
}
}
int main() {
for (i = 0; t < end; t += dt) {
calc();
move();
}
}
仅在move()
之后调用?我想过calc()
,但它似乎并不适合我。
答案 0 :(得分:0)
由于您按顺序调用函数calc()
和move()
,calc()
函数将始终首先执行。
所以程序运行calc()
等待它完成(无论使用了多少个线程)然后继续运行move()
答案 1 :(得分:0)
很糟糕我仍然无法发表评论。 而且我不想像这样回答。
所以我猜你可能会因为两个原因而遇到性能问题。
移动func对我来说很奇怪,所以我没有考虑到它。