Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • Issue
  • #16688

P
Paddle
  • 项目概览

PaddlePaddle / Paddle
大约 2 年 前同步成功

通知 2325
Star 20933
Fork 5424
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 4月 04, 2019 by saxon_zh@saxon_zhGuest

The order issue of graph_helper's unordered_set

Created by: yihuaxu

在复现ISSUE#16316时候发现,graph_helper里使用了unordered_set来保存节点,但是发现unordered_set元素的插入顺序和再重新读出来的顺序不一致。    1)PaddlePaddle版本: 76b49f02    2)CPU: No AVX / No MKLML    3)系统环境: CI 节点 yq01-gpu-255-134-14-04
   4)尝试解决思路:            将排序部分移至graph转program之前或是将unordered_set改为vector。    5)Log Patch:

        diff --git a/paddle/fluid/framework/ir/graph_helper.cc b/paddle/fluid/framework/ir/graph_helper.cc
        index 28a37f3..b54e396 100644
        --- a/paddle/fluid/framework/ir/graph_helper.cc
        +++ b/paddle/fluid/framework/ir/graph_helper.cc
        @@ -143,8 +143,20 @@ std::map<ir::Node *, std::unordered_set<ir::Node *>>                       BuildOperationAdjList(
             std::sort(nodes.begin(), nodes.end(), [](ir::Node *node1, ir::Node *node2) {
               return node1->id() > node2->id();
     });
        +    std::cout << "vector ";
        +    for (auto it = nodes.begin(); it != nodes.end(); it++) {
        +      std::cout << "node id " << (*it)->id() << ", name " << (*it)->Name()
        +                << ", ";
        +    }
        +    std::cout << std::endl;
             adj_list[n].insert(std::make_move_iterator(nodes.begin()),
                                std::make_move_iterator(nodes.end()));
        +    std::cout << "unordered_set ";
        +    for (auto it = adj_list[n].begin(); it != adj_list[n].end(); it++) {
        +      std::cout << "node id " << (*it)->id() << ", name " << (*it)->Name()
        +                << ", ";
        +    }
        +    std::cout << std::endl;
           }
           return adj_list;
         }
6)Log:
        [08:42:22] :	 [Step 1/1] 131: **vector node id 717, name assign, node id 715, name assign, node id 695, name assign,** node id 693, name assign, node id 673, name assign, node id 671, name assign, node id 651, name assign, node id 649, name assign, node id 629, name assign, node id 627, name assign, node id 607, name assign, node id 605, name assign, node id 585, name fill_constant_batch_size_like, node id 583, name fill_constant_batch_size_like, node id 581, name fill_constant_batch_size_like, node id 579, name fill_constant_batch_size_like, node id 577, name fill_constant_batch_size_like, node id 575, name fill_constant_batch_size_like, node id 573, name fill_constant_batch_size_like, node id 571, name fill_constant_batch_size_like, node id 569, name fill_constant_batch_size_like, node id 567, name fill_constant_batch_size_like, node id 565, name fill_constant_batch_size_like, node id 563, name fill_constant_batch_size_like, node id 561, name write_to_array, node id 559, name write_to_array, node id 554, name less_than, node id 552, name fill_constant, node id 550, name fill_constant, node id 3, name feed, node id 0, name feed, 
        [08:42:22] :	 [Step 1/1] 131: unordered_set node id 0, name feed, node id 3, name feed, node id 550, name fill_constant, node id 552, name fill_constant, node id 559, name write_to_array, node id 554, name less_than, node id 563, name fill_constant_batch_size_like, node id 565, name fill_constant_batch_size_like, node id 567, name fill_constant_batch_size_like, node id 569, name fill_constant_batch_size_like, node id 571, name fill_constant_batch_size_like, node id 573, name fill_constant_batch_size_like, node id 575, name fill_constant_batch_size_like, node id 577, name fill_constant_batch_size_like, node id 605, name assign, node id 607, name assign, node id 579, name fill_constant_batch_size_like, node id 581, name fill_constant_batch_size_like, node id 583, name fill_constant_batch_size_like, node id 585, name fill_constant_batch_size_like, node id 649, name assign, node id 651, name assign, node id 671, name assign, node id 673, name assign, node id 627, name assign, node id 693, name assign, node id 629, name assign, node id 695, **name assign, node id 715, name assign, node id 561, name write_to_array, node id 717, name assign**,
7)相关链接:

       https://stackoverflow.com/questions/41334952/how-does-unordered-set-determine-the-inserting-order-in-c

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#16688
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7