Articles of openmp

OpenMP在Visual Studio 2010上提供了13.5倍的提升,但在Unix上却没有提高

我是一个新的OpenMP用户,并且在Visual Studio 2010(Windows 7 Ultimate x64)上运行的并行代码速度提高了13.5倍(14个线程)。 CentOS 5.8 x64(gcc 4.1.2)或SUSE x64(gcc 4.5.1)的性能是zip。 我已经validation了正在使用多个线程。 有一些系统标志或选项,我需要打开? 是的,OMP_NUM_THREADS在环境中,设置为8. CentOS机器是双氙气处理器。

从mmap-ed内存中进行有效读取,会产生负载下的SIGBUS。 为什么?

我有一个程序,将缓冲区复制到文件,mmap回来,然后检查其内容。 多个线程可以在同一个文件上工作。 偶尔,我在阅读时得到了SIGBUS,但是只在负载下。 映射是MAP_PRIVATE和MAP_POPULATE。 通过SIGBUS的崩溃发生在mmap成功后,我不明白,因为MAP_POPULATE被使用。 下面是一个完整的示例(在/ tmp / buf_ *下创build填充为零的文件),使用OpenMP创build更多的负载和并发写入: // Program to check for unexpected SIGBUS // gcc -std=c99 -fopenmp -g -O3 -o mmap_manymany mmap_manymany.c #include <assert.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #define NBUFS 64 const char bufs[NBUFS][65536] = {{0}}; const […]

英特尔OpenMP安装问题

我正在尝试在启用对clang编译器的OpenMP支持的上下文中在我的Linux机器上安装英特尔OpenMP运行时。 我遵循以下指南: http : //clang-omp.github.io/ 。 我已经到了构build编译器的地步,可以识别-fopenmp ,并知道omp.h位置。 现在唯一缺less的是它找不到-liomp5 ,我认为它是Intel OpenMP运行时。 在上述网站的说明说,我需要这样做: 要运行(而不是仅仅编译)代码,您需要获取并构build英特尔®OpenMP *运行时库。 所以我下载了运行时,并在自述文件中提供了以下select的编译器: Supported Architectures: IA-32 architecture, Intel(R) 64, and Intel(R) Many Integrated Core Architecture ———————————————————– | icc/icl | gcc | ————–|——————————|————————–| | Linux* OS | Yes(1,5) | Yes(2,4) | | OS X* | Yes(1,3,4) | No | | Windows* OS | Yes(1,4) […]

使用OpenMp与ctypes链接

我有一个使用openmp的c99函数,它按预期工作。 我也写了一个使用ctypes的python接口,导致了这个问题。 Ctypes / python找不到openmp的库。 这是错误消息: File "foo.py", line 2, in <module> foobar=cdll.LoadLibrary("./libfoo.so") File "/usr/lib/python2.6/ctypes/__init__.py", line 431, in LoadLibrary return self._dlltype(name) File "/usr/lib/python2.6/ctypes/__init__.py", line 353, in __init__ self._handle = _dlopen(self._name, mode) OSError: ./libfoo.so: undefined symbol: GOMP_parallel_end 我使用这些cmds: gcc -fPIC -std=c99 -lm -Wall -fopenmp -pedantic -c foo.c gcc -shared -o libfoo.so foo.o python foo.py 我已经在Google上search并find了一个“解决scheme”,但我不明白这是什么意思: 我想我应该在构造函数上设置restype到ctypes.c_void_p。 […]

如何设置程序中OpenMP线程的数量?

作为运行程序 $ OMP_NUM_TRHEADS=4 ./a.out 将活动的OpenMP线程的数量限制为4,如htop 。 但是,如果不是绑定Bash的OMP_NUM_THREADS环境variables,我会调用它 setenv("OMP_NUM_THREADS", "4", 1); 在调用任何启用OpenMP的函数之前,从main调用,这似乎不起作用。 为什么发生这种情况? 如何设置程序中OpenMP线程的数量(如果可能的话)?

这个OpenMP代码崩溃的Linux

我正在研究一些代码来使用openmp来减less一个matrix。 我有两个版本,都使我的Ubuntu和Fedora安装崩溃。 通过硬我的意思是我的鼠标和键盘没有反应,甚至当我打我的PC塔上的重置button,它不会重新启动。 我必须按住电源button。 奇怪的是,代码在运行几分钟后崩溃了。 它不消耗大量的内存(我认为750 MB是小的,因为我有16GB的RAM)。 #include <iostream> #include <cstddef> #include <cstring> #include <iomanip> #include <cstdlib> #include <ctime> #include <cmath> using namespace std; class Matrix { public: Matrix(size_t rows, size_t cols): data(0), w(rows), h(cols) { data = new double[w * h]; memset(data, 0, sizeof(double) * w * h); } ~Matrix() { if(data) { delete[] […]

OpenMP + linux – 找不到GOMP_4.0

我一直在试图编译一个使用OpenMP的程序,使用gcc –version 4.9.4 > g++ -std=c++11 -o a.exe -fopenmp ./file.cpp > ./a.exe ./a.exe:/usr/lib64/libgomp.so.1:未find版本“GOMP_4.0”(需要./a.exe) 我有一个名为“/usr/lib64/libgomp.so.1”的文件,我该如何解决?

哪个线程库在linux上使用gcc来实现OpenMP?

它使用pthreads或其他线程API?

OpenMP:20%的时间在“隐性障碍”?

我没有看看使用OpenMP的一些代码,尽pipe我不太熟悉它。 (代码也没有OpenMP。) 当运行一个分析器时,我发现程序在“OMP隐式屏障”函数中花费了大约20%的挂钟时间。 是OpenMP的典型,还是(可能)意味着工作负载没有平均分配在线程之间? 谢谢

如何在openmp中设置优先级?

我在openmp中创build了三个不同的部分,这三部分将由三个不同的线程运行。 我想设置将由一个线程运行的一个特定部分的优先级。 这个怎么做?