openmp相关内容

使用GDB使用OpenMP

使用GDB我似乎无法为OpenMP线程内打印共享变量的值。例如,使用下面的程序: 的#include< omp.h> #包括LT&;&stdio.h中GT; #包括LT&;&stdlib.h中GT;INT主(INT ARGC,CHAR *的argv []){ 诠释私法,TID,酒吧= 100; OMP的#pragma平行私人(私法,TID)NUM_THREADS(2) { ..
发布时间:2016-08-19 00:09:25 C/C++

numactl的--physcpubind

我是使用numactl的,具有--physcpubind选项。手册说: - physcpubind =的CPU,CPU的-C 仅在CPU上执行的过程。等等... 让我们说我有NUMA系统3 NUMA节点,在那里他们每个人有4个内核。 NUMA节点0具有0,1,2,3为核心的数字。 NUMA节点1有4,5,6,7,和NUMA节点2有8,9,10,11。我的问题是让我们说我运行程序如下:出 ..
发布时间:2016-08-18 23:36:08 服务器开发

OpenMP的混合使用的pthreads

我的问题是,是否是一个好主意,用的OpenMP的pthreads混合。是否有应用程序在那里而结合这两种。它是混合这两种一个好的做法呢?或典型应用通常只使用其中的两个。 解决方案 通常情况下,最好只使用一个或另一个。但至少我自己,我也经常将两者搅和,它是安全的,如果它的正确。 最常见的情况我做的这是我有一个使用pthreads的线程较低级别的图书馆,但我称它在使用OpenMP的用户应用程序 ..
发布时间:2016-08-18 23:32:35 服务器开发

Pthreads中对OpenMP的

