openmp 相关问题

OpenMP是一种跨平台的多线程API,它允许使用特殊的编译器指令进行细粒度的任务并行化和同步。

OMP 与 x86_64-w64-mingw32-g++ 交叉编译

我在交叉编译利用 openMP 库的 C++ 程序时遇到了一些麻烦。我使用的是 Linux Ubuntu 12.04 LTS。我想获得可在 Windows 上运行的可执行文件。 我没有专业人士...

回答 2 投票 0

openMP 中 num_threads(0) 的行为

所以我基本上正在开发一个带有许多 for 循环的程序,我将其与 openMP 并行化。 我正在使用 #pragma omp parallel for 来并行化 for(){} 循环。 有些人可能知道...

回答 1 投票 0

openMP使用自定义归约的问题

我正在尝试使用 openMP 来简化复杂类型,但在编译时出现以下错误: test_reduction.cpp:在函数‘int main()’中: test_reduction.cpp:26:65:错误:

回答 1 投票 0

如何在 OpenMP Fortran 代码中使用多线程 FFTW

我有一个可以正常工作的代码,它是使用 gcc/gfortran-14 编译的(通过brew 安装)。绝大多数时间都花在通过 FFTW 进行 FFT 上。在代码的关键部分我有这样的: !$omp

回答 1 投票 0

Makefile 忽略命令导出 OMP_NUM_THREADS

我正在使用 openMP 编译并运行 C++ 程序,使用以下 makefile 全部: g++ -std=c++0x -O2 -fopenmp main.cpp body.cpp -o test 导出 OMP_NUM_THREADS=...

回答 2 投票 0

尽管并行编译,Mex 文件还是串行执行

我正在使用 mex 文件测试基本的 openmp 并行化代码。问题在于,尽管我指示用 2 个线程运行它,但它似乎只运行一个线程。这是代码: #包括...

回答 3 投票 0

LLVM OpenMP 任务调度器

我已经开始深入研究官方代码库,以了解如何在不同的运行时线程上安排任务,但这非常“困难”,没有关于

回答 1 投票 0

什么干扰了我在 C++ TensorFlow 1.12 的自定义运算符中预期的 OpenMP 行为?

我用C++实现了我的计算逻辑(实际上使用PyTorch的Inductor生成的C++代码),利用OpenMP来加速Tensor计算。例如,其中一个功能如下...

回答 1 投票 0

谁干扰了我在 C++ TensorFlow 1.12 的自定义运算符中预期的 OpenMP 行为?

我用C++实现了我的计算逻辑(实际上使用PyTorch的Inductor生成的C++代码),利用OpenMP来加速Tensor计算。例如,其中一个功能如下...

回答 1 投票 0

虚假共享和 OpenMP

我对在 OpenMP 中尝试使用不同的块大小以避免错误共享有疑问。 所以我创建了 2 个大向量,并测量了 2 个不同块大小的总操作时间。 我用过

回答 1 投票 0

OpenMP proc_bind 子句是否应始终强制请求的绑定?

(测试代码在这里,供那些想阅读或使用它的人使用)。 它包括一个带有 omp_proc_bind(close) 子句的并行区域,以及前面没有的并行区域。在每个并行区域内...

回答 1 投票 0

为什么一个共享的繁忙CPU核心会影响openmp的整体CPU利用率?

我的系统设置,linux系统,12核,隔离核2-11。核心 0 和 1 的使用率几乎 100% 被其他程序使用。所有其余核心均处于空闲状态。 第一轮测试。 导出 GOMP_CPU_AFFIN...

回答 1 投票 0

OpenACC 中静态的有序时间表

我有 Fortran 代码,它针对 OpenMP 进行了优化。 我想检查 OpenACC 中的等效调用以进行以下 OpenMP 调用。 !$omp 执行有序计划(静态) 当我在互联网上搜索

回答 1 投票 0

使用 OpenMP Target Enter/Exit/Update 进行非结构化、异步设备端计算的正确方法是什么?

目标 我想以我当前使用 CUDA 的方式在 C++ 中使用 OpenMP 目标: 分配任意数量的设备端阵列(主机阵列的镜像即可),如果需要则进行初始化。 执行

