我对OpenMP稍微有点新,但是对于并行处理有一定的经验。我之前和boost::threads
一起工作过,现在我正在用openmp进行测试。OpenMP共享数据
的问题是,我不知道如何处理共享数据访问,因为我真的不知道是什么的OpenMP并行循环内共享数据对象在内部做。
我现在正在做什么(这是迄今为止的工作):我用mmap从磁盘读取文件到内存中。在内存映射部分之后,我收到一个char指针。
OpenMP现在可以在OpenMP parallel for循环中使用该指针并在线程之间共享数据。我现在可以在映射和共享文件内搜索正则表达式匹配,多个线程检查每个字符串与(很长的)正则表达式列表。
我做了这个名单(含正则表达式向量)OpenMP的循环中私有的,所以每个线程都有它自己的这个名单的副本。
这里谈到的问题:
大幅度增加我的应用程序的性能,我需要能够一旦他们匹配字符串移除此向量(regex-)项目。
现在所有其他活动线程都需要尽快从列表中删除此项目。
所以我做了这个名单OpenMP的循环内共享数据对象,但现在我在运行时获取分段错误,当我尝试写(vector.erase(项目#))到列表中。
With boost :: threads我只是在写/读它时使用了一个互斥锁来锁定这个对象。
OpenMP的,但似乎处理大多数同步自身的所以现在我不知道什么是使用OpenMP这是一个新的我,当来处理这个问题的正确途径。
你有一个最小的例子来证明这个问题吗? – 2011-05-10 06:49:45