sách gpt4 ai đã đi

openmp - 使用 openmp 并行执行函数

In lại 作者:行者123 更新时间:2023-12-01 15:30:48 30 4
mua khóa gpt4 Nike

我有一系列对几个独立函数的调用。

func1(arg);
func2(arg);
func3(arg);

我想并行执行它们,而不是串行执行它们。我目前正在使用
#pragma omp parallel
{
func1(arg);
func2(arg);
func3(arg)
}

我正在尝试的其他方法是使用 switch case,然后并行执行它以将任务拆分为不同的线程,例如
function(arg, value)
{
switch(value)
{
case 1: // code of func1
case 2: // code of func2
case 3 :// code of func3
}
}

#pragma omp parallel for
for(j=0; j<3; j++)
function(arg, j);

我的问题是这些方法中的任何一个都不比对函数的顺序调用更好。
如何并行化对这些函数的调用。

谢谢,K

1 Câu trả lời

您正在寻找 OpenMP tasks ,在 OpenMP 3 中添加:

#include 
#include

void func1(int arg) {
int tid = omp_get_thread_num();
printf("Thread %d in func1: got arg %d\n", tid, arg);
}

void func2(int arg) {
int tid = omp_get_thread_num();
printf("Thread %d in func2: got arg %d\n", tid, arg);
}

void func3(int arg) {
int tid = omp_get_thread_num();
printf("Thread %d in func3: got arg %d\n", tid, arg);
}

int main(int argc, char **argv) {
int arg=173;
#pragma omp parallel default(none) shared(arg)
#pragma omp single
{
#pragma omp task
func1(arg);

#pragma omp task
func2(arg);

#pragma omp task
func3(arg);

#pragma omp taskwait
/* if you have something that needs all the results above
* but needs to be in the parallel reason it would go here;
* otherwise the task wait is not needed */
}

trả về 0;
}

运行给出:
$ export OMP_NUM_THREADS=3
$ ./tasks
Thread 1 in func3: got arg 173
Thread 0 in func2: got arg 173
Thread 2 in func1: got arg 173

如果由于某种原因(Visual Studio)您无法使用 OpenMP 2,您可以使用部分,这些部分不太灵活但在这里工作正常:
int main(int argc, char **argv) {
int arg=173;
#pragma omp parallel sections default(none) shared(arg)
{
func1(arg);

#pragma omp section
func2(arg);

#pragma omp section
func3(arg);
}

trả về 0;
}

关于openmp - 使用 openmp 并行执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25431821/

30 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com