我创建使用Linux在C多线程应用程序。 我不确定我是否应该使用POSIX线程API或OpenMP API的。 什么是赞成&放大器;无论使用的利弊? 编辑: 有人能澄清这两个API是否创建内核级或用户级的主题? 解决方案 的Pthreads和OpenMP重新present两个完全不同的范式多 Pthreads的是一个与线程的工作非常低级的API。因此,你有超过线程管理(创建/加入 ..
发布时间:2016-08-18 21:59:58 C/C++

我该如何应对OpenMP的数据竞争?

我想使用的OpenMP数组中的加号。以下是我的code: 为int *输​​入=(INT *)malloc的(的sizeof(int)的* SNUM); INT总和= 0; INT I; 对于(i = 0; I< SNUM;我++){ 输入[I] = I + 1; } OMP的#pragma为平行时间表(静态) 对于(i = 0; I< SNUM; ..
发布时间:2016-08-18 15:21:26 C/C++

有条件的"编译OMP"

我试图使用OpenMP不同的并行化。因此,我有若干行的#pragma OMP并行的在我的code,我(非)意见的交流。有没有一种方法,使这些线路的条件与类似以下,没有工作code? 定义OMPflag 1 #如果OMPFlag编译OMP为平行 为... 解决方案 这是OpenMP并行构造可以具有指定的如果条款。在Fortran中我会写这样的: $ OMP并行如果(N> ..
发布时间:2016-08-18 14:41:12 C/C++

Helgrind(Valgrind的)和OpenMP(C):避免误报?

对于Valgrind的线程错误检测工具Helgrind的文档,发现 href=\"http://valgrind.org/docs/manual/hg-manual.html\"> 警告说,如果使用GCC编译您的OpenMP code,GCC的OpenMP运行时库( libgomp.so )会导致因数据种族的假阳性报告的混乱,其使用原子机器指令和Linux系统futex的调用,而不是POSIX的 ..
发布时间:2016-08-18 14:30:15 C/C++

以很好的方式禁用的OpenMP

我有C ++ code与OpenMP编译进去。我要测试的这款code既为多线程模式(使用OpenMP)和单线程模式(没有OpenMP的)。现在,在模式我需要评论的的#pragma OMP (或至少平行)。 什么是最干净的,或默认,方式启用/禁用OpenMP的? 解决方案 看看能否禁用OpenMP的交换机的编译器手册。对于GCC,OpenMP是默认禁用,并与-fopenmp选项启用。 另 ..
发布时间:2016-08-18 14:23:39 C/C++开发

OpenMP的,对于内环路部分

我想运行下面的code(下图)。我想产卵两个独立的线程,每一个都将运行循环并行。不幸的是,我得到一个错误。显然,并行为不能部分里面催生。如何解决? 的#include< omp.h> 的#include“stdio.h中”诠释的main() {OMP_SET_NUM_THREADS(10);OMP的#pragma并行 OMP的#pragma节 { OMP的#pragma节 OMP ..
发布时间:2016-08-18 14:19:40 C/C++开发

减少与SSE / AVX的OpenMP

我想要做的使用OpenMP和SIMD阵列上的减少。我读了OpenMP中减少等同于: 内嵌浮动sum_scalar_openmp2(常量浮动[],常量为size_t N){ 浮动金额= 0.0; OMP的#pragma并行 { 浮sum_private = 0.0; OMP的#pragma为平行NOWAIT 的for(int ..
发布时间:2016-08-18 14:19:21 C/C++

可编译器优化通过多线程被抑制?

这发生在我身上了几次并行与OpenMP程序部分只是要注意到,在最后,尽管良好的扩展性,大部分预见加速的是由于输给了单线程的情况下表现不佳(如果相比串行版本)。 这是网络这种行为上显示的通常的解释是的由编译器生成的code可在多线程的情况下的更糟。反正我不能够在任何地方找到对的为什么的大会可能会加重病情的参考。 所以,我想什么要问编译器的家伙在那里是: 五月编译器优化通过多线程被抑制?在情况下 ..
发布时间:2016-08-18 14:08:14 C/C++开发

编译在OS X约塞米蒂gcc编译OpenMP程序

$ GCC 12.C -fopenmp 12.C:9:9:致命错误:未找到'omp.h'文件 #包括LT&;&omp.h GT; ^ 产生1个错误。 在编写OpenMP程序,我得到上述错误。我使用的OS X的优胜美地。我第一次通过输入端子GCC本地安装gcc编译器试图而后下载X $ C $ç过我仍然得到了同样的错误。然后,我通过下载的gcc: $酿造安装gcc 不过我得到了同样的 ..
发布时间:2016-08-18 14:06:32 C/C++开发

为什么!=运算符不使用OpenMP允许?

我试图编译以下code: 的#pragma OMP并行共享(J) { OMP的#pragma附表(动态) 对于(i = 0;!我= j的;我++) { // 做一点事 } } 我得到这个错误:错误:无效的控股predicate 。 我检查的OpenMP 参考指南和它说,对于平行它“仅仅”允许以下运营商之一:其中, < =>> =。 我不明白为什么不能 ..
发布时间:2016-08-18 13:53:55 C/C++开发

不OpenMP的分配内存,并释放所有后

是否OpenMP的分配内存,并释放所有内存?因为我跑Valgrind的,并没有免费的我所有的名单..我的malloc,我才释放一切。 == == 11442 HEAP摘要: == == 11442在退出,使用:192 1块字节 == == 11442总堆的使用情况:2001 allocs,2000的FreeS,2917280字节分配 == == 11442 == == 11442泄漏摘要: = ..
发布时间:2016-08-18 13:29:31 C/C++

采用开放式MP慢稀疏矩阵向量积(CSR)

我想用开放的MP加快稀疏矩阵向量的产品,code是如下: 无效ZAX(双* Z,双*数据,长* colind,长* row_ptr,双* X,诠释M){长I,J,ckey; INT块= 1000; //为int *计数[8] = {0}; OMP的#pragma平行NUM_THREADS(8) { OMP的#pragma私人(ckey,J,I)时间表(静态块) 对于(i = 0; I&L ..
发布时间:2016-08-18 13:15:56 C/C++

削减并行数时间

由于 N 部分和有可能在总结LOG2并行步骤所有部分和。例如,假设有八个线程与八个部分款项: S0,S1,S2,S3,S4,S5,S6,S7 。这可以在减少 LOG2(8)= 3 顺序步骤如下; thread0线程1线程2 thread4 S0 + = S1 S2 + = S3 S4 + = S5 S6 + = S7 S0 + = S2 S4 + = S6 S0 + = S4 我想使用Op ..
发布时间:2016-08-17 23:24:56 C/C++

如何保证动态分配的数组是私人的OpenMP

我用C使用OpenMP使用Linux机器上的gcc工作。在fo​​r循环OpenMP并行,我可以声明一个静态分配的数组为私有。考虑code片段: int类型的[10]; OMP的#pragma并行共享(无)FIRSTPRIVATE(一) 对于(I = 0; I&下; 4;我++){ 和一切正常。但是,如果不是我分配一个动态,为int * A =(INT *)malloc的(10 * siz ..
发布时间:2016-08-17 23:17:38 C/C++

OpenMP的时间和时钟()计算两个不同的结果

我有顺序code通过的OpenMP并行。我已经把相应的编译指示并进行测试。同时,通过检查主要功能所花费的时间测试我间preT的性能增益。奇怪的是通过计算所经过的时间CPU_TIME()和 omp_get_wtime()返回两个不同的结果。你觉得原因是什么? CPU_TIME()通过计算的运行时间功能类似于连续的时间。 运算开始前 ctime1_ = CPU_TIME(); #IFDEF _ ..
发布时间:2016-08-17 22:58:54 C/C++