gpt4 book ai didi

c++ - 空 OpenMP for 循环耗时 5 毫秒

转载 作者:太空宇宙 更新时间:2023-11-04 02:25:44 29 4
gpt4 key购买 nike

我在 test.cpp 中有以下 C++ 代码:

int myfun(){
double time1, time2;
time1 = omp_get_wtime();

#pragma omp parallel for
for(int group_id = 0; group_id < 1; ++group_id){ }

time2 = omp_get_wtime();
printf("computation took %.3f ms\n", (time2-time1)*1000);
return 0;
}

我使用

将其编译成一个共享库
g++ -c -fPIC -fopenmp -std=c++11 -Wall -march=native -O3 -o test.o test.cpp

其次是

g++ -shared -fopenmp -o mylib.so test.o

当我运行函数 myfun() 时(我从 python 程序调用它以防万一),我得到以下输出:

computation took 5.992 ms

如果我注释掉#pragma 指令,我当然会得到

computation took 0.000 ms

现在我明白使用 openmp 时会产生一些开销,但这似乎不合理。我在这里错过了什么?

最佳答案

这是正常的。多线程编程会产生额外的开销,例如创建线程、同步等。但是正确应用多线程编程会带来胜利。根据其有效性选择顺序或多线程实现。在我的示例中,线程是在第一次调用中创建的,然后它们正在使用。但这取决于实现:

int main()
{
myfun();
myfun();
myfun();
myfun();
return 0;
}

输出:

computation took 2.510 ms
computation took 0.082 ms
computation took 0.046 ms
computation took 0.043 ms

关于c++ - 空 OpenMP for 循环耗时 5 毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51567191/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com