小编jth*_*cie的帖子

STL地图与键的向量

我正在处理一些二进制数据,这些数据存储在任意长的无符号整数数组中.我发现我有一些重复的数据,我希望在短期内忽略重复,并删除长期导致它们的任何错误.

我正在考虑在存储之前将每个数据集插入到地图中,但只有在地图中找不到它才会开始.我最初的想法是有一个字符串映射,并使用memcpy作为锤子强制整数进入字符数组,然后将其复制到字符串中并存储字符串.这失败了,因为我的大量数据在相关数据的前面包含多个字节0(又名NULL),因此大部分非常真实的数据都被抛弃了.

我计划下一次尝试std::map<std::vector<unsigned char>,int>,但我意识到我不知道地图插入功能是否有效.

这是可行的,即使不明智,还是有更好的方法来解决这个问题?

编辑

所以有人说我没有弄清楚我在做什么,所以这里有一个更好的描述.

我正在努力生成最小生成树,因为我有许多树包含我正在使用的实际端节点.目标是选择具有最短长度并覆盖所有端节点的树,其中所选择的树彼此最多共享一个节点并且全部连接.我的做法是基于二元决策树,但做了一些改进,希望能够实现更大的并行性.

我没有采用二叉树方法,而是为每个数据集选择了无符号整数的位向量,其中位数为1的1表示包含相应的树.

例如,如果只是树0包含在5树数据集中,我就会开始

00001

从这里我可以生成:

00011

00101

01001

10001

然后可以并行处理这些中的每一个,因为它们中没有一个彼此依赖.我这样做对所有的单树(00010,00100,等),并应,我还没有花时间去正式证明这一点,才能够产生范围内的所有值(0.2 ^ N)的一次而且只有一次.

我开始注意到许多数据集的完成时间比我想象的要长得多,并且启用了调试输出以查看所有生成的结果,并且稍后我确认了一个快速的Perl脚本,我有多个进程生成相同的输出.从那以后,我一直在试图解决在重复从非常小的成功来了,我希望这将很好地工作,足以让我验证是否在没有产生结果,有时,第3天等待计算.

c++ search stl vector map

13
推荐指数
3
解决办法
2万
查看次数

OpenMPI使用MINLOC减少

我目前正在研究一些图形理论问题的MPI代码,其中许多节点都可以包含答案和答案的长度.为了让所有东西都回到主节点,我正在做一个MPI_Gather来获得答案,并且我正在尝试使用MPI_MINLOC操作来确定谁拥有最短的解决方案.现在我存储长度和节点ID的数据类型定义为(按照http://www.open-mpi.org/doc/v1.4/man3/MPI_Reduce.3.php等众多网站上显示的示例):

struct minType
{
    float len;
    int index;
};
Run Code Online (Sandbox Code Playgroud)

在每个节点上,我正在以下列方式初始化此结构的本地副本:

int commRank;
MPI_Comm_rank (MPI_COMM_WORLD, &commRank);
minType solutionLen;
solutionLen.len = 1e37;
solutionLen.index = commRank;
Run Code Online (Sandbox Code Playgroud)

在执行结束时,我有一个MPI_Gather调用,成功地将所有解决方案(我从内存中打印出来以验证它们)以及调用:

MPI_Reduce (&solutionLen, &solutionLen, 1, MPI_FLOAT_INT, MPI_MINLOC, 0, MPI_COMM_WORLD);
Run Code Online (Sandbox Code Playgroud)

我的理解是这些论点应该是:

  1. 数据源
  2. 是结果的目标(仅在指定的根节点上有效)
  3. 每个节点发送的项目数
  4. 数据类型(MPI_FLOAT_INT似乎是根据上面的链接定义的)
  5. 操作(MPI_MINLOC似乎也被定义)
  6. 指定通信组中的根节点ID
  7. 要等待的通信组.

当我的代码进入reduce操作时,我收到此错误:

[compute-2-19.local:9754] *** An error occurred in MPI_Reduce
[compute-2-19.local:9754] *** on communicator MPI_COMM_WORLD
[compute-2-19.local:9754] *** MPI_ERR_ARG: invalid argument of some other kind
[compute-2-19.local:9754] *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
--------------------------------------------------------------------------
mpirun has exited due to process …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing mpi

7
推荐指数
1
解决办法
1498
查看次数

标签 统计

c++ ×2

map ×1

mpi ×1

parallel-processing ×1

search ×1

stl ×1

vector ×1