【Hmetis图分割处理网表-具体划分 以gate为节点构建超图】

基本数据结构

std::unordered_map<std::string, int> _gate_name_indexs; // net:(name,index)
std::unordered_map<int, std::string> _gate_index_names; // net:(index,name)
std::unordered_map<std::string, int> _gate_P;          // name->part

核心函数

#include <ot/timer/timer.hpp>
namespace ot
{
   

  /*
    输出gate的绝对排序文件,为之后的GNN做铺垫
  */
  //================输出gate的绝对排序文件//================
  void Timer::dump_gate_sort(std::ostream &os) const
  {
   
    std::shared_lock lock(_mutex);
    _dump_gate_sort(os);
  }
  void Timer::_dump_gate_sort(std::ostream &os) const
  {
   
    for (const auto &[gate_name, gate] : _gates)
    {
   
      os << gate_name << std::endl;
    }
  }

 
  


  //================输出超图,以gate节点的超图文件//================
  void Timer::dump_hypergraph_gate(std::ostream &os)
  {
   
    std::shared_lock lock(_mutex);
    _dump_hypergraph_gate(os);
  }
  //输出超图文件,以gate作为节点,net作为超边
  // os: 为输出文件
  // gate_sort
  void Timer::_dump_hypergraph_gate(std::ostream &os)
  {
   
    std::string gatename;
    std::string buffer;
    int net_size = 0;
    std::unordered_set<std::string> uset; // set,记录所有筛掉后超边所连的gate
    //遍历net,将net超边所连gate输出
    for (const auto &[net_name, net] : _nets)
    {
   
      if (net.is_normal_net())
      {
   
        for (const auto pin : net._pins)
        {
   
          std::string gateName = pin->gate()->name();
          
          auto gate = _gate_name_indexs.find(gateName);
          assert(gate != _gate_name_indexs.end());
          buffer += to_string(gate->second) + " ";
          uset.emplace(gateName);
        }
        buffer += "\n";
        net_size++;
      }
    }
    assert(uset.size() <= _gate_name_indexs.size());
    //输出net_size ,gate_size
    os << net_size << " " << _gate_name_indexs.size() << "\n";
    //输出超边所连接的所有gate信息(index start from 0)
    os << buffer;
  }


  
  //================读取gate的绝对排序文件//================
  void Timer::read_gate_sort(std::filesystem::path path)
  {
   
    std::shared_lock lock(_mutex);
    std::ifstream ifs(path);
    assert(ifs.good());
    std::string gatename;
    int index = 1; // start from 1 gate index
    while (getline(ifs, gatename
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛歌依旧fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值