gpt4 book ai didi

c - Linux C 中带有 pthreads 的 Openmp 并行 for 循环语法

转载 作者:行者123 更新时间:2023-11-30 19:32:08 24 4
gpt4 key购买 nike

我用 openmp 完成了下面的代码,但是函数

nvme_identify(fd, 0, 1, data);      

依次调用 ioctl(),这是 nvme 的阻塞系统调用。因此,为了拥有真正的并行性,我希望使用 pthreads 具有相同的代码。

我是 pthreads 新手,所以任何人都可以为我提供以下 openmp 代码的 pthreads 语法吗?

#pragma omp parallel for num_threads(5)
for(i=0; i<rc; i++){
err = nvme_identify(fd, 0, 1, data);
}

最佳答案

Pthreads 与 OpenMP 不同,有点像手册。作为伪代码,您可以尝试这样的事情:

main()

创建一个参数结构体以在 nvme_identify(fd, 0, 1, data) 中使用
比方说my_struct[NUM_OF_THREADS]
NUM_OF_THREADS是(正如您猜测的)您将产生的线程数。

正确填写参数,即:
my_struct[0].fd = fd
my_struct[0].data = data
...

使用 for 循环创建 pthread,例如:

for (i=0; i < NUM_OF_THREADS; i++)
pthreads_create(...., MyThreadedFunction, (void*)&my_struct[i]);

MyThreadedFunction(void *val)恢复参数如下:
struct my_struct_tag *my_struct = (struct my_struct_tag *)val;
int fd = my_struct->fd
...
并调用err = nvme_identify(fd, 0, 1, data)

正确调整参数以获得最大并行度。
主要你需要使用 pthread_join等待所有线程完成。

我的逻辑可能会有错误。这是一个快速回答。希望有帮助。

关于c - Linux C 中带有 pthreads 的 Openmp 并行 for 循环语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47408866/

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