Skip to content

Flians/MAPSIM

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MAPSIM

MAPSIM: Efficient Multi-Array Parallel Scheduling for In-Memory SIMD Computations

Download

git clone --recursive https://github.com/leeoding/MAPSIM.git

Build

First, resolve the function name conflict issue. Open MAPSIM/lib/mockturtle/lib/bill/bill/utils/hash.hpp Change this file as:

/*--------------------------------------------------------------------------------------------------
| This file is distributed under the MIT License.
| See accompanying file /LICENSE for details.
*-------------------------------------------------------------------------------------------------*/
#pragma once

#include <set>
#include <utility>
#include <functional> 
#include <cstdint>    

// 1. 将 hash_combine 放入 bill 命名空间
// 这样可以避免与 Boost 库中的 hash_combine 发生冲突
namespace bill {

template<class T>
inline void hash_combine(std::size_t& seed, T const& v)
{
    seed ^= std::hash<T>()(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}

} // namespace bill


// 2. 特化 std::hash 必须在 std 命名空间中进行
namespace std {

// 特化 std::set 的哈希
template<typename T>
struct hash<std::set<T>> {
    using argument_type = std::set<T>;
    using result_type = size_t;
    
    result_type operator()(argument_type const& in) const
    {
        result_type seed = 0;
        for (auto& element : in) {
            // 关键点:显式调用 bill::hash_combine
            bill::hash_combine(seed, element);
        }
        return seed;
    }
};

// 特化 std::pair<uint32_t, uint32_t> 的哈希
template<>
struct hash<std::pair<uint32_t, uint32_t>> {
    using argument_type = std::pair<uint32_t, uint32_t>;
    using result_type = size_t;
    
    result_type operator()(argument_type const& in) const
    {
        result_type seed = 0;
        // 关键点:显式调用 bill::hash_combine
        bill::hash_combine(seed, in.first);
        bill::hash_combine(seed, in.second);
        return seed;
    }
};

} // namespace std

Then run:

./build.sh

Run

First you need write row number in benchmarks.txt such as "voter 256"

Then if run l-level method

build/src/MAPSIM l-level

Run po method

build/src/MAPSIM po

Run W.O.I.A method

build/src/MAPSIM woia

Cite

@article{fu2026mapsim,
  author   = {Fu, Rongliang and Zhang, Ran and Shen, Libo and Xuan, Wei and Lin, Ning and Huang, Junying and Yu, Bei and Ho, Tsung-Yi},
  journal  = {IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems},
  title    = {Efficient Multi-Array Parallel Scheduling for In-Memory Computing},
  year     = {2026},
  volume   = {},
  number   = {},
  pages    = {},
  keywords = {},
  doi      = {}
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Verilog 99.4%
  • Other 0.6%