openmp相关内容

在OpenMP代码中使用C ++互斥锁是否安全?

在OpenMP 4.5代码中使用C ++ 11 std :: mutex 是否安全?我的想法是,我正在使用一个日志库,该日志库使用C ++互斥锁保护每个 std :: cout ,以便在与多个线程一起运行时,不会扰乱 cout 的输出.在我的OpenMP代码中,我可能想使用此日志记录库来打印一些消息.这样做安全吗? 解决方案 不,这不安全. 只有最新的OpenMP版本(5.0)才“指 ..
发布时间:2021-04-20 18:54:35 C/C++开发

是在不同内存位置同时写入std :: deque线程安全吗?

我有一个 std :: deque> ,在启动并发块时大小不变. 并发块读取 deque 的每个 CustomObj 并设置 int . 我可以保证双端队列不会更改大小,因此不会重新分配,并且每个线程将仅访问双端队列的内存块,而不会访问其他线程的内存块. 是否会导致未定义的行为并发读写?我应该将文字和阅读放在互斥区吗? ..
发布时间:2021-04-20 18:42:27 C/C++开发

编写std :: vector与普通数组的线程安全性

我在Stackoverflow上已阅读 ,其中STL容器具有写线程安全性.但是,这实际上意味着什么呢?这是否意味着我应该将可写数据存储在纯数组中? 我希望同时调用 std :: vector :: push_back(element)可能导致数据结构不一致,因为它可能需要调整向量的大小.但是像这样的情况呢,其中不涉及调整大小: 使用数组: int数据[n];//在这里初始化值. ..
发布时间:2021-04-19 21:03:55 C/C++开发

在cuda主机代码中使用openMP?

是否可以在CUDA文件中使用openMP编译指示(而不是在内核代码中使用)? 我将结合gpu和cpu计算.但是,如果我将porgram与openmp选项链接(在Linux下),则nvvc编译器将失败,并显示“找不到未知选项'openmp'" 一种解决方法是仅在c/c ++文件中使用openMP语句. 解决方案 我刚刚找到了这个 http://www.cse.buffalo ..
发布时间:2021-04-19 20:51:45 C/C++开发

使用OpenMP的x86上的原子最小

OpenMP是否支持C ++ 11的最低要求?如果OpenMP没有可移植的方法:是否可以使用x86或amd64功能实现此目的? 在OpenMP规范中,我没有发现C ++的任何东西,但是Fortran版本似乎支持它.有关详细信息,请参见v3.1的2.8.5.对于C ++,它说明 binop是+,*,-,/,&,^,|,>之一. 但是对于Fortran来说,它说明 in ..
发布时间:2021-04-12 19:22:09 C/C++开发

为什么我应该使用归约变量而不是原子变量?

假设我们要在OpenMP循环中计数一些东西.比较减少量 int计数器= 0;#pragma omp进行还原(+:counter)为了 (...) {...计数器++;} 具有原子增量 int计数器= 0;#pragma omp for为了 (...) {...#pragma omp atomic计数器++} 原子访问立即提供结果,而归约仅在循环结束时假定其正确值.例如,减少不允许这 ..
发布时间:2021-04-12 19:21:30 其他开发

OpenMP在C数组中的减少/并行化代码

我的代码有问题,它应该打印出一定数量的外观. 我想将此代码与OpenMP并行化,我试图对数组使用归约法,但是显然它并没有按我的意愿工作. 错误是:“分段错误".一些变量应该是私有的吗?还是我尝试使用归约方式的问题? 我认为每个线程应该计数数组的某个部分,然后以某种方式合并它. #pragma omp并行以减少操作(+:reasult [:i])对于(i = 0; i ..
发布时间:2021-04-09 20:03:22 其他开发

OpenMP 4.5不会使用目标指令卸载到GPU

