Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert CppIn/Out/Ref/Var-Ports #297

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
ca90550
Adding preliminary ports
seowwj Aug 9, 2022
a0c10e6
Added CppPort and CppIOPort
seowwj Aug 10, 2022
e50481d
Add preliminary classes for CppInPorts and CppOutPorts
seowwj Aug 10, 2022
9152359
Add preliminary code for CppRefPorts
seowwj Aug 10, 2022
231d591
Added preliminary CppVarPort class
seowwj Aug 10, 2022
3eac075
Add derived classes for CppVarPort
shaline-koh Aug 10, 2022
b1b3cfc
Update namespace naming
seowwj Aug 11, 2022
406fcfb
Merge branch 'messaging_refactor_develop' of https://github.com/lava-…
seowwj Aug 11, 2022
c7cc0e1
Merge branch 'lava-nc-messaging_refactor_develop' into messaging_refa…
seowwj Aug 11, 2022
7fbc060
Merge branch 'messaging_refactor_develop' of https://github.com/lava-…
seowwj Aug 12, 2022
e1a7f43
Merge branch 'lava-nc-messaging_refactor_develop' into messaging_refa…
seowwj Aug 12, 2022
8901ab1
Fix linting issues
seowwj Aug 12, 2022
d65b788
Updated pybind11 for numpy arrays
seowwj Aug 15, 2022
ff915b6
Fixed cpplint issues
seowwj Aug 15, 2022
2cc8c94
Added lambda functions
shaline-koh Aug 15, 2022
6b93ee3
Merge branch 'messaging_refactor_develop' of https://github.com/seoww…
shaline-koh Aug 15, 2022
3cdf7bb
Fix linting issues in Ports.h and Abstract Port cc file
seowwj Aug 15, 2022
c8febba
Added Python wrapper functions
seowwj Aug 15, 2022
bebd2f9
Added Pybind dtype for AbstractPortImplementation
seowwj Aug 15, 2022
cd50a84
Added tranformer header file
shaline-koh Aug 15, 2022
1c348c1
Updated transformers with parameters
seowwj Aug 15, 2022
76eb9d8
Add missing include in PyWrapper
seowwj Aug 16, 2022
0c05fac
Add namespace for ports.cc
seowwj Aug 16, 2022
d719a11
Add different types of Read()
seowwj Aug 16, 2022
33a3107
Add transformer include and null to constants
seowwj Aug 16, 2022
4e8946e
Swap naming of classes in PyWrapper
seowwj Aug 16, 2022
da6df89
Test variant on return types
seowwj Aug 16, 2022
516cc28
Added Python wrapper for transformer class
shaline-koh Aug 16, 2022
c993f19
Comment out Out/Ref/VarPorts for debugging
seowwj Aug 17, 2022
b64393b
Merge branch 'messaging_refactor_develop' of https://github.com/seoww…
seowwj Aug 17, 2022
8f2d512
Merge pull request #3 from lava-nc/messaging_refactor_develop
seowwj Aug 17, 2022
14a0514
Change to use template for Recv and Peek (CppInPort)
seowwj Aug 17, 2022
32fed22
Using pointers for constants
seowwj Aug 18, 2022
babb953
Updated templates for all ports
seowwj Aug 18, 2022
3d58b77
Fixed issue with vectors
seowwj Aug 18, 2022
1164cdb
Fix linting issue
seowwj Aug 18, 2022
3cc2210
Uncomment in PyWrapper
seowwj Aug 18, 2022
ab59e6c
Add AbstractPort, Port and Transformer to CMakeLists
seowwj Aug 18, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions src/lava/magma/runtime/message_infrastructure/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,18 @@ set(MULTI_PROC_SRCS
"message_infrastructure/csrc/posix_actor.cc"
)

set(ABSTRACT_PORT_SRCS
"message_infrastructure/csrc/abstract_port_implementation.cc"
)

set(PORT_SRCS
"message_infrastructure/csrc/ports.cc"
)

set(TRANSFORMER_SRCS
"message_infrastructure/csrc/transformer.cc"
)

file (GLOB PY_WRAPPER "message_infrastructure/csrc/message_infrastructure_py_wrapper.cc")

find_package(pybind11 CONFIG)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,4 @@ std::vector<int> AbstractPortImplementation::GetShape() {
return this->shape_;
}

std::vector<PortPtr> AbstractPortImplementation::GetPorts() {
return this->ports_;
}

} // namespace message_infrastructure
} // namespace message_infrastrature
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
#ifndef ABSTRACT_PORT_IMPLEMENTATION_H_
#define ABSTRACT_PORT_IMPLEMENTATION_H_

#include <pybind11/pybind11.h>
#include <pybind11/numpy.h>

#include <vector>

