사냥꾼의 IT 노트

Python 병렬 라이브러리 개발 프로젝트 - 코드 분할: pyconnx_Types.py 본문

python

Python 병렬 라이브러리 개발 프로젝트 - 코드 분할: pyconnx_Types.py

가면 쓴 사냥꾼 2023. 1. 12. 21:43

※본 포스팅은 22년 9월~22년 11에 진행된 프로젝트의 연구노트입니다.

 

pyconnx_Types.py

  • 로직: C 구조체들을 모은 파이썬 파일
  • 파일 'pyconnx_Types'로 통합한 구조체 및 클래스 목록
    • DataType
    • Operator
    • Tensor
    • Node
    • Graph
    • Model
import ctypes
import sys

path =f'./libconnx.so'
connx = ctypes.cdll.LoadLibrary(path)
args = sys.argv

#datatype
class DataType(ctypes.Structure) :
    pass

#operator
class Operator (ctypes.Structure):
    pass

#tensor
class Tensor(ctypes.Structure) :
    pass

Tensor._fields_ = [
    ("dtype", ctypes.c_int8), # c로 말하자면 int 8bit를 받는다
    ("ndim", ctypes.c_int32),
    ("shape", ctypes.POINTER(ctypes.c_int32)),
    ("buffer", ctypes.c_void_p),
    ("size", ctypes.c_uint32),
    ("parent", ctypes.POINTER(Tensor)),
    ("ref_count", ctypes.c_int32),
]

#node
class Node(ctypes.Structure):
    _fields_ = [
        ('output_count', ctypes.c_uint32),
        ('outputs', ctypes.POINTER(ctypes.c_uint32)),
        ('input_count', ctypes.c_uint32),
        ('inputs', ctypes.POINTER(ctypes.c_uint32)),

        ('attribute_count', ctypes.c_uint32),
        ('attributes', ctypes.POINTER((ctypes.c_void_p))),
        ('attribute_type', ctypes.POINTER(ctypes.c_uint32)),

        ('op_type', ctypes.c_char_p),
        ('op', ctypes.POINTER(Operator))
    ]


#model & graph
class Graph(ctypes.Structure):
    pass

class Model(ctypes.Structure):
    _fields_ = [
        ('version', ctypes.c_int32),

        ('opset_count', ctypes.c_uint32),
        ('opset_names', ctypes.POINTER(ctypes.POINTER(ctypes.c_char))),
        ('opset_versions', ctypes.POINTER(ctypes.c_uint32)),

        ('graph_count', ctypes.c_uint32),
        ('graphs', ctypes.POINTER(ctypes.POINTER(Graph))),
    ]

Graph._fields_ = [
    ('model', ctypes.POINTER(Model)),

    ('id', ctypes.c_uint32),

    ('initializer_count', ctypes.c_uint32),
    ('initializers', ctypes.POINTER(ctypes.POINTER(Tensor))),

    ('input_count', ctypes.c_uint32),
    ('inputs', ctypes.POINTER(ctypes.c_uint32)),

    ('output_count', ctypes.c_uint32),
    ('outputs', ctypes.POINTER(ctypes.c_uint32)),

    ('value_info_count', ctypes.c_uint32),
    ('value_infos', ctypes.POINTER(ctypes.POINTER(Tensor))),

    ('node_count', ctypes.c_uint32),
    ('nodes', ctypes.POINTER(ctypes.POINTER(Node))),
]