Articles of openmp

为什么在Ubuntu 12.04下的OpenMP比串行版本慢

我已经阅读了关于这个话题的其他一些问题。 但是,他们无法解决我的问题。 我写的代码如下,我得到了pthread版本和omp版本比串行版本慢。 我很困惑。 在环境下编译: Ubuntu 12.04 64bit 3.2.0-60-generic g++ (Ubuntu 4.8.1-2ubuntu1~12.04) 4.8.1 CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) per core: 1 Vendor ID: AuthenticAMD CPU family: 18 Model: 1 Stepping: 0 CPU MHz: 800.000 BogoMIPS: 3593.36 L1d cache: 64K L1i cache: 64K L2 cache: 512K NUMA node0 CPU(s): 0,1 编译命令: g++ -std=c++11 ./eg001.cpp […]

如何告诉openmp不要同步一个数组

我有一个具有以下结构的代码。 #pragma omp parallel for for( i = 0; i < N; i++ ) { ….. index = get_index(…); array[index] = …; ….. } 现在index的值对于每个线程来说都是唯一的(对于不同的线程,它永远不会重叠),但是OpenMP当然不能猜测这个,我想用同步对象来访问array 。 我怎么能问openmp不要使用array同步对象,并依靠我的index值是不同的线程是唯一的。 我试图把array放在私人列表中,但是得到了分段错误。

使用clang编译时找不到'omp.h'文件

我正尝试在运行linux mint的笔记本电脑上使用clang(3.7.0)来设置OpenMP项目。 现在我读了OpenMP不被支持,所以我按照这个教程https://clang-omp.github.io/将openMP整合到了clang中。 我已经克隆了源代码,设置了环境variables,并将-fopenmp标志设置为我的项目,但是在构build时,仍然收到错误“fatal error:'omp.h'文件未find”。 我的猜测是我已经设置了错误的环境variables。 有没有办法检查我是否把它们放在正确的地方? 我刚把它们复制到.bashrc文件中。 编辑:当我运行$查找omp.h我得到: /usr/include/re_comp.h /usr/include/linux/ppp-comp.h /usr/include/linux/seccomp.h /usr/include/net/ppp-comp.h /usr/include/openssl/comp.h /usr/lib/gcc/x86_64-linux-gnu/4.8/include/omp.h /usr/lib/perl/5.18.2/CORE/regcomp.h /usr/src/linux-headers-3.13.0-24/arch/arm/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/microblaze/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/mips/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/powerpc/include/uapi/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/s390/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/sh/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/sparc/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/x86/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/include/linux/ppp-comp.h /usr/src/linux-headers-3.13.0-24/include/linux/seccomp.h /usr/src/linux-headers-3.13.0-24/include/net/ipcomp.h /usr/src/linux-headers-3.13.0-24/include/uapi/linux/ppp-comp.h /usr/src/linux-headers-3.13.0-24/include/uapi/linux/seccomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/seccomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/crypto/pcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/inet/ipcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/inet6/ipcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/isdn/ppp/bsdcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/ppp/bsdcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/xfrm/ipcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/linux/ppp-comp.h /usr/src/linux-headers-3.13.0-24-generic/include/linux/seccomp.h 这里是我的makefile: # Requires the following project directory structure: # /bin # /obj # /src # Use 'make […]

使用OpenMP将线程绑定到特定的CPU内核

我知道GOMP_CPU_AFFINITY将线程绑定到特定的核心。 但是,举个例子,他们在这里给出了: GOMP_CPU_AFFINITY =“0 3 2 1” 这里, thread0被连接到—> cpu0 thread1被连接到—> cpu3 thread2被连接到—> cpu2 thread3被连接到—> cpu1 这很清楚。 但是我怎么能同时设置thread0到core0和core2? 环境variables“GOMP_CPU_AFFINITY”的值是什么?

numactl –physcpubind

我正在使用numactl和–physcpubind选项。 手册上说: –physcpubind=cpus, -C cpus Only execute process on cpus. Etc… 假设我的NUMA系统有3个NUMA节点,每个节点有4个核心。 NUMA节点0具有0,1,2,3作为核心编号。 NUMA节点1有4,5,6,7,NUMA节点2有8,9,10,11。 我的问题是让我们说我运行程序如下: export OMP_NUM_THREADS=6 numactl –physcpubind=0,1,4,5,8,9 ./program 即我将运行我的程序与6个线程,我要求他们在CPU核心0,1,4,5,8,9。 例如,如果在程序的某一时刻线程0-5分配了CPU核心0,1,4,5,8,9(setup1)。 例如,在程序执行过程中的某个其他时刻,是否有可能在CPU内核9上运行线程0等等? 即将有CPU线程之间的线程迁移? 或者线程唯一地绑定到CPU核心(如在setup1中)? 谢谢。

如何检查Linux上的OpenMP版本

我想知道如何检查Linux远程机器上的OpenMP版本? 我不知道它在哪里安装。

从MATLAB运行多进程应用程序

我用VC ++编写了一个多进程应用程序,并尝试用MATLAB的system命令通过命令行参数执行它。 它运行,但只在一个核心—任何build议? 更新 :实际上,它甚至没有看到第二个核心。 我使用OpenMP,并使用omp_get_max_threads()和omp_get_thread_num()来检查和omp_get_max_threads()似乎是1当我从MATLAB执行的应用程序,但它是2 (如预期),如果我从命令窗口运行它。 问题 :我的任务pipe理器报告CPU使用率接近100% – 这是否意味着上述API出现故障,它仍然作为多进程应用程序运行? 确认: 我使用Process Explorer来检查线程数是否有任何差异。 当我从命令窗口调用应用程序时, 1线程进入cmd.exe , 2进入我的应用程序。 当我从MATLAB调用它时,有26线程用于MATLAB.exe , 1用于cmd.exe , 1用于我的应用程序。 有任何想法吗?

用mingw在windows上使用openmp。 找不到-lpthread

我有一个使用OpenMP的CMake项目,可以在linux上运行。 当我在Windows机器上编译它时,看起来CMake很难findmingw的gcc的openmp标志。 我决定尝试一个更小的testing用例,然后编译main_openmp.c #include <omp.h> #include <stdio.h> int main(int argc, char* argv[]) { int id; #pragma omp parallel private(id) { id = omp_get_thread_num(); printf("%d: Hello World!\n", id); } return 0; } 然后当我尝试编译 gcc -o OpenMPTest2 main_testomp.c -fopenmp 我明白了 >>> gcc -o OpenMPTest2 main_testomp.c -fopenmp c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lpthread collect2.exe: error: ld returned 1 exit status […]