回答 1 投票 0

PyTorch C++ 扩展:有效地累积张量中线程的结果

我正在实现一个采用并行性的 PyTorch C++ 扩展。所需的结果是一个 N x D 矩阵,每个线程计算该结果的一行。推荐的积累方式是什么...

回答 1 投票 0

为什么我不能在一个线程中锁定互斥体并在另一个线程中解锁它?

我写了以下openmp代码: omp_set_lock(&lock); #pragma omp 任务 { 做工作(); omp_unset_lock(&lock); } 这似乎有效。然而,omp 标准规定,只有...

回答 1 投票 0

最终从 omp 单个区域调用的 Omp for 循环可能吗?

我已经打开了一个 OMP 并行区域,并且根据过去的一些测量,想要决定是并行还是串行执行函数。 该函数本身包含 om...

回答 1 投票 0

为什么 OpenMP 不能加速我的 C 程序?

我是 OpenMP 的新手,我试图用它来加速我的 C 程序(使用 GMP)。下面的代码是我所做的素性测试: #包括 #包括 #包括 我是 OpenMP 的新手,我试图用它来加速我的 C 程序(使用 GMP)。下面的代码是我所做的素性测试: #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <math.h> #include <omp.h> #include <gmp.h> int lucas_lehmer(unsigned long int p) { mpz_t M, s, t; // Let M = 2^p - 1 mpz_init_set_ui(t, p); mpz_init(M); mpz_setbit(M, p); mpz_sub_ui(M, M, 1); unsigned long int I; mpz_init_set_ui(s, 4); #pragma omp parallel for { for (i = 3; i <= p; i++) { printf("Processed: %d\n", i-3); mpz_mul(s, s, s); mpz_sub_ui(s, s, 2); /* mpz_mod(s, s, mp) but more efficiently done gisen mod 2^p-1 */ if (mpz_sgn(s) < 0) mpz_add(s, s, M); /* while (n > mp) { n = (n >> p) + (n & mp) } if (n==mp) n=0 */ /* but in this case we can hase at most one loop plus a carry */ mpz_tdiv_r_2exp(t, s, p); mpz_tdiv_q_2exp(s, s, p); mpz_add(s, s, t); #pragma omp parallel { while (mpz_cmp(s, M) >= 0) mpz_sub(s, s, M); } } } int res; res = !mpz_sgn(s); mpz_clear(t); mpz_clear(M); mpz_clear(s); return res; } int main() { unsigned long int p; printf("Enter an exponent:"); scanf("%d", &p); int boolean; boolean = lucas_lehmer(p); if (lucas_lehmer(p)) { printf("\nPrime number: True\n"); } else { printf("\nPrime number: False\n"); } system("pause"); return 0; } 我添加了#pragma omp parallel for和#pragma omp parallel,看看程序的性能是否有所提高。 使用命令g++ lucas_lehmer.c -lgmp -I C:/gmp-6.2.0/include/ -L C:/gmp-6.2.0/lib/(我使用MinGW-MSYS)编译后,与不使用OpenMP的代码相比,我发现代码没有加速。这里出了什么问题?我该如何解决这个问题? 可选问题:上面的代码似乎循环有问题。它在检查之前重复循环两次。我该如何预防这种情况? 您的代码纯粹是顺序的。每行代码都会读取并修改变量“s”,并且 for 循环的每次迭代都需要前一个循环完成。 编译器无法并行化任何内容。

回答 1 投票 0

OpenMP - 进入临界区时是否需要刷新共享变量?

我想知道在OpenMP中,我是否需要在实际更新之前刷新要在关键区域中更新的共享变量? 例如,我想计算向量中的最大值...

回答 1 投票 0

如何解决使用 std::println 和 omp 的 C++23 程序的“找不到弱定义符号”错误运行时错误?

将 std::print 与 OpenMP 一起使用会导致运行时错误,我不确定解决问题时应采取哪条路径。考虑下面的代码: /// clang++ -fopenmp -std=c++23 -Wall -Wextra -Werror -g

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.