#include "abstract_port.h"
Expand All @@ -17,9 +20,9 @@ class AbstractPortImplementation {
int Start();
int Join();
std::vector<int> GetShape();
std::vector<PortPtr> GetPorts();
virtual std::vector<PortPtr> GetPorts();

DataType dtype_;
pybind11::dtype dtype_;
std::vector<int> shape_;
size_t size_;
ProcessModel process_model_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
#include "shm.h"
// #include "shmem_channel.h"
// #include "shmem_port.h"
#include "ports.h"
#include "transformer.h"

namespace message_infrastructure {

Expand Down Expand Up @@ -60,7 +62,101 @@ PYBIND11_MODULE(MessageInfrastructurePywrapper, m) {
.def("get_dstport", &ShmemChannel::GetDstPort, return_value_policy::reference);
m.def("get_shmemchannel", &GetShmemChannel, return_value_policy::reference);
*/
}

py::class_<AbstractCppPort> (m, "AbstractPyPort")
.def(py::init<>());

py::class_<AbstractCppIOPort> (m, "AbstractPyIOPort")
.def("ports", &AbstractCppIOPort::GetPorts);

py::class_<CppInPort> (m, "PyInPort")
.def("probe", &CppInPort::Probe);

py::class_<CppInPortVectorDense> (m, "PyInPortVectorDense")
.def("recv", &CppInPortVectorDense::Recv)
.def("peek", &CppInPortVectorDense::Peek);

py::class_<CppInPortVectorSparse> (m, "PyInPortVectorSparse")
.def("recv", &CppInPortVectorSparse::Recv)
.def("peek", &CppInPortVectorSparse::Peek);

py::class_<CppInPortScalarDense> (m, "PyInPortScalarDense")
.def("recv", &CppInPortScalarDense::Recv)
.def("peek", &CppInPortScalarDense::Peek);

py::class_<CppInPortScalarSparse> (m, "PyInPortScalarSparse")
.def("recv", &CppInPortScalarSparse::Recv)
.def("peek", &CppInPortScalarSparse::Peek);

py::class_<CppOutPort> (m, "PyOutPort")
.def(py::init<>());

py::class_<CppOutPortVectorDense> (m, "PyOutPortVectorDense")
.def("send", &CppOutPortVectorDense::Send);

py::class_<CppOutPortVectorSparse> (m, "PyOutPortVectorSparse")
.def("send", &CppOutPortVectorSparse::Send);

py::class_<CppOutPortScalarDense> (m, "PyOutPortScalarDense")
.def("send", &CppOutPortScalarDense::Send);

py::class_<CppOutPortScalarSparse> (m, "PyOutPortScalarSparse")
.def("send", &CppOutPortScalarSparse::Send);

py::class_<CppRefPort> (m, "PyRefPort")
.def(py::init<>())
.def("ports", &CppRefPort::GetPorts);

py::class_<CppRefPortVectorDense> (m, "PyRefPortVectorDense")
.def("read", &CppRefPortVectorDense::Read)
.def("write", &CppRefPortVectorDense::Write);

py::class_<CppRefPortVectorSparse> (m, "PyRefPortVectorSparse")
.def("read", &CppRefPortVectorSparse::Read)
.def("write", &CppRefPortVectorSparse::Write);

py::class_<CppRefPortScalarDense> (m, "PyRefPortScalarDense")
.def("read", &CppRefPortScalarDense::Read)
.def("write", &CppRefPortScalarDense::Write);

py::class_<CppRefPortScalarSparse> (m, "PyRefPortScalarSparse")
.def("read", &CppRefPortScalarSparse::Read)
.def("write", &CppRefPortScalarSparse::Write);

py::class_<CppVarPort> (m, "PyVarPort")
.def(py::init<>());
// .def("csp_ports", &CppVarPort::GetCspPorts);

py::class_<CppVarPortVectorDense> (m, "PyVarPortVectorDense")
.def("service", &CppVarPortVectorDense::Service);

py::class_<CppVarPortVectorSparse> (m, "PyVarPortVectorSparse")
.def("recv", &CppVarPortVectorSparse::Recv)
.def("peek", &CppVarPortVectorSparse::Peek)
.def("service", &CppVarPortVectorSparse::Service);

py::class_<CppVarPortScalarDense> (m, "PyVarPortScalarDense")
.def("recv", &CppVarPortScalarDense::Recv)
.def("peek", &CppVarPortScalarDense::Peek)
.def("service", &CppVarPortScalarDense::Service);

py::class_<CppVarPortScalarSparse> (m, "PyVarPortScalarSparse")
.def("recv", &CppVarPortScalarSparse::Recv)
.def("peek", &CppVarPortScalarSparse::Peek)
.def("service", &CppVarPortScalarSparse::Service);


/*
py::class_<AbstractTransformer> (m, "AbstractTransformer")
.def("transform", &AbstractTransformer::Transform);

py::class_<IdentityTransformer> (m, "IdentityTransformer")
.def("transform", &IdentityTransformer::Transform);

py::class_<VirtualPortTransformer> (m, "VirtualPortTransformer")
.def("transform", &VirtualPortTransformer::Transform)
.def("_get_transform", &VirtualPortTransformer::_Get_Transform);
*/
}

} // namespace message_infrastructure
} // namespace message_infrastructure
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright (C) 2021-22 Intel Corporation
// SPDX-License-Identifier: BSD-3-Clause
// See: https://spdx.org/licenses/

#include <ports.h>
#include <vector>

namespace message_infrastructure {

std::vector<PortPtr> AbstractCppIOPort::GetPorts() {
return this->ports_;
}

bool CppInPort::Probe() {
auto lambda = [&](int acc, int port){return acc && port->Probe();};
return std::accumulate(ports_.begin(), ports_.end(), true, lambda);
}
//TODO: Implement transform and change ndarray type
ndarray CppInPortVectorDense::Recv(){
auto lambda = [&](int acc, int port){return acc + port->Transform();}
}

int CppInPortScalarDense::Recv() {
}

int CppInPortScalarDense::Peek() {
}

std::vector<int> CppInPortScalarSparse::Recv(){
}

std::vector<int> CppInPortScalarSparse::Peek(){
}

std::vector <ndarray> CppOutPortVectorDense::Send(ndarray data){
for (auto port : this->ports_){
port->Send(data);
}
}

} // namespace message_infrastructure
Loading