Articles of openmp

将OpenMP与pthreads混合使用

我的问题是将OpenMP与pthreads混合使用是否是一个好主意。 那里有结合这两个应用程序。 混合这两个是一个好的做法吗? 或者典型的应用程序通常只使用其中的一个。

使用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 […]