草庐IT

c++ - openmp减少技术

我有这个for循环可以找到最小和最大长度,正如您所看到的,在查看OpenMP时我有两个要减少的值,我只能注意到它只提供了一个值的减少技术。for(size_ti=0;im_lmax)m_lmax=m_patterns[i].size();}//endforloop我可以做以下事情吗#pragmaompparallelforreduction(min:m_lmin,max:m_lmax)或者我应该将for循环重写为两个for循环,一个用于最小值,一个用于最大值另一个问题..我可以在OpenMP中使用像concurrent_vector这样的tbb容器吗 最佳答

c++ - 线程安全,在C++中有序映射/哈希?

在C++中实现线程安全有序(note1)映射/哈希的最佳方法是什么?又是一种快速查找的数据结构(又称队列),不同线程可以在不同线程之间进行迭代,偶尔插入或删除元素,而不会干扰其他线程的Activity?std::map不是线程安全的,它的操作也不是原子的-尽管只有擦除会使迭代器无效将整个函数包装在整个map类中并不能解决问题-您可以在那里使用松散的迭代器来指向一个节点,该节点将被另一个线程擦除。它应该锁定并防止删除,直到当前线程是唯一引用它的线程为止,或者使用UNIX文件系统样式的“悬挂但删除后仍然有效的引用”方法tbb::concurrent_hash_map设计为线程安全的,但其迭

c++ - 静态分区 tbb::parallel_for

我有一个数据集,我想以interval_size大小的间隔使用tbb::parallel_for。我的仿函数消耗的每个区间都应该是interval_size,最后一个部分区间除外,当interval_size没有均匀划分我的数据集时,它可能更小。有没有办法使用TBB以这种方式进行静态分区?此测试在我的系统上产生几个小于interval_size的间隔:#include#includestructbody{voidoperator()(consttbb::blocked_range&r)const{std::cout(0,n,interval_size),body(),tbb::simp

c++ - 使用 TBB 的并行性——我们的 list 中应该包含什么?

直到最近,并行编程的前景才引起了我的注意。从那时起,我使用了各种并行编程库。也许我的第一站是英特尔线程构建模块(TBB)。但是,经常成为瓶颈的是由于舍入等因素以及这些程序在不同处理器架构中的不可预测行为而导致的错误。下面是一段代码,用于计算两组值的PIL逊相关系数。它采用了TBB的非常基本的并行模式——*parallel_for*和*parallel_reduce*://AprogrammetocalculatePearsonsCorrelationcoefficient#include#include#include#include#include#include#include#i

c++ - tbb::concurrent_unordered_map::unsafe_erase 是否会使任何现有的迭代器失效?

我看到tbb::concurrent_unordered_map与std::unordered_map非常接近,同时对于并发是安全的。我也知道unsafe_erase对于insert等不是并发安全的。迭代器文档还声明任何现有的迭代器对于insert仍然有效,查找等问题是,unsafe_erase是否会使除被要求删除的迭代器之外的任何其他迭代器失效?std::unordered_map和std::map当然有这种行为,但它没有在任何地方的concurrent_unordered_map文档中指定。 最佳答案 tbb::unsafe_e

c++ - Concurrent_hash_map 实现抛出 SIGSEGV

我正在尝试使用tbb的concurrent_hash_map来提高我的应用程序的并发性能。阅读它并根据我的应用程序实现它,但我看到崩溃..因此,我的应用程序是一个多线程应用程序,我在其中存储对,键是char*,值是整数。伪代码如下所示:在.h文件中,typedeftbb::concurrent_hash_maptbb_concurrent_hash;tbb_concurrent_hashconcurrent_hash_table;tbb_concurrent_hash::accessorwrite_lock;tbb_concurrent_hash::const_accessorread

c++ - tbb 并发 HashMap 查找和插入

我目前正在使用tbb的并发HashMap来执行并发插入HashMap。每个键都是一个字符串,一个值是一个整数vector。我想实现以下目标:在插入过程中,如果键不存在,我将其插入并将值添加到其vector中。如果它存在,我只需将值添加到它的vector中。检查tbb并发HashMapAPI后,我注意到查找和插入函数都只返回bool值。那么,如果它存在,我该如何返回指向该键的指针呢? 最佳答案 有些方法在他们的参数中需要一个访问器。访问器基本上是一个指针加上scoped_lock保护对元素的并发访问。如果没有锁,一个元素可能会被并发修

c++ - 如何在 tbb 流程图中中止节点及其子节点的执行

我目前正在测试tbb的流程图功能。为了使用它,我必须能够中止图中某些节点的执行,包括所有依赖它的子节点,但让其他不依赖它的子节点继续执行。从主体抛出异常或调用task::cancel_group_execution()中止所有节点的执行。#include#include"tbb/flow_graph.h"usingnamespacetbb::flow;structbody{std::stringmy_name;body(constchar*name):my_name(name){}voidoperator()(continue_msg)const{if(my_name=="B")tbb

c++ - 如何从调用的函数获取返回值,该函数在 TBB 的另一个线程中执行?

在代码中:#includeintGetSomething(){intsomething;//dosomethingreturnsomething;}//...tbb::tbb_thread(GetSomething,NULL);//...此处GetSomething()在另一个线程中通过其指针被调用。但是我们可以从GetSomething()获取返回值吗?怎么办? 最佳答案 如果你绑定(bind)了C++03和tbb,你必须使用Outputarguments,这意味着你必须重写你的函数。例如:voidGetSomething(int

c++ - 选择并行化方案要考虑什么?

我正在使用C++开发一些代码,用于我在计算动力学方面的研究。我的代码求解稀疏矩阵和密集矩阵,生成网格,并在最琐碎的意义上执行类似的操作。我需要并行化我的代码以减少计算时间,并为此使用了OpenMP。但在仔细查看市售代码后,如ANSYSCFX,我发现该软件中使用的并行化方案是MPICH2,它是MPI的一种实现。所以你有很多并行化工具/API:OpenMP理工学院英特尔线程构建模块线程微软PPL我使用了其中的一些工具,并设法在我的本地计算机上使用每个工具获得100%的CPU使用率。我不知道在选择合适的并行化工具时应该注意什么标准。什么样的应用程序需要哪种工具?以上任何一项都可以用于研究目的