我正在尝试使用openMP创建一个简单的GPU卸载程序.但是,当我尝试卸载时,它仍在默认设备(即我的CPU)上运行. 我已经安装了具有CUDA支持的g ++ 7.2.0编译器(位于我使用的群集中).当我运行下面的代码时,它表明可以看到8个GPU,但是当我尝试卸载时,它说它仍在CPU上. #include #include #include ..
发布时间:2020-11-20 01:04:03 C/C++开发

对omp_get_wtime的未定义引用

我找不到要在Windows(Vista)下的GCC(4.8)中链接的wich库.我尝试了-fopenmp -llibgomp -lgomp编译器指令,但是没有一个有效. 我已经拥有带有POSIX的GCC(因此,如果启用C ++ 11,则std :: thread可以工作),问题似乎是,搜索正确的库不能提供有用的结果(即使在GCC/mingw文档中进行搜索). 所以基本上我无法得到此答案有效 ..
发布时间:2020-11-12 23:46:37 C/C++开发

OpenMP GPU卸载数学库?

我正在尝试使用OpenMP 4+指令卸载GPU代码.我在GCC 7.2中使用ubuntu 16.04,对于一般情况,它工作正常.当我尝试卸载对在"math.h"中定义的 sqrtf 函数具有调用的代码时,就会出现我的问题.麻烦的代码是这样的: #pragma omp target teams distribute \ map(to:posx[:n],posy[:n],posz[:n]) \ ..
发布时间:2020-11-12 23:38:14 其他开发

cython openmp single,障碍

我正在尝试在cython中使用openmp。我需要在cython中做两件事: i)在我的 #pragma omp single {} 范围内使用cython代码。 ii)使用 #pragma omp barrier {} 有人知道如何在cython中执行此操作吗? 这里有更多详细信息。我有一个nogil cdef函数 my_fun(),我在omp for循环中调用它: ..
发布时间:2020-10-14 20:12:15 其他开发

在Visual Studio中将OpenMP与Clang和CMake一起使用

我正在尝试编译一个简单的应用程序,以测试将来可能使用的一些库。由于msvc遇到了一些问题,我尝试了Clang,这使我消失了一个奇怪的错误。 我现在遇到的问题是我要测试的库OpenMP。他们使用FindOpenMP模块CMake privides导入它。但是,该模块在Clang中找不到。 cmake_minimum_required(3.14.0版) 项目(blaze-test VER ..
发布时间:2020-10-01 22:46:10 C/C++开发

OpenMP循环数组访问中的虚假共享

我想利用OpenMP来使我的任务并行化. 我需要对数组的所有元素减去相同的数量,然后将结果写入另一个向量.这两个数组都使用malloc动态分配,第一个用文件中的值填充.每个元素的类型为uint64_t. #pragma omp parallel for for (uint64_t i = 0; i ..
发布时间:2020-07-22 21:33:41 C/C++开发

在openmp中读取数据时会发生错误共享吗?

如果我有一个具有OpenMP并行化功能的C ++程序,其中不同的线程不断地仅使用一些小型共享数组来从中读取数据,因此是否会发生错误共享?换句话说,错误共享仅与内存写入操作有关,或者在内存读取操作中也可能发生. 解决方案 通常使用的缓存一致性协议,例如 MESI (已修改,互斥,共享,无效)具有用于缓存行的特定状态,称为“共享".如果高速缓存行被多个处理器读取,则处于此状态.然后,每个处理器 ..
发布时间:2020-07-22 21:33:38 C/C++开发

写入单个向量时OpenMP中的虚假共享

我使用蒂姆·马特森(Tim Matterson)的讲义学习了OpenMP,他给出了一个错误共享的示例,如下所示.该代码很简单,用于从4.0/(1 + x * x)的数值积分计算pi,x的范围为0到1.该代码使用向量包含4.0/(1 + x * x)的值对于从0到1的每个x,然后将向量求和: #include static long num_steps = 100000; do ..
发布时间:2020-07-22 21:33:29 其他开发