KR20210057693A - 메모리 사전 할당 방법과 장치, 회로, 전자장치 및 매체 - Google Patents

메모리 사전 할당 방법과 장치, 회로, 전자장치 및 매체 Download PDF

Info

Publication number
KR20210057693A
KR20210057693A KR1020200150547A KR20200150547A KR20210057693A KR 20210057693 A KR20210057693 A KR 20210057693A KR 1020200150547 A KR1020200150547 A KR 1020200150547A KR 20200150547 A KR20200150547 A KR 20200150547A KR 20210057693 A KR20210057693 A KR 20210057693A
Authority
KR
South Korea
Prior art keywords
memory block
output
block identifier
identifier
layer
Prior art date
Application number
KR1020200150547A
Other languages
English (en)
Other versions
KR102521099B1 (ko
Inventor
준 팡
하이지오우 차이
씬펭 펜
지 자우
Original Assignee
넥스트브이피유 (상하이) 코포레이트 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 넥스트브이피유 (상하이) 코포레이트 리미티드 filed Critical 넥스트브이피유 (상하이) 코포레이트 리미티드
Publication of KR20210057693A publication Critical patent/KR20210057693A/ko
Application granted granted Critical
Publication of KR102521099B1 publication Critical patent/KR102521099B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Software Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Human Computer Interaction (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

메모리 사전 할당 방법과 장치, 회로, 전자장치 및 매체를 제공한다. 상기 방법은, 뉴럴 네트워크의 각 레이어를 대상으로, 각각의 출력에 대하여 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하고자 시도하여, 획득하였다면, 상기 출력의 식별자와 획득된 메모리 식별자를 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 유휴 메모리블록 식별자 리스트로부터 삭제하며, 획득하지 못하였다면, 메모리블록 식별자를 새로 생성하여 상기 출력의 식별자와 새로 생성된 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 새로 생성된 상기 메모리블록 식별자를 메모리블록 식별자 총괄 리스트에 포함시킴으로써, 상기 메모리블록 식별자 총괄 리스트에 따라 전체적인 뉴럴 네트워크 순방향 계산에 필요한 메모리블록을 생성하는 단계; 현재 레이어의 각 입력에 대하여, 상기 입력으로서 사용된 이전 레이어의 출력이 후속 레이어의 입력으로서 사용되지 않은 경우, 즉 상기 입력으로서 사용된 이전 레이어의 출력과 대응되는 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 포함시키는 단계를 포함한다.

Description

메모리 사전 할당 방법과 장치, 회로, 전자장치 및 매체 {METHOD, APPARATUS, CIRCUIT, ELECTRONIC DEVICE AND STORAGE MEDIUM FOR PRE-ALLOCATING MEMORY}
본 개시는 내부 메모리 관리분야에 관한 것으로서, 특히 뉴럴 네트워크의 순방향 계산(forward computation)을 위한 메모리 사전 할당 방법과 장치, 전자회로, 전자장치 및 컴퓨터 가독 저장매체에 관한 것이다.
최근 뉴럴 네트워크 기술은 각 분야에서 광범위하게 응용되고 있으나, 내부 메모리 리소스가 매우 제한적인 장치의 경우, 뉴럴 네트워크가 이용할 수 있는 메모리가 적기 때문에, 이러한 장치에서의 뉴럴 네트워크의 응용 및 그 성능을 크게 제한하고 있다.
여기에 기술하는 방법은 이전에 이미 생각한 것이거나 또는 사용된 방법이라고는 할 수 없다. 별도로 명시하지 않는 한, 이 부분에 기술되는 어떠한 방법도 단지 이 부분에 포함된다고 해서 종래 기술로 가정해서는 안 된다. 유사하게, 별도로 명시하지 않는 한, 이 부분에서 언급되는 문제는 어떤 종래 기술에서 이미 공인된 것이라고 여겨서도 안 된다.
본 개시의 일 측면에 따르면, 뉴럴 네트워크의 순방향 계산을 위한 메모리 사전 할당 방법을 제공하며, 이는 뉴럴 네트워크의 제1 레이어로부터 순차적으로 배열되는 뉴럴 네트워크의 각 레이어를 대상으로, 현재 레이어의 각 출력에 대하여 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하도록 시도하여, 획득하였다면, 상기 출력의 식별자와 획득된 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 레이어의 각 출력의 식별자 및 대응되는 메모리블록 식별자를 기록하기 위한 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 유휴 메모리블록 식별자 리스트로부터 상기 메모리블록 식별자를 삭제하고, 획득하지 못하였다면, 메모리블록 식별자를 새로 생성하고 상기 출력의 식별자와 새로 구축된 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 또한 새로 생성된 상기 메모리블록 식별자를 모든 신규 생성 메모리블록 식별자를 기록하기 위한 메모리블록 식별자 총괄 리스트에 포함시킴으로써, 뉴럴 네트워크 순방향 계산을 실행 시, 상기 메모리 식별자 총괄 리스트에 따라 뉴럴 네트워크 순방향 계산에 필요한 메모리블록을 생성하는 조작; 및 현재 레이어의 각 입력에 대해, 상기 입력으로서 사용된 이전 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않은 경우, 즉 상기 입력으로 사용된 이전 레이어의 출력에 대응되는 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 포함시키는 조작을 실행하는 계산단계를 포함한다.
본 개시의 다른 측면에 따르면, 뉴럴 네트워크 순방향 계산을 위한 메모리 사전 할당 장치를 제공하며, 이는 현재 레이어의 각 출력에 대하여 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하도록 시도하여, 획득하였다면, 상기 출력의 식별자와 획득된 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 레이어의 각 출력의 식별자 및 대응되는 메모리블록 식별자를 기록하기 위한 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 유휴 메모리블록 식별자 리스트로부터 상기 메모리블록 식별자를 삭제하고, 획득하지 못하였다면, 메모리블록 식별자를 새로 생성하고 상기 출력의 식별자와 새로 구축된 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 또한 새로 생성된 상기 메모리블록 식별자를 모든 신규 생성 메모리블록 식별자를 기록하기 위한 메모리블록 식별자 총괄 리스트에 포함시킴으로써, 뉴럴 네트워크 순방향 계산을 실행 시, 상기 메모리 식별자 총괄 리스트에 따라 뉴럴 네트워크 순방향 계산에 필요한 메모리블록을 생성하는 조작; 및 현재 레이어의 각 입력에 대해, 상기 입력으로서 사용된 이전 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않은 경우, 즉 상기 입력으로 사용된 이전 레이어의 출력에 대응되는 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 포함시키는 조작을 실행하도록 배치되는 계산 유닛을 포함한다.
본 개시의 다른 측면에 따르면, 상기 방법의 단계를 실행하는 회로로 배치되는 전자회로를 제공한다.
본 개시의 다른 측면에 따르면, 전자장치를 더 제공하며, 이는 프로세서; 및 상기 프로세서가 실행 시, 상기 프로세서로 하여금 상기 방법을 실행하도록 하는 명령이 포함된 프로그램을 저장하는 메모리를 포함한다.
본 개시의 다른 측면에 따르면, 전자장치의 프로세서가 실행 시, 상기 전자장치로 하여금 상기 방법을 실행하도록 하는 명령이 포함된 프로그램을 저장하는 비임시 컴퓨터 가독 저장매체를 더 제공한다.
도면은 실시예를 예시적으로 도시한 것으로서 명세서의 일부분을 구성하며, 명세서의 문자 기술과 함께 실시예의 예시적인 실시방식을 설명하기 위한 것이다. 도시된 실시예는 단지 예시 목적을 위한 것일 뿐, 청구항의 범위는 제한하지 않는다. 모든 도면에서, 동일한 부호 표기는 유사하나 단 반드시 동일하지만은 않은 요소를 가리킨다.
도 1은 본 개시의 일 예시적 실시예에 따른 뉴럴 네트워크 순방향 계산을 위한 메모리 사전 할당 방법의 흐름도이다.
도 2는 뉴럴 네트워크 구조를 나타낸 도형 예시이다.
도 3은 출력이 여러 번 인용되는 예시이다.
도 4는 예시적인 유휴 메모리블록 식별자 리스트(801)를 나타낸 도면이다.
도 5는 예시적인 출력과 메모리블록 식별자 매핑 리스트(802)를 나타낸 도면이다.
도 6은 예시적인 메모리블록 식별자 총괄 리스트(803)를 나타낸 도면이다.
도 7은 본 개시의 예시적 실시예에 따른, 계산단계 S100 이전에 실행되는 단계의 흐름도이다.
도 8a와 도 8b는 예시적인 입력 집합(804)과 출력 집합(805)을 각각 나타낸 도면이다.
도 9는 예시적인 출력과 피인용 횟수의 대응 리스트(806)이다.
도 10은 본 개시의 예시적 실시예에 따른 상기 출력과 피인용 횟수 대응 리스트(806) 생성 방법의 흐름도이다.
도 11은 본 개시의 예시적 실시예에 따른 상기 출력과 피인용 횟수 대응 리스트(806) 업데이트 방법의 흐름도이다.
도 12는 예시적인 기사용(used) 메모리 식별자와 용량 매핑 리스트(807)를 나타낸 도면이다.
도 13은 본 개시의 예시적 실시예에 따른 메모리 할당 단계 S200의 흐름도이다.
도 14는 본 개시의 예시적 실시예에 따른 메모리 사전 할당 장치(1)의 블록도이다.
도 15는 본 개시의 예시적 실시예에 따른 전자장치의 구조 블록도이다.
본 개시에서, 별도의 설명이 없는 한, "제1", "제2" 등 용어를 사용하여 각종 요소를 묘사하는 것은 이러한 요소의 위치관계, 시간 순서관계 또는 중요성 관계를 한정하고자 하는 것이 아니며, 이러한 용어는 단지 하나의 소자와 다른 소자를 구분하기 위한 것이다. 일부 예시에서, 제1 요소와 제2 요소는 상기 요소의 동일한 실례를 가리킬 수 있고, 어떤 경우, 앞뒤 문장의 설명에 따라, 다른 실례를 가리킬 수도 있다.
본 개시에서 각종 상기 예시에 대한 묘사에 사용되는 용어는 특정 예시를 설명하기 위한 목적일 뿐, 제한하는 데 목적이 있지 않다. 본문에서 명확하게 밝히지 않는 한, 요소의 수량을 특별히 한정하지 않는다면, 상기 요소는 하나일 수도 있고 여러 개일 수도 있다. 또한, 본 개시에 사용된 "및/또는"이라는 용어는 열거된 항목 중의 어느 하나 및 전부의 가능한 조합방식을 포함한다.
뉴럴 네트워크 계산은 내부 메모리의 소모에 대한 수요가 비교적 크며, 예를 들어 딥 뉴럴 네트워크에는 흔히 여러 층의 컨볼루션 연산이 있어, 입력부터 시작하여, 수 층, 수십 층 심지어 백 층이 넘는 컨볼루션 연산을 거쳐야 한다. 종래 기술에서는 뉴럴 네트워크 중 각 레이어의 출력마다 모두 메모리를 할당하려면, 엄청난 메모리 용량이 필요하며, 이는 메모리 용량이 매우 제한적인 장치의 경우 상당한 도전이다.
내부 메모리 용량이 작은 장치의 경우, 메모리를 절약하려면, 각 레이어의 계산을 종료 시 메모리를 해제하고, 다음 레이어의 연산을 시작 시, 실시간 요구에 따라 메모리를 신청함으로써, 메모리를 실시간으로 할당하여 메모리 이용률을 높일 수 있다. 그러나 이렇게 되면 각 레이어마다 내부 메모리를 임시로 신청 및 할당해야 하고, 특히 뉴럴 네트워크의 컨볼루션 레이어가 많은 경우, 시간이 많이 걸리므로, 전체적인 뉴럴 네트워크의 성능에 크게 영향을 미친다.
본 개시는 뉴럴 네트워크의 순방향 계산을 위한 내부 메모리 사전 할당 방법을 제공한다. 도 1은 본 개시의 예시적 실시예에 따른 뉴럴 네트워크의 순방향 계산을 위한 내부 메모리 사전 할당 방법의 흐름도이다.
뉴럴 네트워크의 순방향 계산 과정에서, 입력 레이어로부터 데이터를 획득한 후, 순차적으로 계산을 수행하며, 순차 계산 과정에서, 이전 레이어의 출력이 저장된 메모리로부터 필요한 데이터를 획득하여, 현재 레이어의 연산을 수행하고, 현재 레이어의 출력으로서의 계산 결과를 내부 메모리에 저장하여 다음 레이어에서 사용하도록 제공한다.
도 1에 도시된 바와 같이, 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 순방향 연산을 위한 내부 메모리 사전 할당 방법은, 뉴럴 네트워크의 제1 레이어로부터 시작하여, 순차적으로 배열된 뉴럴 네트워크의 각 레이어에 대해, 계산을 실행하는 단계 S100을 포함한다.
도 2에 도시된 뉴럴 네트워크 구조에 대해 설명하면, 데이터는 먼저 레이어 1에 진입하여 처리된 후, 레이어 1의 출력이 입력으로서 레이어 2로 진입할 수 있으며, 다시 이어서, 레이어 2의 출력은 또 입력으로서 레이어 3으로 진입하고, 이후 레이어 3의 출력이 또 입력으로서 후속 레이어로 진입하는 식으로, 상기 뉴럴 네트워크의 마지막 레이어까지 실행된다.
본문에서, 상기 "레이어"는 뉴럴 네트워크에서 사용되는 각종 레이어, 예를 들어 컨볼루션 레이어, 풀링(pooling) 레이어, 활성화 레이어, 배치 정규화(Batch Normalization) 레이어 등일 수 있다.
또한, 이해와 설명의 편의를 위하여, 도 2는 간단한 입출력 연결관계, 즉 이전 레이어의 출력이 직접 다음 레이어의 입력으로 사용되는 경우를 제시한 것이다. 실제로는, 하나의 레이어의 출력이 직접 인접한 다음 레이어의 입력으로서 사용되는 것이 아니라, 후면의 다른 레이어의 입력으로서 사용되는 경우도 존재할 수 있다. 또한, 하나의 레이어의 어떤 출력이 후면의 여러 레이어의 입력으로서 사용되는 경우도 존재할 수 있다. 즉, 하나의 출력이 몇 개의 입력으로 인용되는 경우가 존재할 수 있다. 하나의 출력이 어떤 레이어의 하나의 입력으로서 사용될 경우, "상기 출력이 1회 인용되었다"라고 하고, 하나의 출력이 상이한 레이어의 입력(이 때는 다수의 입력)으로서 사용될 경우, "상기 출력이 여러 회 인용되었다"라고 한다. 도 3은 하나의 출력이 여러 회 인용된 예시를 나타낸 것이다. 도 3을 통해 알 수 있듯이, 풀링 레이어(1')의 출력(Out1)이 각각 컨볼루션 레이어(2')의 입력(In1), 컨볼루션 레이어(3')의 입력(In2), 활성화 레이어(4')의 입력(In3)으로서 사용되었다면, 풀링 레이어의 상기 출력(Out1)이 후속 레이어의 입력에 3회 인용되었음을 나타낸다.
각 출력이 후속되는 입력에 인용되는 횟수는 뉴럴 네트워크의 구체적인 구조에 따라 결정되며, 다시 말해, 뉴럴 네트워크의 구체적인 구조에 따라, 각 출력이 후속되는 입력에 인용되는 횟수가 결정된다.
뉴럴 네트워크의 각 레이어마다, 하나의 연산만 실시해도 되며, 예를 들어 각 레이어에서 하나의 복잡한 컨볼루션 연산을 실시하거나 또는 활성화 함수의 연산 등을 수행한다. 물론, 본 개시는 이에 대해 제한을 두지 않으며, 뉴럴 네트워크 중의 하나 또는 다수의 레이어에서 다수의 연산을 실시할 수도 있다. 도 3에 도시된 바와 같이, 상기 레이어 상의 연산의 입력과 출력이 바로 상기 레이어의 입력과 출력이다.
뉴럴 네트워크의 순방향 계산을 실행하기 전, 각 레이어에서, 상기 레이어의 연산에 대해 상기 계산 단계 S100을 실행할 수 있으며, 상기 계산 단계 S100은 메모리 재사용(reuse) 방식을 이용하여, 미리 상기 레이어의 각 출력을 위해, 순방향 연산을 실행하고자 할 때 상기 출력이 사용하도록 할당할 메모리, 및 해제할 메모리를 계산한다(후속 레이어가 계속 사용하게 함으로써 내부 메모리의 재사용을 구현한다).
상기 계산 단계 S100은 이하 단계 S101~S104를 포함한다.
먼저, 현재 레이어의 각 출력에 대해, 단계 S101에서, 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트(Idle List)로부터 내부 메모리블록 식별자(memory ID)를 획득하도록 시도한다. 다시 말해, 도 1에 도시된 바와 같이, 본 단계에서, 유휴 메모리블록 식별자 리스트에 상기 출력을 위한 메모리블록 식별자가 더 있는지 판단한다.
본 개시의 계산 단계 S100가 실행되기 전에, 유휴 메모리블록 식별자 리스트를 공(null)으로 설정할 수 있으며, 이는 이때 유휴 메모리블록 식별자 리스트에 메모리블록 식별자가 없음을 의미한다.
유휴 메모리블록 식별자 리스트의 예시 형식은 도 4에 도시된 바와 같을 수 있으며, 상기 유휴 메모리블록 식별자 리스트(801)는 메모리블록 식별자[MID1, MID2, ......, MIDn]를 포함한다. 즉, 총 n개의 유휴 메모리블록 식별자가 있다.
뉴럴 네트워크의 순방향 계산을 시작하려고 결정했을 때에만 비로소 진정한 메모리 할당이 필요하며, 그 전에 실행되는 것은 메모리의 사전 할당일 뿐, 실제 메모리 공간에 대해서는 실제로 조작을 하지 않는다는 점에 유의한다. 즉 본 개시의 예시적 실시예에 따른 메모리 사전 할당 방법은 미리 메모리 공간을 계획하여, 각 레이어의 메모리 점용과 해제를 계산하는 것으로서, 실제의 메모리 점용과 해제 조작은 발생하지 않는다. 사전 할당 시, 실제 메모리 공간은 아직 생성되지 않으며, 뉴럴 네트워크 순방향 계산을 실행하고자 할 때에만 비로소 메모리블록 식별자를 근거로 그것과 대응되는 실제 메모리블록이 생성될 수 있다.
본문에서, 유휴 메모리블록 식별자 리스트(801)는 유휴 메모리블록 식별자를 기록하기 위한 것이며, 즉 유휴 메모리 식별자 리스트(801) 중 향후 뉴럴 네트워크의 순방향 계산을 실제로 실행할 때, 이미 생성된 각 메모리블록 중에서, 유휴(사용되지 않은) 메모리블록에 대응되는 메모리블록 식별자가 기록된다. 다시 말해, 메모리블록 식별자에 입력의 식별자 또는 출력의 식별자와의 대응이 없다면, 유휴 메모리블록 식별자로 간주할 수 있다.
일부 실시예에 따르면, 전체 뉴럴 네트워크의 순방향 계산에 대한 메모리 사전 할당 과정에서, 동일한 유휴 메모리블록 식별자 리스트(801)를 사용할 수 있으며, 유휴 메모리블록 식별자 리스트(801) 내에 저장되는 것은 점용되지 않은 메모리블록 식별자이다. 다만, 전술한 바와 같이, 유휴 메모리블록 식별자를 정확하게 기록하여 높은 메모리 재사용 효율을 구현할 수 있도록, 각 레이어마다 모두 유휴 메모리블록 식별자 리스트(801)에 대해 업데이트를 실시할 수 있다.
본문은 메모리블록 식별자를 사용하여 향후 뉴럴 네트워크 순방향 계산을 실행 시의 메모리블록을 나타내었으며, 이러한 방식을 통해, 순방향 계산 과정에서 메모리의 할당과 해제에 대해 실시간으로 계산할 필요가 없을 뿐만 아니라, 순방향 계산을 실행 시, 각 입력 및 각 출력에 대응되는 메모리블록을 명확하게 알 수 있다. 예를 들어 "유휴" 메모리블록 식별자는 순방향 계산을 실제로 실행 시 "유휴"한 메모리블록을 표시할 수 있고, "사용"된 메모리블록 식별자는 순방향 계산을 실제로 실행 시 "점용"(또는 "기사용(used)") 메모리블록을 표시할 수 있다.
본 개시에서, 각 메모리블록 식별자는 하나의 메모리블록에 대응될 수 있으며, 상기 메모리블록은 일정한 용량을 갖는다.
일부 실시예에 따르면, 도 1에 도시된 단계 S101에서 유휴 메모리블록 식별자 리스트로부터 획득된 메모리블록 식별자에 대응되는 메모리블록 용량이 상기 출력에 필요한 용량보다 작을 경우, 상기 메모리블록 용량이 상기 출력 용량 요구를 충족시키도록, 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 확대시킬 수 있다.
일부 실시예에 따르면, 도 1에 도시된 단계 S101 중의 상기 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하는 단계는,
유휴 메모리블록 식별자 리스트에 다수의 유휴 메모리블록 식별자가 있고, 상기 다수의 유휴 메모리블록 식별자에 대응되는 메모리블록 용량이 모두 상기 출력에 필요한 용량보다 작다면(즉, 유휴 메모리블록 식별자 리스트 중 용량이 상기 출력에 필요한 용량보다 크거나 같은 메모리블록 식별자가 없는 경우), 상기 다수의 유휴 메모리블록 식별자로부터 대응되는 메모리블록 용량이 최대인 유휴 메모리블록 식별자를 선택하여, 상기 출력과 매핑 관계를 갖는 메모리블록 식별자로 삼는 단계를 포함할 수 있다.
비록 상기 다수의 유휴 메모리블록 식별자로부터 선택된 것이 용량이 최대인 유휴 메모리블록 식별자라 하더라도, 이는 여전히 상기 출력에 필요한 용량보다 작다는 점에 유의해야 한다. 따라서, 일부 실시예에서, 상기한 바와 같이, 적어도 출력에 필요한 용량과 같아지도록, 선택된 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 확대시킬 수 있다.
일부 실시예에 따르면, 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 확대시키는 단계는, 상기 출력에 필요한 용량에 따라, 적어도 상기 출력에 필요한 용량과 같아지도록, 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 확대시키는 단계를 포함할 수 있다.
위에서는 유휴 메모리블록 식별자 리스트 중의 메모리블록 식별자에 대응되는 메모리블록 용량이 상기 출력에 필요한 용량보다 작은 경우 및 취하는 조치를 소개하였으며, 아래에서는 상기 출력에 필요한 용량보다 크거나 같은 경우 및 취하는 조치에 대해 소개하고자 한다.
일부 실시예에 따르면, 도 1에 도시된 단계 S101 중의 상기 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하는 단계는,
유휴 메모리블록 식별자 리스트에 다수의 유휴 메모리블록 식별자가 있다면, 상기 다수의 유휴 메모리블록 식별자 각자에 대응되는 메모리블록 용량과 상기 출력에 필요한 용량을 비교하여, 상기 출력에 필요한 용량보다 크거나 같은 메모리블록 용량 중에서, 상기 출력에 필요한 용량과의 차이값이 최소인 메모리블록 용량에 대응되는 유휴 메모리블록 식별자를 선택하여, 상기 출력과 매핑 관계를 갖는 메모리블록 식별자로 삼는 단계를 포함할 수 있다.
다시 말해, 상기 하나의 출력에 대해, 유휴 메모리블록 식별자 리스트에 상기 출력의 대응되는 메모리블록 식별자로서 선택될 수 있는 다수의 유휴 메모리블록 식별자가 있다면, 이러한 다수의 유휴 메모리블록 식별자로부터 상기 출력에 필요한 용량보다 크거나 같은 메모리블록 식별자를 선별한 후, 상기 출력에 필요한 용량보다 크거나 같은 메모리블록 식별자로부터, 그 용량이 상기 출력에 필요한 용량과 가장 근접한 메모리블록 식별자를 선택할 수 있다.
예를 들어 설명하면, 하나의 출력(OUT1)에 대하여, 유휴 메모리블록 식별자 리스트(801)에 선택할 수 있는 3개의 메모리블록 식별자(ID1, ID2, ID3)가 있고, 이 3개의 메모리블록 식별자의 용량은 각각 1K 바이트, 5K 바이트, 8K 바이트이며, 출력(OUT1)에 필요한 용량은 4K 바이트라고 가정하면, 이때 메모리블록 식별자 ID2와 ID3의 용량이 모두 출력(OUT1)보다 큰 것을 알 수 있으며, 이후, ID2와 ID3 중에서 용량이 상기 출력(OUT1)에 필요한 용량인 4K 바이트에 더욱 근접한 메모리블록 식별자(ID2)를 상기 출력(OUT1)에 대응되는 메모리블록 식별자로 선택한다.
일부 실시예에 따르면, 상기 출력에 필요한 용량은 상기 출력되는 데이터량과 데이터 유형을 통해 확정할 수 있다.
뉴럴 네트워크의 각 레이어의 계산 중, 상기 레이어 상의 각 출력되는 데이터량과 데이터 유형을 확정할 수 있다. 예를 들어, 어떤 컨볼루션 레이어의 출력되는 데이터 유형이 플로트형(float)인 경우, 플로트형 데이터가 4바이트를 차지하고, 상기 출력 데이터량이 200*200*5라고 가정하면, 즉 상기 출력에 필요한 메모리 공간(즉, 상기 출력에 필요한 용량)은 200*200*5*4=800000바이트이다.
이상으로 유휴 메모리블록 식별자 리스트에 상기 출력이 선택하여 사용할 수 있는 적어도 하나의 메모리블록 식별자가 존재하는 경우를 설명하였다. 설사 유휴 메모리블록 식별자 리스트에 적어도 하나의 메모리블록 식별자가 존재하더라도, 하나의 출력이 하나의 대응되는 메모리블록 식별자만 선택할 수 있을 뿐이다.
단계 S101에서 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하였다면, 단계 S102에서, 상기 출력의 식별자와 획득된 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 레이어의 각 출력 및 대응되는 메모리블록 식별자를 기록하기 위한 "출력과 메모리블록 식별자 매핑 리스트"에 저장하고, 유휴 메모리블록 식별자 리스트로부터 상기 메모리블록 식별자를 삭제한다.
상기 "출력과 메모리블록 식별자 매핑 리스트"(802)는 레이어의 각 출력이 뉴럴 네트워크의 순방향 계산을 실제로 실행할 때 사용할 메모리블록 식별자가 기록되며, 따라서, 상기 리스트에는 사용할 메모리블록 식별자(MID)가 기록되어야 하는 이외에, 상기 레이어의 각 출력과 상응하는 메모리블록 식별자 사이에 일대일의 대응관계가 구축될 수 있도록, 각 출력의 식별자(OID)가 더 기록되어야 한다(도 5 참조). 본문에서 이러한 일대일 대응관계를 "매핑 관계"라 칭한다. 언급하는 김에, 본문에는 출력의 식별자(OID)와 상응하는 메모리블록 식별자(MID) 사이의 매핑 관계뿐만 아니라, 출력의 식별자(OID)와 그것이 인용되는 횟수 사이의 매핑 관계도 더 있으며, 이러한 매핑 관계를 통해, 출력의 식별자와 메모리블록 식별자, 및 출력의 식별자와 피인용 횟수 사이의 관계를 구축함으로써, 사전 계산 시에 실제 운행 시의 메모리 점용 상황과 메모리 해제 상황을 확정할 수 있도록 하는데 도움이 된다.
단계 S101에서 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하였다면, 상기 레이어에 유휴 메모리블록이 존재하고 또한 유휴 메모리블록 식별자를 획득하였음을 나타내며, 이때 단계 S102로 전환하여, 상기 출력의 식별자와 획득된 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, "출력과 메모리블록 식별자 매핑 리스트"(802)에 저장함으로써, 뉴럴 네트워크 순방향 계산이 실제로 실행될 때, 상기 레이어에서, 상기 출력이 상기 메모리블록 식별자에 대응되는 메모리블록을 사용할 것임을 나타낼 수 있으며, 즉, 상기 출력이 상기 레이어에서 상기 메모리블록을 점용하게 될 것임(다시 말해 상기 메모리블록 식별자를 점용할 것임)을 나타낼 수 있다.
상기 레이어에서 상기 메모리블록 식별자를 점용할 것인 이상, 상기 메모리블록 식별자는 더 이상 유휴 상태가 아니며, 메모리블록 식별자의 유휴 상황이 적시에 반영되도록, 상기 메모리블록 식별자를 유휴 메모리블록 식별자 리스트(801)에서 삭제할 수 있다.
단계 S102는 유휴 메모리블록 식별자 리스트에 메모리블록 식별자가 있는 경우를 기술하였으며, 반대로, 유휴 메모리블록 식별자 리스트에 메모리블록 식별자가 없다면, 향후 뉴럴 네트워크 순방향 계산이 실행될 때 상기 출력의 메모리블록을 저장할 수 있도록, 메모리블록 식별자를 새로 생성할 필요가 있다.
따라서, 단계 S101에서 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하지 못하였다면, 유휴 메모리블록 식별자가 없음을 나타내며, 단계 S103으로 전환하여 메모리블록 식별자를 새로 생성하고, 상기 출력의 식별자와 새로 생성된 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 "출력과 메모리블록 식별자 매핑 리스트"(802)에 저장한다.
상기한 바와 같이, 각 레이어의 "출력과 메모리블록 식별자 매핑 리스트"(802)에는 상기 레이어의 각 출력의 식별자와 대응되는 메모리블록 식별자 사이의 일대일 대응 관계가 저장되며, 상기 메모리블록 식별자가 유휴 메모리블록 식별자 리스트에서 획득된 것인지, 아니면 새로 생성된 것인지를 막론하고, 각 출력의 식별자와 상응하는 메모리블록 식별자 사이의 일대일 대응 관계는 상기 출력이 상기 레이어에서 상기 메모리블록 식별자에 대응되는 메모리블록을 점용할 것임을 의미하며, 따라서, 각 레이어의 각각의 출력에 메모리 사전 할당을 구현할 수 있어, 뉴럴 네트워크의 순방향 계산이 실제로 실행될 때, 메모리 할당을 임시로 신청한 후, 메모리를 어떻게 할당할 것인지 임시로 계산 및 배치할 필요가 없기 때문에, 뉴럴 네트워크 순방향 계산을 위해 메모리를 신청 및 할당하는 시간 낭비를 방지할 수 있어, 계산 속도가 빨라진다.
또한, 새로 생성된 상기 메모리블록 식별자를 모든 신규 생성 메모리블록 식별자를 기록하기 위한 메모리블록 식별자 총괄 리스트에 기록함으로써, 뉴럴 네트워크 순방향 계산을 실행 시, 상기 메모리블록 식별자 총괄 리스트에 따라, 뉴럴 네트워크 순방향 계산에 필요한 메모리블록을 생성할 수도 있다.
도 6에 도시된 바와 같이, 상기 "메모리블록 식별자 총괄 리스트"(803)는 전체적인 뉴럴 네트워크의 순방향 계산에 사용되는 메모리블록의 메모리블록 식별자(MID)를 기록하기 위한 것이며, 다시 말해, 뉴럴 네트워크 순방향 계산 과정에서 사용해야 할 각각의 메모리블록이 누락되지 않도록, 새로 생성되는 메모리블록 식별자는 생성된 후 모두 상기 리스트에 기록되어야 한다.
단계 S102 또는 S103 이후, 단계 S123에서 현재 레이어에 다음 출력이 더 있는지 여부를 판단할 수 있으며, 만약 있다면, 단계 S101로 전환하여 계속 판단하고, 현재 레이어의 각 출력에 대해 모두 단계 S101이 실행되었다면, 단계 S101로부터 단계 S102 또는 S103으로 전환한다. 현재 레이어에 다음 출력이 없다면, 현재 레이어의 모든 출력에 대해 단계 S101의 판단이 실행된 것이므로, 단계 S104로 전환한다.
단계 S104에서, 현재 레이어의 각 입력에 대해, 상기 입력으로서 사용되는 이전 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않았다면, 상기 입력으로서 사용된 이전 레이어의 출력에 대응되는 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 포함시킨다.
전술한 바와 같이, 하나의 출력이 후속 레이어의 입력으로서 사용된다면, 상기 출력이 후속 레이어의 입력에 인용되는 것을 나타낸다. 본 단계에서, 현재 레이어의 각 입력에 대응되는 이전 레이어의 출력이 현재 레이어 이후의 다른 레이어의 입력에 인용되는지 여부를 판단하여, 즉 현재 레이어의 입력으로서 사용되는 이전 레이어의 출력의 피인용 횟수가 1과 같은지(현재 레이어의 입력에만 인용되는 경우) 여부를 판단하여, 현재 레이어의 입력으로서 사용되는 이전 레이어의 출력이 현재 레이어 이후의 다른 레이어의 입력에 인용되지 않을 경우, 즉 현재 레이어의 입력으로서 사용되는 이전 레이어의 출력의 피인용 횟수가 1과 같다면, 현재 레이어의 입력으로서 사용되는 상기 출력이 점용하는 메모리블록 식별자가 유휴 상태로 변경됨을 나타내며, 유휴 메모리블록 식별자 리스트에 포함시킬 수 있다.
본 단계를 통해 유휴 메모리블록 식별자 리스트에 저장할 메모리블록 식별자를 어떻게 확정하는지 명확하게 알 수 있으며, 단계 S101에서 유휴 메모리블록 식별자 리스트로부터 획득할 메모리블록 식별자는 바로 상기 방식을 통해 유휴 메모리블록 식별자 리스트에 저장된 것이다.
단계 S104를 통해, 각 레이어의 유휴 메모리블록 식별자 리스트 중의 메모리블록 식별자를 업데이트할 수 있으며, 보다 확실하게 말하면, 본 레이어의 새로운 공휴 메모리블록 식별자를 확정할 수 있어, 이에 따라 각 레이어의 메모리블록 식별자의 유휴 상황을 확정할 수 있다. 각 레이어의 메모리블록 식별자의 유휴 상황을 통해, 뉴럴 네트워크의 순방향 계산을 실행 시 메모리 재사용을 수행할 수 있으며(단계 S101과 S102에서, 유휴 메모리블록 식별자가 있다고 판단하였다면, 상기 유휴 메모리블록 식별자를 직접 사용할 수 있으며, 이에 따라 뉴럴 네트워크의 순방향 계산을 실제로 실행 시 메모리 재사용을 구현할 수 있다), 이에 따라 메모리 사용량이 대폭 절감되고, 메모리 이용률이 향상된다.
본 개시는 뉴럴 네트워크의 순방향 계산을 위해 내부 메모리를 재사용하는 방식을 통해 메모리를 사전 할당하여 전체적인 뉴럴 네트워크의 순방향 계산 과정에서 사용되는 메모리량을 감소시킬 수 있다. 또한 메모리가 이미 사전에 할당되었기 때문에, 뉴럴 네트워크의 순방향 계산을 시작하기 전, 전체적인 뉴럴 네트워크의 순방향 계산에 사용될 메모리를 먼저 생성함으로써, 뉴럴 네트워크의 순방향 계산 과정에서 항상 필요한 메모리의 할당과 해제를 생략할 수 있어 뉴럴 네트워크의 순방향 계산 시간이 대폭 절약되고, 순방향 계산 효율이 향상된다.
본 개시는 뉴럴 네트워크의 순방향 계산을 시작하기 전, 각 레이어마다 사용해야 하는 메모리를 사전 할당함으로써, 뉴럴 네트워크의 순방향 계산 과정에서 메모리의 임시 요청 및 할당이 생략되어 계산 처리 시간이 대폭 단축되고, 뉴럴 네트워크 순방향 계산 과정이 빨라지며, 이에 따라 전체적인 뉴럴 네트워크의 성능이 효과적으로 향상된다. 또한, 메모리를 사전 할당 시, 메모리 재사용과 결합하여 메모리의 사용량을 감소시킬 수도 있어, 임베디드 장치상의 매우 제한적인 메모리 리소스를 최대한으로 이용 및 절약할 수 있다.
일부 실시예에 따르면, 도 7에 도시된 바와 같이, 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 순방향 계산을 위한 메모리 사전 할당 방법은 또한,
상기 계산 단계 S100 이전에, 단계 S110을 실행하여, 각각 뉴럴 네트워크의 각 레이어에 상기 레이어의 입력 집합과 출력 집합을 구축하는 단계를 더 포함할 수 있다.
도 8a에 도시된 바와 같이, 뉴럴 네트워크의 각 레이어마다 구축되는 상기 입력 집합(804) 중의 각 원소는 상기 레이어의 각 입력별 식별자(IID), 데이터량(Data-In), 및 상기 입력을 저장하기 위한 메모리블록 어드레스를 지시하는 메모리블록 포인터(In-Pointer)를 포함한다. 도 8a에 예시된 상기 입력 집합은 k개의 원소를 구비하며, 그 중 k는 1보다 크거나 같다.
유사하게, 도 8b에 도시된 바와 같이, 뉴럴 네트워크의 각 레이어마다 구축되는 상기 출력 집합(805)의 각 원소는 상기 레이어의 각 출력별 식별자(OID), 데이터량(Data-Out), 및 상기 출력을 저장하기 위한 메모리블록 어드레스를 지시하는 메모리블록 포인터(Out-Pointer)를 포함한다. 도 8b에 예시된 상기 출력 집합은 m개의 원소를 구비하며, 그 중 m은 1보다 크거나 같다.
이와 같이 각 레이어마다 상응하는 입력 집합(804)을 구축함으로써, 하나의 레이어의 입력과 관련된 입력 식별자, 데이터량과 메모리블록 포인터(메모리블록 포인터는 뉴럴 네트워크의 순방향 계산을 실행하기 전에는 모두 공(null)이다)를 공동으로 하나의 입력 집합에 저장하면, 이러한 데이터들을 집중 관리 및 원활하게 이용할 수 있다. 유사하게, 이와 같이 각 레이어마다 상응하는 출력 집합(805)을 구축함으로써, 하나의 레이어의 출력과 관련된 출력 식별자, 데이터량과 메모리블록 포인터(메모리블록 포인터는 뉴럴 네트워크의 순방향 계산을 실행하기 전에는 모두 공(null)이다)를 공동으로 하나의 출력 집합에 저장하면, 마찬가지로 이러한 데이터들을 집중 관리 및 원활하게 이용할 수 있다. 이에 따라, 메모리 사전 할당의 계산 과정을 단순화할 수 있다. 이하 본 개시의 내용을 보다 용이하게 이해할 수 있도록, 구체적인 예시를 들어 좀 더 상세히 설명한다.
일부 실시예에 따르면, 도 7에 도시된 바와 같이, 본 개시의 예시적 실시예에 따른 뉴럴 네트워크의 순방향 계산을 위한 메모리 사전 할당 방법은 또한,
상기 계산 단계 S100 이전에, 단계 S120을 실행하여, 뉴럴 네트워크 중의 각 출력이 상기 출력의 후속층의 입력으로서 사용되는 횟수를 통계 내어, 상기 출력의 피인용 횟수로 삼고, 각 출력과 상기 출력의 피인용 횟수의 매핑 관계를 기록하기 위한 출력과 피인용 횟수 대응 리스트를 생성하는 단계를 더 포함할 수 있다(도 9 참조).
일부 실시예에 따르면, 출력과 피인용 횟수 대응 리스트(806)에 기록된(순차 업데이트된) 출력의 피인용 횟수를 통해, 상기 출력에 대응되는 메모리블록 식별자가 유휴로 변경될 메모리블록 식별자인지 여부를 판단할 수 있다.
일부 실시예에 따르면, 도 10에 도시된 바와 같이, 단계 S120 중의 상기 뉴럴 네트워크 중의 각 출력이 상기 출력의 후속층의 입력으로서 사용되는 횟수를 통계 내어, 상기 출력의 피인용 횟수로 삼고, 각 출력과 상기 출력의 피인용 횟수의 매핑 관계를 기록하기 위한 출력과 피인용 횟수 대응 리스트를 생성하는 단계는 이하 단계를 포함한다:
뉴럴 네트워크의 각 레이어에 대하여,
단계 S1201에서, 현재 레이어의 각 입력을 획득하고, 상기 출력과 피인용 횟수 대응 리스트(806)에 상기 입력으로서 사용되는 이전 레이어의 출력과 상기 출력의 피인용 횟수의 매핑 관계가 있는지 여부를 확정하는 단계로서, 만약 있다면(상기 레이어의 상기 입력으로서 사용되는 이전 레이어의 상기 출력이 현재 레이어 이전에 이미 인용되었음을 나타낸다), 상기 이전 레이어의 출력의 피인용 횟수에 단위 수량을 더하고; 만약 없다면, 상기 입력이 이전 레이어의 출력에 대응되지 않음을 나타내며, 즉 상기 입력이 이전 레이어의 출력으로부터 전달된 것이 아니고, 이때는 출력과 출력의 피인용 횟수의 관련 연산과 관계가 없으며; 및
단계 S1202에서, 현재 레이어의 출력을 획득하여, 상기 출력과 피인용 횟수 대응 리스트(806)에서 한 쌍의 매핑 관계로서의 상기 출력과 상기 출력의 피인용 횟수를 새로 구축하는 단계로서, 그 중 상기 출력과 매핑 관계를 갖는 피인용 횟수를 제1 특정값으로 초기화한다.
여기서, 상기 단위 수량은 1일 수 있고, 상기 제1 특정값은 0일 수 있다.
예를 들어, 현재 레이어의 출력으로서, 본 레이어에서는 아직 어떤 입력에도 인용되지 않았기 때문에, 그것의 피인용 횟수를 0으로 초기화할 수 있다. 상기 출력이 후속 레이어에서 하나의 입력에 인용되었다면, 그 피인용 횟수는 상기 후속 레이어에서 1이 더해지며, 즉 1로 변한다.
이러한 경우, 어떤 레이어의 입력으로서, 출력과 피인용 횟수 대응 리스트(806)에 이미 상기 입력으로서 사용되는 이전 레이어의 출력과 상기 출력의 피인용 횟수의 매핑 관계가 있다면, 상기 입력이 출력으로부터 전달된 것임을 나타내며, 이때 상기 출력의 피인용 횟수에 1을 더하여, 현재 레이어의 상기 입력의 상기 출력에 대한 인용을 나타낼 수 있다. 만약 없다면, 상기 입력이 출력으로부터 전달된 것이 아님을 나타내며, 따라서 출력과 출력의 피인용 횟수의 관련 연산과 관련이 없다.
일부 실시예에 따르면, 도 11에 도시된 바와 같이, 상기 뉴럴 네트워크의 각 레이어에 대해 상기 계산 단계 S100을 실행 시, 현재 레이어의 입력으로서의 이전 레이어 출력의 피인용 횟수에서 상기 단위 수량을 감하여 상기 출력과 피인용 횟수 대응 리스트를 업데이트하는 단계 S1041; 및
업데이트된 상기 출력과 피인용 횟수 대응 리스트 중의 각 출력의 피인용 횟수를 바탕으로, 상기 출력에 대응되는 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 포함시켜야 할지 판단함으로써, 뉴럴 네트워크의 순방향 계산을 실제로 실행 시의 메모리 재사용을 획득하는 단계 S1042를 더 포함할 수 있다.
전술한 바와 같이, 상기 단위 수량은 1일 수 있으며, 즉 하나의 출력이 하나의 입력에 1회 인용될 때마다, 상기 출력의 피인용 횟수는 1이 추가된다. 반대로, 메모리 할당을 순차적으로 계산하는 과정에서, 하나의 레이어의 계산을 실행할 때마다, 상기 레이어의 입력이 이전 레이어(반드시 바로 앞에 인접한 레이어인 것은 아니다)의 출력을 인용할 수 있으므로, 상기 레이어까지 진전 시, 상기 입력으로서 사용되는 상기 이전 레이어의 상기 출력의 피인용 횟수에서 1을 감해야 한다.
일부 실시예에 따르면, 단계 S104 중의 상기 입력으로서 사용되는 현재 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않는 경우(즉, 상기 출력의 피인용 횟수가 이때는 1이며, 상기 출력이 아직 상기 입력에 인용되고 있기 때문에 1이다), 상기 입력으로서 사용되는 이전 레이어의 출력에 대응되는 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 포함시키는 단계는,
만약 상기 이전 레이어의 출력의 피인용 횟수가 상기 단위 수량을 감한 후 제2 특정값으로 변경되었다면, 상기 이전 레이어의 출력에 대응되는 메모리블록 식별자를 상기 유휴 메모리블록 식별자 리스트에 포함시키는 단계를 포함한다.
상기 연산은 단계 S1042의 구체화된 연산으로 간주할 수 있다. 예를 들어 상기 이전 레이어의 출력의 피인용 횟수가 1(상기 단위 수량의 예시)을 감한 후 0(상기 제2 특정값의 예시)으로 변경되었다면, 상기 출력에 대응되는 메모리블록 식별자가 유휴 메모리블록 식별자가 될 수 있음을 나타내며, 즉 상기 출력에 대응되는 메모리블록 식별자를 상기 유휴 메모리블록 식별자 리스트에 포함시킨다.
이에 따라, 사전에 뉴럴 네트워크의 각 레이어의 입력과 출력 상황에 따라, 각 레이어의 각각의 출력에 대응되는 메모리블록 식별자를 계산함으로써(뉴럴 네트워크의 순방향 계산을 실행 시, 하나의 메모리블록 식별자는 하나의 실제 메모리블록에 대응된다), 뉴럴 네트워크 순방향 계산을 실행 시, 각 레이어에서 메모리를 실시간으로 신청하고, 메모리의 할당을 실시간으로 계산하여 메모리를 실시간으로 할당하고, 메모리의 해제를 실시간으로 계산하여 메모리를 실시간으로 해제하는 시간을 대폭 절약할 수 있어, 처리 속도가 빨라지며, 또한 유휴 메모리블록 식별자 리스트에 기록된 메모리블록 식별자를 업데이트함으로써 메모리 재사용을 구현할 수 있어, 장치 중의 귀중한 메모리 리소스를 효과적으로 이용할 수 있다.
일부 실시예에 따르면, 획득되었거나 또는 생성된 메모리블록 식별자 및 대응되는 메모리블록 용량을 한 쌍의 매핑 관계로 하여, 현재 레이어에서 사용된 메모리블록 식별자 및 대응되는 메모리블록 용량을 기록하기 위한 기사용(used) 메모리블록 식별자와 용량 매핑 리스트에 저장하고, 또한 메모리블록 용량의 상기 확대에 응답하여, 상기 기사용 메모리블록 식별자와 용량 매핑 리스트에서 상응하는 메모리블록 식별자의 메모리블록 용량을 업데이트한다.
그 중, 상기 기사용 메모리블록 식별자와 용량 매핑 리스트(807)는 메모리블록 디스크립터(descriptor)라고도 칭할 수 있으며, 메모리블록 식별자, 메모리블록 용량 등을 기록하여, 도 12에 도시된 바와 같이 메모리블록 식별자 및 그것과 대응되는 메모리블록 용량 사이에 관련성을 구축할 수 있다. 앞에서 언급한 메모리블록 식별자에 대응되는 메모리 용량은 상기 리스트로부터 획득할 수 있다. 또한, 상기 리스트(807)에는 상기 메모리블록 식별자에 대응되는 메모리블록에 저장된 데이터의 유형(도 12의 "데이터 유형" 필드)을 더 포함할 수 있다.
앞에서 설명한 메모리블록 용량을 확대하는 상황에서, 상기 기사용 메모리블록 식별자와 용량 매핑 리스트(807)에서 메모리블록 식별자의 메모리블록 용량을 업데이트할 수 있으며, 이에 따라 사전에 계획된 메모리블록 식별자가 대응될 메모리블록의 용량은 충분한 데이터 저장 요구를 충족시킬 수 있게 된다.
일부 실시예에 따르면, 상기 출력과 메모리블록 식별자 매핑 리스트(802)에 상기 뉴럴 네트워크의 모든 출력의 식별자 및 상응하는 메모리블록 식별자 사이의 매핑 관계가 저장된다.
상기 출력과 메모리블록 식별자 매핑 리스트(802)에 상기 뉴럴 네트워크의 모든 출력의 식별자 및 상응하는 메모리블록 식별자 사이의 매핑 관계를 저장하여, 각 레이어의 출력이 점용하는 메모리블록을 기록하는데 사용함으로써, 뉴럴 네트워크의 순방향 계산을 실행 시, 사전 계산된 메모리블록 식별자에 대응되는 메모리블록을 각각의 출력에게 용이하게 직접 할당할 수 있다. 여기서, 각 레이어마다 출력과 메모리블록 식별자 매핑 리스트(802)가 하나씩 있을 수도 있고, 상기 리스트(802)가 전체 뉴럴 네트워크의 모든 레이어를 대상으로 획득되는 하나의 총괄 리스트일 수도 있다.
일부 실시예에 따르면, 본 개시에 따른 뉴럴 네트워크의 순방향 계산을 위한 메모리 사전 할당 방법은 계산 단계 S100 이후에, 메모리 할당 단계 S200을 더 포함할 수 있다.
도 13에 도시된 바와 같이, 상기 메모리 할당 단계 S200은 이하 단계 S201과 S202를 포함할 수 있다.
단계 S201에서, 상기 메모리블록 식별자 총괄 리스트 중의 각 메모리블록 식별자마다 하나의 메모리블록 포인터를 생성한다.
전술한 바와 같이, 상기 메모리블록 식별자 총괄 리스트(803)에 기록된 것은 뉴럴 네트워크의 각 레이어를 위해 생성된 메모리블록 식별자이며, 따라서 상기 리스트에 나타난 메모리블록 식별자는 대응되는 메모리블록이 모두 뉴럴 네트워크의 순방향 계산에 사용된다. 따라서, 뉴럴 네트워크의 순방향 계산을 실행하기 위한 준비로써, 먼저 필요한 메모리를 할당할 수 있다. 뉴럴 네트워크의 순방향 계산에 필요한 메모리는 상기 메모리블록 식별자 총괄 리스트(803)를 근거로 생성할 수 있으며, 예를 들어, 하나의 메모리블록 식별자에 대응되게 하나의 메모리블록을 생성하며, 생성되는 메모리블록의 용량은 메모리블록 식별자와 관련된 메모리블록 디스크립터에 따라 결정할 수 있다.
본 개시에서, 메모리블록 식별자에 메모리블록 포인터를 생성하여, 상기 메모리블록 포인터가 실제 메모리블록을 가리키도록 함으로써, 메모리블록 식별자에 일일이 대응되도록 실제 메모리블록을 생성한다.
단계 S202에서, 상기 출력과 메모리블록 식별자 매핑 리스트에 기록된 매핑 관계에 따라, 각 레이어의 출력을 매핑 관계를 갖는 메모리블록 식별자의 메모리블록 포인터와 연관시킨다.
전술한 바와 같이, 상기 출력과 메모리블록 식별자 매핑 리스트에 기록된 것은 각 출력과 메모리블록 식별자 사이의 매핑 관계이며, 따라서, 현재 레이어의 출력을 매핑 관계를 갖는 메모리블록 식별자의 메모리블록 포인터와 연관시킴으로써, 현재 레이어의 출력에 메모리를 할당하며, 이를 통해 실제 메모리 할당을 구현한다. 다시 말해, 단계 S100 중의 메모리 사전 할당에 따라 단계 S200의 메모리의 실제 할당을 구현한다.
본 단계에서, 각 레이어마다, 상기 출력과 메모리블록 식별자 매핑 리스트(802)를 참조하면 본 레이어의 출력의 메모리 할당 결과를 얻을 수 있으며, 각 레이어마다 메모리를 재신청, 재계산 및 할당할 필요가 없어, 메모리를 실시간으로 신청 및 할당하는 시간이 절약되며, 뉴럴 네트워크의 순방향 계산 속도가 빨라진다.
이하 본 개시의 일 예시적 실시예에 따른 뉴럴 네트워크의 순방향 계산을 위한 메모리 사전 할당 방법을 어떻게 구현하는지 간단하게 예를 들어 설명하고자 한다. 본 예에서, 반드시 위에서 기술한 각각의 상세한 단계 또는 조작과 연관될 수 있는 것은 아니더라도, 당업자라면 본문에 기술된 내용과 앞뒤 문장의 연관성을 결합하여, 기술하지 않은 단계 또는 연산이 어떻게 구현되는지 이해하여야 한다는 점에 유의한다.
예를 들어, TensorFlow(데이터플로우 프로그래밍 기호 수식 시스템 기반)를 통해, 하나의 뉴럴 네트워크 중 각 레이어의 연산을 하나의 연산(operation) 유형으로 추상화할 수 있으며, 각각의 연산 유형에는 상기 입력 집합(804)과 출력 집합(805)이 포함될 수 있고, 상기 입력 집합(804)과 출력 집합(805) 중의 각 입력과 각 출력은 모두 텐서(tensor) 유형으로 추상화할 수 있다. 텐서 유형에는 텐서의 식별자(예를 들어 텐서의 명칭), 텐서의 형상, 및 상기 텐서의 어드레스 포인터가 포함된다.
TensorFlow는 텐서를 사용하여 데이터를 표시한다. 텐서는 일종의 데이터 구조로서, n차원 데이터로 간주할 수 있다. 텐서는 차원수, 형상(제i번째 차원의 원소 수량, i=1, 2,......, n), 데이터 유형인 3개의 속성을 갖는다.
그 중, 텐서의 식별자는 예를 들어 텐서의 명칭일 수 있다. 텐서의 형상은 제i번째 차원의 원소 수량을 표시하기 위한 것으로서, 텐서의 형상을 통해, 그 용량을 쉽게 획득할 수 있다. 텐서의 어드레스 포인터는 상기 텐서가 사용하는 메모리 어드레스를 가리키기 위한 것으로서, 즉 앞에서 기술한 "메모리블록 포인터"이다.
뉴럴 네트워크에 대해 설명하면, 하나의 레이어에서 하나의 연산, 예를 들어 컨볼루션 연산, 풀링 연산 등을 수행한다.
각 레이어에 대한 연산은 예를 들어 이하 연산 유형으로 표시할 수 있다.
Class operation{
Vector inputs;[Tensor1, Tensor2,...] /* 입력집합 및 텐서형식의 원소*/
Vector outputs;[Tensor1, Tensor2,...]/* 출력집합 및 텐서형식의 원소*/
}
위에서 기술한 입력 및 출력을 표시하기 위한 텐서 유형에 대해, 아래의 예시 형식을 제공한다.
Class Tensor {
String name:"layer1-conv" /*텐서의 식별자*/
Shape: [300,300, 3]/*텐서의 형상*/
Pointer: null /*텐서의 어드레스 포인터, 메모리 사전 할당 과정에서는 null임*/
Datatype:int /*텐서의 데이터 유형, 선택 가능한 데이터 유형은 int, short, float 등이 있음*/
}
그 중, 텐서의 형상[300, 300, 3] 및 상기 텐서 유형에 정의된 데이터 유형 int(각각의 int 유형 데이터가 4개의 바이트를 점용할 수 있는 메모리라 가정함)로부터, 300*300*3*4=1080000바이트인 상기 텐서(입력 또는 출력)의 데이터량을 얻을 수 있다.
텐서의 어드레스 포인터(메모리블록 포인터)의 경우, 단계 S200에서 메모리 할당을 수행한 후, 그것은 더 이상 공(null)이 아니고, 메모리블록에 대응되는 어드레스를 가리킬 수 있으며, 하나의 예시를 아래와 같이 제공한다.
Class Pointer{
Size: 300*300*3*4 /*텐서의 형상으로부터 획득한 텐서의 데이터량*/
Address:0x80000000/*텐서의 어드레스 포인터가 가리키는 어드레스*/
}
이상은 입력 및 출력으로서 사용될 수 있는 텐서의 실시예, 및 메모리블록 포인터로서 사용될 수 있는 텐서의 어드레스 포인터의 실시예이다.
뉴럴 네트워크의 순방향 계산을 대상으로 하는 메모리 사전 할당 임무에 대해 설명하면, 뉴럴 네트워크 구조를 먼저 해석하여, 상기 구조에 포함된 각 연산 노드 및 각 연산 노드 간의 관계를 결정한 다음, 1차원 연산 벡터 테이블, 예를 들어 [operation1, operation2,......]를 만들 수 있다. 이러한 벡터 테이블에 상기 뉴럴 네트워크의 모든 연산 및 이러한 연산의 실행 순서가 저장될 수 있다. 상기 벡터 테이블 중의 각 연산 벡터(연산류)를 통해 각 연산 유형 중의 입력 집합과 출력 집합을 획득한다.
상기 리스트 801~807의 경우, 그 중의 입력 식별자와 출력 식별자는 위에서 예를 들어 설명한 텐서의 식별자일 수 있으며, 하나의 입력 또는 출력의 데이터량은 위에서 예를 들어 설명한 방법을 통해 확정된 상기 입력 또는 출력으로서 사용되는 텐서의 데이터량일 수 있다.
이하 본 개시의 예시적 실시예에 따른 메모리 사전 할당 방법을 바탕으로 뉴럴 네트워크의 순방향 계산을 위해 메모리를 할당하는 과정을 예를 들어 설명한다. 아래에 설명하는 구체적인 단계 및 그 전후 순서는 단지 쉽게 이해될 수 있도록 제공되는 예시적 실시방식일 뿐이며, 본 개시는 상기 예시적 실시방식으로 한정되어서는 안 되고, 본문의 전체적인 기술을 바탕으로, 청구항으로 한정된 범위를 기준으로 하여야 함에 유의한다.
구체적으로, 상기 예의 단계는 다음과 같다.
단계 1) 상기 연산 벡터 테이블을 바탕으로, 예를 들어 벡터 테이블 중의 각 연산을 순차적으로 표적 연산하여, 출력의 피인용 횟수를 통계 낼 수 있다.
상기한 바와 같이, 출력과 피인용 횟수 대응 리스트(806)를 사용하여 출력과 피인용 횟수 사이의 매핑 관계를 기록하고 업데이트할 수 있다.
그 중, 앞에서 언급한 바와 같이, 상기 벡터 테이블 중의 각 연산 벡터(연산류)를 연산함으로써, 각 연산류 중의 입력 집합과 출력 집합을 획득할 수 있다. 따라서, 연산 자체(입력과 출력) 및 연산 간의 관계(예를 들어 연산 순서)를 바탕으로, 출력과 그것이 인용된 횟수 사이의 매핑 관계를 획득할 수 있고, 이에 따라 출력과 피인용 횟수 대응 리스트(806)을 획득할 수 있다.
단계 2): 상기 연산 벡터 테이블을 바탕으로, 그 중의 각 연산에 대해 상기 연산의 출력 집합 중의 출력 텐서를 획득하고, 각 출력 텐서에 대해, 아래와 같은 상기 연산(즉 상기 레이어) 중의 각 출력 텐서에 하나의 메모리블록 식별자를 매핑하기 위한 조작을 수행한다:
i. 상기 유휴 메모리블록 식별자 리스트(801)로부터 하나의 메모리블록 식별자를 획득하도록 시도한다.
ii. 상기 유휴 메모리블록 식별자 리스트(801)로부터, 상기 출력 텐서를 위해 하나의 메모리블록 식별자를 획득하였다면, 메모리블록 식별자를 바탕으로 기사용 메모리블록 식별자와 용량 매핑 리스트(메모리블록 디스크립터)(807)를 검색하여, 상기 출력 텐서의 데이터량(상기 출력에 필요한 데이터량)과 메모리블록 디스크립터(807)에 기록된 메모리블록 용량을 비교한다.
여기서, 기사용 메모리블록 식별자와 용량 매핑 리스트(메모리블록 디스크립터)(807)에 기록된 것은 메모리블록 식별자 및 그것과 대응되는 메모리블록의 용량이며, 상기 리스트는 공(null)으로 초기화될 수 있다는 점에 유의한다. 하나의 출력 텐서를 대상으로 하나의 메모리블록 식별자를 새로 생성한 후, 상기 리스트에 기록된 상기 메모리블록 식별자에 대응되는 메모리블록 용량은 상기 출력의 데이터량이 되며, 또한, 상기한 바와 같이, 순차적으로 사전 계산함에 따라, 상기 메모리블록 식별자에 대응되는 메모리블록 용량은 상기 대응되는 출력에 따라 달라질 수 있다. 보다 확실하게 말하면, 상기 메모리블록 식별자의 후속으로 대응되는 어떤 출력의 데이터량이 이전에 대응된 어떤 출력의 데이터량보다 크다면, 상기 메모리블록 식별자에 대응되는 메모리블록의 용량 역시 따라서 커질 수 있다. 이는 아래에서 설명할 것이다.
iii. 메모리블록 디스크립터(807)에 기록된 대응되는 메모리블록 용량이 상기 출력 텐서의 데이터량보다 작을 경우, 상기 출력 텐서의 데이터량에 따라 상기 메모리블록 용량을 업데이트함으로써, 상기 메모리블록의 용량이 적어도 상기 출력 텐서의 데이터량과 같아지게 한 후, 상기 메모리블록 식별자를 유휴 메모리블록 식별자 리스트로부터 삭제하고, 상기 출력 텐서의 식별자와 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여 출력과 메모리블록 식별자 매핑 리스트(802)에 저장하여, 향후 상기 연산을 실행 시, 상기 출력 텐서가 상기 메모리블록 식별자에 대응되는 메모리블록을 점용할 것임을 나타낼 수 있다.
iv. 상기 유휴 메모리블록 식별자 리스트(801)로부터 상기 출력 텐서를 위한 메모리블록 식별자를 획득하지 못하였다면, 새로운 메모리블록 식별자를 생성하여, 상기 신규 생성 메모리블록 식별자를 메모리블록 식별자 총괄 리스트(803)에 저장할 수 있으며, 또한 상기 출력 텐서의 식별자와 새로 생성된 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 출력과 메모리블록 식별자 매핑 리스트(802)에 저장함으로써, 향후 상기 연산을 실행 시, 상기 출력 텐서가 상기 메모리블록 식별자에 대응되는 메모리블록을 점용할 것임을 나타낼 수 있다.
전술한 바와 같이, 상기 리스트(803)에는 모든 신규 생성 메모리블록 식별자, 즉 상기 뉴럴 네트워크의 순방향 계산에 사용될 모든 메모리블록 식별자가 저장된다.
v. 상기 연산 중, 각 출력 텐서에 대해 상기 조작을 수행하였는지 여부를 판단하여, 예라면, 단계 i)로 전환하여 계속 실행하고, 아니오이면, 즉 아래의 단계 3)으로 전환한다.
단계 3) 상기 연산 벡터 테이블을 바탕으로, 그 중의 각 연산에 대해 상기 연산의 입력 집합 중의 입력 텐서를 획득하고, 상기 연산의 입력 집합 중의 입력 텐서에 대해 아래와 같은 출력 텐서에 대한 입력 텐서의 인용 관계에 따라, 유휴 메모리블록 식별자 리스트(802)를 업데이트하는 조작을 수행한다:
i. 각각의 입력 텐서에 대해, 출력과 피인용 횟수 대응 리스트(806)에서 상기 입력 텐서의 식별자(상기 입력 텐서가 이전 레이어의 출력 텐서로부터 전달된 것이라면, 실제로는 그것이 인용한 이전 레이어의 출력 텐서의 식별자이다) 피인용 횟수와의 매핑 관계를 검색한다.
ii. 리스트(806)에서 상기 매핑 관계가 검색되었다면, 상기 매핑 관계 중의 피인용 횟수에서 예를 들어 1을 감하여, 현재 레이어의 상기 입력의 상기 출력에 대한 인용(본 레이어의 피인용 횟수는 1)을 먼저 감하고, 피인용 횟수에서 1을 감한 후 0이 되었다면, 이전 레이어의 상기 출력 텐서가 후속 레이어에서는 더 이상 인용되지 않았음을 나타내며, 그 대응되는 메모리블록 식별자는 유휴 상태로 변경될 수 있다. 따라서, 상기 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 저장할 수 있으며, 이에 따라 뉴럴 네트워크의 순방향 계산을 실행 시의 메모리 재사용을 구현할 수 있다.
iii. 이와 같은 매핑 관계가 검색되지 않았다면, 상기 입력 텐서가 어떠한 출력 텐서도 인용하지 않았음을 설명하며, 이 경우 이하 단계 iv로 진입할 수 있다.
iv. 상기 연산에 입력 텐서가 더 있는지 판단하여, 있다면, 상기 단계 i로 전환하고, 없다면, 하기의 단계 4로 진입한다.
위에서 예시한 단계 1)~3)을 통해, 본 개시의 예시적 실시예에 따른 뉴럴 네트워크의 순방향 계산을 위한 메모리 사전 할당 방법을 구현할 수 있다. 전술한 바와 같이, 상기 방법의 사용을 통해, 뉴럴 네트워크의 순방향 계산 속도가 빨라질 수 있으며, 메모리 이용률이 향상된다.
아래의 단계 4)는 뉴럴 네트워크의 순방향 계산을 실행하기 전 수행해야 하는 메모리 할당 조작을 예시적으로 제공한다.
단계 4): 상기 출력과 메모리블록 식별자 매핑 리스트(802) 중의 각 메모리블록 식별자에 대하여, 상기 메모리블록 식별자에 대응되는 메모리블록 포인터(텐서의 어드레스 포인터)를 생성한 후, 상기 출력과 메모리블록 식별자 매핑 리스트(802)에 기록된 각 레이어(각각의 연산)의 각 출력과 메모리블록 식별자의 매핑 관계에 따라, 각 출력과 매핑 관계를 갖는 메모리블록 식별자의 메모리블록 포인터(텐서의 어드레스 포인터)를 연관시키며, 이와 같이 하면 예를 들어 뉴럴 네트워크 순방향 계산의 초기화 과정에서 메모리를 할당할 수 있고, 뉴럴 네트워크 순방향 계산 과정에서 할당된 메모리를 직접 사용할 수 있어, 뉴럴 네트워크의 순방향 계산이 대폭 빨라진다.
위에서 TensorFlow를 예로 본 개시의 일 예시적 실시방식을 설명하였다. 본 개시는 어떠한 방식을 사용하여 구현된다고 한정하지 않으며, 어떤 방식이든, 본 개시의 실질을 구현할 수 있으면 된다는 점에 유의한다.
일부 실시예에 따르면, 도 14에 도시된 바와 같이, 본 개시는 뉴럴 네트워크 순방향 계산을 위해 메모리를 사전 할당하는 장치(1)(메모리 사전 할당 장치(1)로 칭할 수 있음)를 제공하며, 이는 계산 유닛(100), 및 사전 할당 유닛(200)을 포함할 수 있다.
그 중, 계산 유닛(100)은 뉴럴 네트워크의 제1 레이어로부터 시작하여, 순차적으로 배열되는 뉴럴 네트워크의 각 레이어에 대해,
현재 레이어의 각 출력에 대하여, 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하고자 시도하여,
획득하였다면, 상기 출력의 식별자와 상기 획득된 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 레이어의 각 출력의 식별자 및 대응되는 메모리블록 식별자를 기록하기 위한 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 유휴 메모리블록 식별자 리스트로부터 상기 메모리블록 식별자를 삭제하며,
획득하지 못하였다면, 메모리블록 식별자를 새로 생성하고 상기 출력의 식별자와 새로 생성된 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 출력과 메모리블록 식별자 매핑 리스트에 저장하며, 또한 새로 생성된 상기 메모리블록 식별자를 모든 신규 생성 메모리블록 식별자를 기록하기 위한 메모리블록 식별자 총괄 리스트에 포함시킴으로써, 뉴럴 네트워크 순방향 계산을 실행 시, 상기 메모리블록 식별자 총괄 리스트에 따라 뉴럴 네트워크 순방향 계산에 필요한 메모리블록을 생성하는 조작; 및
현재 레이어의 각 입력에 대하여, 상기 입력으로서 사용되는 이전 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않았다면, 상기 입력으로서 사용되는 이전 레이어의 출력에 대응되는 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 포함시키는 조작;을 실행하도록 배치될 수 있다.
계산 유닛(100)의 조작은 앞에서 기술한 단계 S100의 조작과 유사하며, 지면 관계를 감안하여, 중복 설명은 생략한다.
일부 실시예에 따르면, 도 14에 도시된 바와 같이, 메모리 사전 할당 장치(1)는 사전 할당 유닛(200)을 더 포함할 수 있다.
그 중, 상기 사전 할당 유닛(200)은, 상기 메모리블록 식별자 총괄 리스트 중의 각 메모리블록 식별자를 위해 하나의 메모리블록 포인터를 생성하는 조작; 및 상기 출력과 메모리블록 식별자 매핑 리스트에 기록된 매핑 관계에 따라, 각 레이어의 출력 및 매핑 관계를 갖는 메모리블록 식별자의 메모리블록 포인터를 연관시키는 조작에 사용되도록 배치될 수 있다.
사전 할당 유닛(200)의 조작은 앞에서 기술한 단계 S200의 조작과 유사하며, 지면 관계를 감안하여, 중복 설명은 생략한다.
전술한 바와 같이, 본 개시에 따른 메모리 사전 할당 장치(1)의 사용을 통해, 뉴럴 네트워크 순방향 계산 속도가 빨라질 수 있고, 메모리 이용률이 향상된다.
본 개시의 다른 측면에 따르면, 전자회로(2100)를 더 제공하며, 이는 상기 방법의 단계를 실행하도록 배치되는 회로를 포함할 수 있다. 본 개시의 다른 측면에 따르면, 전자장치(2000)를 더 제공하며, 이는 프로세서; 및 상기 프로세서로 실행 시, 상기 프로세서로 하여금 상기 방법을 실행하게 하는 명령이 포함된 프로그램을 저장하는 메모리를 포함한다. 본 개시의 다른 측면에 따르면, 전자장치의 프로세서로 실행 시, 상기 전자장치로 하여금 상기 방법을 실행하게 하는 명령이 포함된 프로그램을 저장하는 비임시 컴퓨터 가독 저장매체를 더 제공한다.
도 15는 본 개시의 예시적 실시예에 따른 전자장치의 예시 블록도이다. 도 15에 도시된 구조는 단지 하나의 예시일 뿐이며, 구체적인 구현 방식에 따라, 본 개시의 전자장치는 도 15에 도시된 구성 부분 중의 하나 또는 다수만 포함할 수도 있음에 유의해야 한다.
전자장치(2000)는 예를 들어 범용 컴퓨터(예를 들어 랩탑 컴퓨터, 태블릿 컴퓨터 등 각종 컴퓨터), 이동전화, PDA, 및 각종 스마트 장치일 수 있다.
일부 실시방식에 따르면, 전자장치(2000)는 통신회로(2010)를 포함할 수 있으며, 상기 통신회로(2010)는 외부 장치 및/또는 네트워크와 통신할 수 있는 어떠한 유형의 장치 또는 시스템일 수 있고, 또한 모뎀, 네트워크 카드, 적외선 통신장치, 무선통신장치 및/또는 칩셋, 예를 들어 블루투스 장치, 1302.11장치, WiFi장치, WiMax장치, 셀룰러 통신장치 및/또는 유사물을 포함할 수 있되, 단 이에 한정되지 않는다.
일부 실시방식에 따르면, 전자장치(2000)는 입력장치(2011)를 더 포함할 수 있으며, 상기 입력장치(2011)는 전자장치(2000)로 정보를 입력할 수 있는 어떠한 유형의 장치일 수 있고, 또한 각종 센서, 마우스, 키보드, 터치스크린, 버튼, 조이스틱, 마이크 및/또는 리모컨 등을 포함할 수 있되, 단 이에 한정되지 않는다.
일부 실시방식에 따르면, 전자장치(2000)는 출력장치(2012)를 더 포함할 수 있으며, 상기 출력장치(2012)는 정보를 나타낼 수 있는 어떠한 유형의 장치일 수 있고, 또한 모니터, 영상 단말기(Visual Display Terminal), 발진기(oscillator) 및/또는 프린터 등을 포함할 수 있되, 단 이에 한정되지 않는다. 전자장치(2000)가 일부 실시예에 따라 시각장애 보조장치에 사용되더라도, 시각에 기반한 출력장치는 사용자의 가족 또는 정비원 등이 전자장치(2000)로부터 출력 정보를 간편하게 획득할 수 있다.
일부 실시방식에 따르면, 전자장치(2000)는 프로세서(2001)를 더 포함할 수 있다. 상기 프로세서(2001)는 어떠한 유형의 프로세서일 수 있으며, 또한 하나 또는 다수의 범용 프로세서 및/또는 하나 또는 다수의 전용 프로세서(예를 들어 특수 프로세서칩)를 포함할 수 있되, 단 이에 한정되지 않는다. 프로세서(2001)는 예를 들어 중앙처리유닛(CPU) 또는 마이크로프로세서(MPU) 등일 수 있으나 단 이에 한정되지 않는다. 전자장치(2000)는 작업 메모리(2002)를 더 포함할 수 있으며, 상기 작업 메모리(2002)는 프로세서(2001)의 작업에 유용한 프로그램(명령 포함) 및/또는 데이터(예를 들어 이미지, 텍스트, 음성, 및 기타 중간 데이터 등)를 저장할 수 있고, 또한 랜덤 액세스 메모리 및/또는 리드 온리 메모리 장치를 포함할 수 있되, 단 이에 한정되지 않는다. 전자장치(2000)는 저장장치(2003)를 더 포함할 수 있으며, 상기 저장장치(2003)는 상기 각 리스트(801~807)를 저장하는데 사용될 수 있다. 저장장치(2003)는 어떠한 비임시 저장장치를 포함할 수 있으며, 비임시 저장장치는 비임시적이면서 데이터 저장을 구현할 수 있는 어떠한 저장장치일 수 있고, 또한 자기디스크 구동장치, 광학 저장장치, 고체 메모리, 플로피디스크, 플렉시블디스크, 하드디스크, 자기테이프 또는 어떠한 기타 자성 매체, 광디스크 또는 어떠한 기타 광학 매체, ROM(리드 온리 메모리), RAM(랜덤 액세스 메모리), 캐시메모리 및/또는 어떠한 기타 메모리 칩 또는 카세트, 및/또는 컴퓨터가 데이터, 명령 및/또는 코드를 읽어 들일 수 있는 어떠한 기타 매체를 포함할 수 있되, 단 이에 한정되지 않는다. 작업 메모리(2002)와 저장장치(2003)는 집합적으로 "메모리"라 칭할 수 있으며, 또한 어떤 경우에는 상호 겸용될 수 있다.
일부 실시방식에 따르면, 프로세서(2001)는 통신회로(2010), 전자회로(2100) 및 전자장치(2000)에 포함된 기타 각종 장치 및 회로 중의 적어도 하나에 대해 제어 및 스케쥴링을 수행할 수 있다. 일부 실시방식에 따르면, 도 15 중의 상기 각 구성부분 중의 적어도 일부는 배선(2013)을 통해 상호 연결 및/또는 통신 가능하다.
소프트웨어 요소(프로그램)는 작업 메모리(2002)에 위치할 수 있으며, 운영체계(2002a), 하나 또는 다수의 애플리케이션(2002b), 구동프로그램 및/또는 기타 데이터와 코드를 포함하되, 단 이에 한정되지 않는다.
일부 실시방식에 따르면, 전술한 제어 및 스케쥴링을 수행하기 위한 명령은 운영체계(2002a) 또는 하나 또는 다수의 애플리케이션(2002b)에 포함될 수 있다.
일부 실시방식에 따르면, 본 개시의 상기 방법 단계를 실행하는 명령은 하나 또는 다수의 애플리케이션(2002b)에 포함될 수 있으며, 또한 상기 전자장치(2000)의 각 모듈은 프로세서(2001)가 하나 또는 다수의 애플리케이션(2002b)의 명령을 읽고 실행시킴으로써 구현될 수 있다. 다시 말해, 전자장치(2000)는 프로세서(2001) 및 프로그램을 저장하는 메모리(예를 들어 작업 메모리(2002) 및/또는 저장장치(2003))를 포함할 수 있고, 상기 프로그램은 명령을 포함하며, 상기 명령은 상기 프로세서(2001)로 실행 시 상기 프로세서(2001)로 하여금 본 개시의 각종 실시예의 상기 방법을 실행하게 한다.
일부 실시방식에 따르면, 전자회로(2100) 중의 적어도 하나가 실행하는 조작 중의 일부 또는 전부는 프로세서(2001)를 통해 하나 또는 다수의 애플리케이션(2002b)의 명령을 독취 및 실행시킴으로써 구현될 수 있다.
소프트웨어 요소(프로그램)인 명령의 실행 가능한 코드 또는 소스코드는 비임시 컴퓨터 가독 저장매체(예를 들어 상기 저장장치(2003))에 저장될 수 있으며, 또한 실행 시 작업 메모리(2002)에 저장될 수 있다(컴파일링 및/또는 설치될 수 있다). 따라서, 본 개시는 프로그램을 저장하는 컴퓨터 가독 저장매체를 제공하며, 상기 프로그램은 명령을 포함하고, 상기 명령은 전자장치(예를 들어 시각장애 보조장치)의 프로세서가 실행 시, 상기 전자장치로 하여금 본 개시의 각종 실시예의 상기 방법을 실행하게 한다. 다른 실시방식에 따르면, 소프트웨어 요소(프로그램)인 명령의 실행 가능한 코드 또는 소스코드는 원거리 위치에서 다운로드될 수도 있다.
또한 구체적인 요구에 따라 각종 변형을 실시할 수 있음을 이해하여야 한다. 예를 들어, 사용자정의 하드웨어, 및/또는 하드웨어, 소프트웨어, 펌웨어, 미들웨어, 마이크로코드, 하드웨어 기술 언어(Hardware Description Language) 또는 임의의 조합을 사용하여 각 회로, 유닛, 모듈 또는 소자를 구현할 수도 있다. 예를 들어 공개된 방법과 장치에 포함되는 회로, 유닛, 모듈 또는 소자 중의 일부 또는 전부는 본 개시에 따른 논리와 알고리즘을 사용하여, 어셈블리 언어 또는 하드웨어 프로그래밍 언어(예를 들어 VERILOG, VHDL, C++)로 하드웨어(예를 들어 필드 프로그래머블 게이트 어레이(FPGA) 및/또는 프로그래머블 논리 어레이(PLA)를 포함하는 프로그래머블 논리회로)에 대해 프로그래밍을 수행함으로써 구현될 수 있다.
일부 실시방식에 따르면, 전자장치(2000) 중의 프로세서(2001)는 네트워크에 분포될 수 있다. 예를 들어, 하나의 프로세서를 사용하여 일부 처리를 실행할 수 있고, 상기 프로세서로부터 멀리 떨어진 다른 프로세서로 기타 처리를 동시에 실행할 수 있다. 전자장치(2000)의 기타 모듈 역시 유사하게 분산될 수 있다. 이와 같이, 전자장치(2000)는 여러 위치에서 처리를 실행하는 분산형 컴퓨팅 시스템으로 해석될 수 있다.
본 개시는 뉴럴 네트워크 순방향 계산을 위한 메모리 사전 할당 방법을 제공하며, 이는 뉴럴 네트워크의 제1 레이어로부터 시작하여, 순차적으로 배열된 뉴럴 네트워크의 각 레이어를 대상으로, 이전 레이어의 각 출력에 대해, 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하고자 시도하여; 획득하였다면, 상기 출력의 식별자와 상기 획득된 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 레이어의 각 출력의 식별자 및 대응되는 메모리블록 식별자를 기록하기 위한 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 유휴 메모리블록 식별자 리스트로부터 상기 메모리블록 식별자를 삭제하고; 획득하지 못하였다면, 메모리블록 식별자를 새로 생성하여 상기 출력의 식별자와 새로 생성된 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 또한 새로 생성된 상기 메모리블록 식별자를 모든 신규 생성 메모리블록 식별자를 기록하기 위한 메모리블록 식별자 총괄 리스트에 포함시킴으로써, 뉴럴 네트워크 순방향 계산을 실행 시, 상기 메모리블록 식별자 총괄 리스트에 따라 뉴럴 네트워크 순방향 계산에 필요한 메모리블록을 생성할 수 있도록 하는 조작; 및 현재 레이어의 각 입력에 대해, 상기 입력으로서 사용된 이전 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않은 경우, 즉 상기 입력으로서 사용된 이전 레이어의 출력에 대응되는 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 포함시키는 조작을 포함하는 계산단계를 실행한다.
그 중, 각 메모리블록 식별자는 하나의 메모리블록 용량이 대응된다. 일부 실시예에 따르면, 유휴 메모리블록 식별자 리스트로부터 획득된 메모리블록 식별자에 대응되는 메모리블록 용량이 상기 출력에 필요한 용량보다 작은 경우, 즉 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 확대한다.
일부 실시예에 따르면, 상기 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하는 단계는, 유휴 메모리블록 식별자 리스트에 다수의 유휴 메모리블록 식별자가 있고, 상기 다수의 유휴 메모리블록 식별자에 대응되는 메모리블록 용량이 모두 상기 출력에 필요한 용량보다 작은 경우, 즉 상기 다수의 유휴 메모리블록 식별자 중에서, 대응되는 메모리블록 용량이 최대인 유휴 메모리블록 식별자를 선택하여, 상기 출력과 매핑 관계를 갖는 메모리블록 식별자로 삼는 단계를 포함한다.
일부 실시예에 따르면, 유휴 메모리블록 식별자 리스트로부터 획득된 상기 메모리블록 식별자에 대응되는 메모리블록 용량이 상기 출력에 필요한 용량보다 작은 경우, 즉 상기 메모리블록에 대응되는 메모리블록 용량을 확대시키는 단계는, 상기 다수의 유휴 메모리블록 식별자로부터 선택된, 대응되는 메모리블록 용량이 최대인 유휴 메모리블록 식별자에 대해, 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 적어도 상기 출력에 필요한 용량과 같도록 확대시키는 단계를 포함한다.
일부 실시예에 따르면, 상기 유휴 메모리블록 식별자 리스트로부터 획득된 메모리블록 식별자에 대응되는 메모리블록 용량이 상기 출력에 필요한 용량보다 작은 경우, 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 확대시키는 단계는, 상기 출력에 필요한 용량에 따라, 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 확대시킴으로써, 상기 메모리블록 용량이 적어도 상기 출력에 필요한 용량과 같아지도록 하는 단계를 포함한다.
일부 실시예에 따르면, 상기 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하는 단계는, 유휴 메모리블록 식별자 리스트에 다수의 유휴 메모리블록 식별자가 있는 경우, 즉 상기 다수의 유휴 메모리블록 식별자에 각자 대응되는 메모리블록 용량과 상기 출력에 필요한 용량을 비교하여, 상기 출력에 필요한 용량보다 크거나 같은 메모리블록 용량 중, 상기 출력에 필요한 용량과의 차이값이 최소인 메모리블록 용량에 대응되는 유휴 메모리블록 식별자를 선택하여, 상기 출력과 매핑 관계를 갖는 메모리블록 식별자로 삼는 단계를 포함한다.
일부 실시예에 따르면, 상기 출력에 필요한 용량은 상기 출력된 데이터량과 데이터 유형을 통해 확정된다.
일부 실시예에 따르면, 상기 방법은, 상기 계산 단계 이전에, 각각 뉴럴 네트워크의 각 레이어에 상기 레이어의 입력 집합과 출력 집합을 구축하는 단계를 더 포함하며, 그 중, 각 레이어의 상기 입력 집합 중의 각 원소는 상기 레이어의 각 입력의 식별자, 데이터량, 및 상기 입력을 저장하기 위한 메모리블록 어드레스를 가리키는 메모리블록 포인터를 포함하고, 각 레이어의 상기 출력 집합의 각 원소는 상기 레이어의 각 출력의 식별자, 데이터량, 및 상기 출력을 저장하기 위한 메모리블록 어드레스를 가리키는 메모리블록 포인터를 포함한다.
일부 실시예에 따르면, 상기 방법은, 상기 계산 단계를 실행하기 전, 뉴럴 네트워크 중 각 출력이 상기 출력의 후속 레이어의 입력으로서 사용되는 횟수, 상기 출력으로서 사용되는 피인용 횟수를 통계 내어, 각 출력과 상기 출력의 피인용 횟수의 매핑 관계를 기록하기 위한 출력과 피인용 횟수 대응 리스트를 생성하는 단계를 더 포함한다.
일부 실시예에 따르면, 상기 뉴럴 네트워크 중 각 출력이 상기 출력의 후속 레이어의 입력으로서 사용되는 횟수, 상기 출력으로서 사용되는 피인용 횟수를 통계 내어, 각 출력과 상기 출력의 피인용 횟수의 매핑 관계를 기록하기 위한 출력과 피인용 횟수 대응 리스트를 생성하는 단계는, 뉴럴 네트워크의 각 레이어에 대하여, 현재 레이어의 입력을 획득하고, 상기 입력과 피인용 횟수 대응 리스트에 상기 입력으로서 사용되는 이전 레이어의 출력과 상기 출력의 피인용 횟수의 매핑 관계가 있는지 여부를 확인하여, 예라면, 상기 이전 레이어의 출력의 피인용 횟수에 단위 수량을 더하는 단계; 및 이전 레이어의 출력을 획득하여, 상기 출력과 피인용 횟수 대응 리스트에 한 쌍의 매핑 관계로서의 상기 출력과 상기 출력의 피인용 횟수를 새로 생성하며, 그 중 상기 출력과 매핑 관계를 갖는 피인용 횟수를 제1 특정값으로 초기화는 단계를 포함한다.
일부 실시예에 따르면, 각 레이어에 대하여, 상기 계산을 실행하는 단계는, 현재 레이어의 입력으로서 사용되는 이전 레이어의 출력의 피인용 횟수에서 상기 단위 수량을 감함으로써, 상기 출력과 피인용 횟수 대응 리스트를 업데이트하는 단계를 더 포함한다.
일부 실시예에 따르면, 상기 입력으로서 사용된 이전 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않은 경우, 즉 상기 입력으로서 사용된 이전 레이어의 출력에 대응되는 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 포함시키는 단계는, 상기 이전 레이어의 출력의 피인용 횟수가 상기 단위 수량을 감한 후 제2 특정값으로 변경되었다면, 상기 이전 레이어의 출력에 대응되는 메모리블록 식별자를 상기 유휴 메모리블록 식별자 리스트에 포함시키는 단계를 포함한다.
일부 실시예에 따르면, 획득되었거나 생성된 메모리블록 식별자 및 대응되는 메모리블록 용량을 한 쌍의 매핑 관계로 하여, 현재 레이어에 사용된 메모리블록 식별자 및 대응되는 메모리블록 용량을 기록하기 위한 기사용 메모리블록 식별자와 용량 매핑 리스트에 저장하고, 또한 메모리블록 용량의 상기 확대에 응답하여, 상기 기사용 메모리블록 식별자와 용량 매핑 리스트에서 상응하는 메모리블록 식별자의 메모리블록 용량을 업데이트한다.
일부 실시예에 따르면, 상기 출력과 메모리블록 식별자 매핑 리스트에 상기 뉴럴 네트워크의 모든 출력의 식별자 및 상응하는 메모리블록 식별자의 매핑 관계를 저장한다.
일부 실시예에 따르면, 상기 방법은, 상기 메모리블록 식별자 총괄 리스트 중의 각 메모리블록 식별자를 위해 하나의 메모리블록 포인터를 생성하는 조작; 및 상기 출력과 메모리블록 식별자 매핑 리스트에 기록된 매핑 관계에 따라, 각 레이어의 출력과 매핑 관계를 갖는 메모리블록 식별자의 메모리블록 포인터를 연관시키는 조작을 포함하는 메모리 할당 단계를 더 포함한다.
본 개시는 뉴럴 네트워크 순방향 계산을 위한 메모리 사전 할당 장치를 더 제공하며, 상기 장치는 상기 뉴럴 네트워크의 제1 레이어로부터 시작하여, 순차적으로 배열되는 뉴럴 네트워크의 각 레이어를 대상으로, 이전 레이어의 각 출력에 대해, 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하고자 시도하여; 획득하였다면, 상기 출력의 식별자와 상기 획득된 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 레이어의 각 출력의 식별자 및 대응되는 메모리블록 식별자를 기록하기 위한 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 유휴 메모리블록 식별자 리스트로부터 상기 메모리블록 식별자를 삭제하고; 획득하지 못하였다면, 메모리블록 식별자를 새로 생성하여 상기 출력의 식별자와 새로 생성된 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 또한 새로 생성된 상기 메모리블록 식별자를 모든 신규 생성 메모리블록 식별자를 기록하기 위한 메모리블록 식별자 총괄 리스트에 포함시킴으로써, 뉴럴 네트워크 순방향 계산을 실행 시, 상기 메모리블록 식별자 총괄 리스트에 따라 뉴럴 네트워크 순방향 계산에 필요한 메모리블록을 생성할 수 있도록 하는 조작; 및 현재 레이어의 각 입력에 대해, 상기 입력으로서 사용된 이전 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않은 경우, 즉 상기 입력으로서 사용된 이전 레이어의 출력에 대응되는 메모리블록 식별자를 유휴 메모리블록 식별자 리스트에 기록하는 조작을 포함하는 계산단계를 실행하도록 배치되는 계산 유닛을 포함한다.
일부 실시예에 따르면, 상기 장치는 상기 메모리블록 총괄 리스트 중의 각 메모리블록 식별자에 하나의 메모리블록 포인터를 생성하는 조작; 및 상기 출력과 메모리블록 식별자 매핑 리스트에 기록된 매핑 관계에 따라, 각 레이어의 출력 및 매핑 관계를 갖는 메모리블록 식별자의 메모리블록 포인터를 연관시키는 조작에 사용되도록 배치되는 사전 할당 유닛을 더 포함한다.
본 개시는 전자회로를 더 제공하며, 상기 전자회로는 상기 방법 중 하나의 단계를 실행하도록 배치되는 회로를 포함한다. 본 개시는 전자장치를 더 제공하며, 상기 전자장치는 프로세서; 및 상기 프로세서로 실행 시 상기 프로세서로 하여금 상기 방법 중 하나를 실행하도록 하는 명령이 포함된 프로그램을 저장하는 메모리를 포함한다. 본 개시는 전자장치의 프로세서로 실행 시, 상기 전자장치로 하여금 상기 방법 중 하나를 실행하도록 하는 명령이 포함된 프로그램을 저장하는 비임시 컴퓨터 가독 저장매체를 더 제공한다.
비록 첨부도면을 참조하여 본 개시의 실시예 또는 예시를 기술하였으나, 상기 방법, 시스템과 장치는 단지 예시적 실시예 또는 예시일 뿐이며, 본 개시의 범위는 이러한 실시예 또는 예시로 한정되지 않고, 청구항 및 그것의 동등한 범위에 의해서만 한정됨을 이해하여야 한다. 실시예 또는 예시 중의 각종 요소는 생략되거나 또는 그와 동등한 요소로 대체될 수 있으며, 또한, 본 개시에 기술된 것과 다른 순서를 통해 각 단계를 실행할 수 있다. 더 나아가, 각종 방식으로 실시예 또는 예시 중의 각종 요소를 조합할 수 있으며, 중요한 것은 기술이 발전함에 따라, 여기에 기술된 많은 요소들이 본 개시 이후 출현하는 동등한 요소에 의해 교체될 수 있다는 점이다.

Claims (19)

  1. 뉴럴 네트워크 순방향 계산을 위한 메모리 사전 할당 방법에 있어서,
    뉴럴 네트워크의 제1 레이어로부터 순차적으로 배열되는 뉴럴 네트워크의 각 레이어를 대상으로,
    현재 레이어의 각 출력에 대하여 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하도록 시도하는 단계;
    상기 메모리블록 식별자를 획득하였다면, 상기 출력의 식별자와 상기 획득된 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 레이어의 각 출력의 식별자 및 대응되는 메모리블록 식별자를 기록하기 위한 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 상기 유휴 메모리블록 식별자 리스트로부터 상기 메모리블록 식별자를 삭제하는 단계;
    상기 메모리블록 식별자를 획득하지 못하였다면, 메모리블록 식별자를 새로 생성하고 상기 출력의 식별자와 새로 생성된 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 새로 생성된 상기 메모리블록 식별자를 모든 신규 생성 메모리블록 식별자를 기록하기 위한 메모리블록 식별자 총괄 리스트에 포함시킴으로써, 뉴럴 네트워크 순방향 계산을 실행 시, 상기 메모리블록 식별자 총괄 리스트에 따라 상기 뉴럴 네트워크 순방향 계산에 필요한 메모리블록을 생성하는 단계; 및
    현재 레이어의 각 입력에 대해, 상기 입력으로서 사용된 이전 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않은 경우, 상기 입력으로 사용된 이전 레이어의 출력에 대응되는 메모리블록 식별자를 상기 유휴 메모리블록 식별자 리스트에 포함시키는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    각 메모리블록 식별자는 하나의 메모리블록 용량이 대응되며,
    상기 유휴 메모리블록 식별자 리스트로부터 획득된 메모리블록 식별자에 대응되는 메모리블록 용량이 상기 출력에 필요한 용량보다 작은 경우, 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 확대시키는 단계를 더 포함하는, 방법.
  3. 제2항에 있어서,
    상기 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하는 단계는,
    상기 유휴 메모리블록 식별자 리스트에 다수의 유휴 메모리블록 식별자가 있고, 상기 다수의 유휴 메모리블록 식별자에 대응되는 메모리블록 용량이 모두 상기 출력에 필요한 용량보다 작은 경우, 상기 다수의 유휴 메모리블록 식별자 중에서, 대응되는 메모리블록 용량이 최대인 유휴 메모리블록 식별자를 선택하여, 상기 출력과 매핑 관계를 갖는 메모리블록 식별자로 삼는 단계를 포함하고;
    상기 유휴 메모리블록 식별자 리스트로부터 획득된 상기 메모리블록 식별자에 대응되는 메모리블록 용량이 상기 출력에 필요한 용량보다 작은 경우, 상기 메모리블록에 대응되는 메모리블록 용량을 확대시키는 단계는,
    상기 다수의 유휴 메모리블록 식별자로부터 선택된, 대응되는 메모리블록 용량이 최대인 유휴 메모리블록 식별자에 대해, 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 적어도 상기 출력에 필요한 용량과 같도록 확대시키는 단계를 포함하는, 방법.
  4. 제2항에 있어서,
    상기 유휴 메모리블록 식별자 리스트로부터 획득된 메모리블록 식별자에 대응되는 메모리블록 용량이 상기 출력에 필요한 용량보다 작은 경우, 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 확대시키는 단계는,
    상기 출력에 필요한 용량에 따라, 상기 메모리블록 식별자에 대응되는 메모리블록 용량을 확대시킴으로써, 상기 메모리블록 용량이 적어도 상기 출력에 필요한 용량과 같아지도록 하는 단계를 포함하는, 방법.
  5. 제1항에 있어서,
    각각의 메모리블록 식별자는 하나의 메모리블록 용량에 대응되며,
    상기 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하는 단계는,
    상기 유휴 메모리블록 식별자 리스트에 다수의 유휴 메모리블록 식별자가 있는 경우, 상기 다수의 유휴 메모리블록 식별자에 각자 대응되는 메모리블록 용량과 상기 출력에 필요한 용량을 비교하여, 상기 출력에 필요한 용량보다 크거나 같은 메모리블록 용량 중, 상기 출력에 필요한 용량과의 차이 값이 최소인 메모리블록 용량에 대응되는 유휴 메모리블록 식별자를 선택하여, 상기 출력과 매핑 관계를 갖는 메모리블록 식별자로 삼는 단계를 포함하는, 방법.
  6. 제2항 내지 제5항 중의 어느 한 항에 있어서,
    상기 출력에 필요한 용량은 상기 출력된 데이터양과 데이터 유형을 통해 확정되는, 방법.
  7. 제1항 내지 제5항 중의 어느 한 항에 있어서,
    상기 계산 단계 이전에, 상기 뉴럴 네트워크의 각 레이어에 상기 레이어의 입력 집합과 출력 집합을 구축하는 단계를 더 포함하며,
    각 레이어의 상기 입력 집합 중의 각 원소는 상기 레이어의 각 입력의 식별자, 데이터양, 및 상기 입력을 저장하기 위한 메모리블록 어드레스를 가리키는 메모리블록 포인터를 포함하고, 각 레이어의 상기 출력 집합의 각 원소는 상기 레이어의 각 출력의 식별자, 데이터양, 및 상기 출력을 저장하기 위한 메모리블록 어드레스를 가리키는 메모리블록 포인터를 포함하는, 방법.
  8. 제1항 내지 제5항 중의 어느 한 항에 있어서,
    상기 계산 단계를 실행하기 전, 상기 뉴럴 네트워크 중 각 출력이 상기 출력의 후속 레이어의 입력으로서 사용되는 횟수, 상기 출력으로서 사용되는 피인용 횟수를 통계 내어, 각 출력과 상기 출력의 피인용 횟수의 매핑 관계를 기록하기 위한 출력과 피인용 횟수 대응 리스트를 생성하는 단계를 더 포함하는, 방법.
  9. 제8항에 있어서,
    상기 뉴럴 네트워크 중 각 출력이 상기 출력의 후속 레이어의 입력으로서 사용되는 횟수, 상기 출력으로서 사용되는 피인용 횟수를 통계 내어, 각 출력과 상기 출력의 피인용 횟수의 매핑 관계를 기록하기 위한 출력과 피인용 횟수 대응 리스트를 생성하는 단계는,
    상기 뉴럴 네트워크의 각 레이어에 대하여,
    현재 레이어의 입력을 획득하고, 상기 입력과 피인용 횟수 대응 리스트에 상기 입력으로서 사용되는 이전 레이어의 출력과 상기 출력의 피인용 횟수의 매핑 관계가 있는지 여부를 확인하여, 상기 매핑 관계가 있는 경우, 상기 이전 레이어의 출력의 피인용 횟수에 단위 수량을 더하는 단계; 및
    이전 레이어의 출력을 획득하여, 상기 출력과 피인용 횟수 대응 리스트에 한 쌍의 매핑 관계로서의 상기 출력과 상기 출력의 피인용 횟수를 새로 생성하며, 그 중 상기 출력과 매핑 관계를 갖는 피인용 횟수를 제1 특정값으로 초기화는 단계를 포함하는, 방법.
  10. 제9항에 있어서,
    각 레이어에 대하여, 상기 계산을 실행하는 단계는,
    현재 레이어의 입력으로서 사용되는 이전 레이어의 출력의 피인용 횟수에서 상기 단위 수량을 감함으로써, 상기 출력과 피인용 횟수 대응 리스트를 업데이트하는 단계를 더 포함하는, 방법.
  11. 제10항에 있어서,
    상기 입력으로서 사용된 이전 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않은 경우, 상기 입력으로서 사용된 이전 레이어의 출력에 대응되는 메모리블록 식별자를 상기 유휴 메모리블록 식별자 리스트에 포함시키는 단계는,
    상기 이전 레이어의 출력의 피인용 횟수가 상기 단위 수량을 감한 후 제2 특정값으로 변경되었다면, 상기 이전 레이어의 출력에 대응되는 메모리블록 식별자를 상기 유휴 메모리블록 식별자 리스트에 포함시키는 단계를 포함하는, 방법.
  12. 제2항 내지 제4항 중의 어느 한 항에 있어서,
    획득되었거나 생성된 메모리블록 식별자 및 대응되는 메모리블록 용량을 한 쌍의 매핑 관계로 하여, 현재 레이어에 사용된 메모리블록 식별자 및 대응되는 메모리블록 용량을 기록하기 위한 기사용(used) 메모리블록 식별자와 용량 매핑 리스트에 저장하고, 또한 메모리블록 용량의 상기 확대에 응답하여, 상기 기사용 메모리블록 식별자와 용량 매핑 리스트에서 상응하는 메모리블록 식별자의 메모리블록 용량을 업데이트하는 방법.
  13. 제1항 내지 제5항 중의 어느 한 항에 있어서,
    상기 출력과 메모리블록 식별자 매핑 리스트에 상기 뉴럴 네트워크의 모든 출력의 식별자 및 상응하는 메모리블록 식별자의 매핑 관계를 저장하는, 방법.
  14. 제1항에 있어서,
    상기 메모리블록 식별자 총괄 리스트 중의 각 메모리블록 식별자에 하나의 메모리블록 포인터를 생성하는 조작; 및
    상기 출력과 메모리블록 식별자 매핑 리스트에 기록된 매핑 관계에 따라, 각 레이어의 출력과 매핑 관계를 갖는 메모리블록 식별자의 메모리블록 포인터를 연관시키는 조작;을 포함하는 메모리 할당 단계를 더 포함하는, 방법.
  15. 뉴럴 네트워크 순방향 계산을 위한 메모리 사전 할당 장치에 있어서,
    상기 뉴럴 네트워크의 제1 레이어로부터 시작하여, 순차적으로 배열되는 뉴럴 네트워크의 각 레이어를 대상으로,
    이전 레이어의 각 출력에 대하여, 유휴 메모리블록 식별자를 기록하기 위한 유휴 메모리블록 식별자 리스트로부터 메모리블록 식별자를 획득하고자 시도하여;
    상기 메모리블록 식별자를 획득하였다면, 상기 출력의 식별자와 상기 획득된 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 레이어의 각 출력의 식별자 및 대응되는 메모리블록 식별자를 기록하기 위한 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 상기 유휴 메모리블록 식별자 리스트로부터 상기 메모리블록 식별자를 삭제하고;
    상기 메모리블록 식별자를 획득하지 못하였다면, 메모리블록 식별자를 새로 생성하여 상기 출력의 식별자와 새로 생성된 상기 메모리블록 식별자를 한 쌍의 매핑 관계로 하여, 상기 출력과 메모리블록 식별자 매핑 리스트에 저장하고, 상기 새로 생성된 상기 메모리블록 식별자를 모든 신규 생성 메모리블록 식별자를 기록하기 위한 메모리블록 식별자 총괄 리스트에 포함시킴으로써, 뉴럴 네트워크 순방향 계산을 실행 시, 상기 메모리블록 식별자 총괄 리스트에 따라 뉴럴 네트워크 순방향 계산에 필요한 메모리블록을 생성할 수 있도록 하며;
    현재 레이어의 각 입력에 대해, 상기 입력으로서 사용된 이전 레이어의 출력이 상기 현재 레이어인 후속 레이어의 입력으로서 사용되지 않은 경우, 상기 입력으로서 사용된 이전 레이어의 출력에 대응되는 메모리블록 식별자를 상기 유휴 메모리블록 식별자 리스트에 기록하는 단계를 실행하도록 배치되는 계산 유닛을 포함하는 장치.
  16. 제15항에 있어서,
    상기 메모리블록 총괄 리스트 중의 각 메모리블록 식별자에 하나의 메모리블록 포인터를 생성하는 조작; 및
    상기 출력과 메모리블록 식별자 매핑 리스트에 기록된 매핑 관계에 따라, 각 레이어의 출력 및 매핑 관계를 갖는 메모리블록 식별자의 메모리블록 포인터를 연관시키는 조작에 사용되도록 배치되는 사전 할당 유닛을 더 포함하는, 장치.
  17. 전자회로에 있어서,
    제1항 내지 제5항 중의 어느 한 항에 따른 방법의 단계를 실행하도록 배치되는 회로를 포함하는, 전자회로.
  18. 전자장치에 있어서,
    프로세서; 및
    상기 프로세서로 실행 시 상기 프로세서로 하여금 제1항 내지 제5항 중의 어느 한 항에 따른 방법을 실행하도록 하는 명령이 포함된 프로그램을 저장하는 메모리를 포함하는, 전자장치.
  19. 전자장치의 프로세서로 실행 시 상기 전자장치로 하여금 제1항 내지 제5항 중의 어느 한 항에 따른 방법을 실행하도록 하는 명령이 포함된 프로그램을 저장하는 비임시성 컴퓨터 가독 저장매체.
KR1020200150547A 2019-11-11 2020-11-11 메모리 사전 할당 방법과 장치, 회로, 전자장치 및 매체 KR102521099B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201911092427.8A CN112783640B (zh) 2019-11-11 2019-11-11 预先分配内存的方法与设备、电路、电子设备及介质
CN201911092427.8 2019-11-11

Publications (2)

Publication Number Publication Date
KR20210057693A true KR20210057693A (ko) 2021-05-21
KR102521099B1 KR102521099B1 (ko) 2023-04-11

Family

ID=73448779

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200150547A KR102521099B1 (ko) 2019-11-11 2020-11-11 메모리 사전 할당 방법과 장치, 회로, 전자장치 및 매체

Country Status (5)

Country Link
EP (1) EP3819772B8 (ko)
JP (1) JP6993739B2 (ko)
KR (1) KR102521099B1 (ko)
CN (1) CN112783640B (ko)
WO (1) WO2021093507A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117751350A (zh) * 2021-11-24 2024-03-22 英特尔公司 神经网络的存储器内保护
CN114298294B (zh) * 2021-12-28 2022-11-01 杭州雄迈集成电路技术股份有限公司 一种基于硬件加速器的神经网络内存优化方法和装置
CN114492775A (zh) * 2022-01-13 2022-05-13 哲库科技(上海)有限公司 一种数据处理方法、装置、神经网络加速器及存储介质
CN117785759B (zh) * 2024-02-28 2024-04-23 北京壁仞科技开发有限公司 数据存储方法、数据读取方法、电子设备和存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170000109A (ko) * 2015-06-23 2017-01-02 주식회사 인프라웨어 메모리 블록 리스트가 병렬로 배열된 메모리 풀에서 메모리를 할당 및 해제하는 방법 및 장치

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9183151B2 (en) * 2013-08-30 2015-11-10 Vmware, Inc. Thread cache allocation
US10083395B2 (en) * 2015-05-21 2018-09-25 Google Llc Batch processing in a neural network processor
CN104951370B (zh) * 2015-06-02 2018-08-21 大唐移动通信设备有限公司 一种内存管理方法及装置
US10726330B2 (en) * 2016-10-11 2020-07-28 The Research Foundation For The State University Of New York System, method, and accelerator to process convolutional neural network layers
CN108874532B (zh) * 2017-06-01 2020-11-06 北京旷视科技有限公司 内存分配方法及设备
CN108304265B (zh) * 2018-01-23 2022-02-01 腾讯科技(深圳)有限公司 内存管理方法、装置及存储介质
US11468312B2 (en) 2018-02-02 2022-10-11 Samsung Electronics Co., Ltd. Memory management for machine learning training on GPU
WO2019165316A1 (en) * 2018-02-23 2019-08-29 The Regents Of The University Of California Architecture to compute sparse neural network
CN110321999B (zh) * 2018-03-30 2021-10-01 赛灵思电子科技(北京)有限公司 神经网络计算图优化方法
CN108829610B (zh) * 2018-04-02 2020-08-04 浙江大华技术股份有限公司 一种神经网络前向计算过程中的内存管理方法及设备
US11562213B2 (en) * 2018-04-17 2023-01-24 Intel Corporation Methods and arrangements to manage memory in cascaded neural networks
CN115220918A (zh) * 2018-06-13 2022-10-21 华为技术有限公司 一种神经网络的内存分配方法及装置
CN109491784B (zh) * 2018-10-18 2021-01-22 北京旷视科技有限公司 降低内存占用量的方法、装置、电子设备、可读存储介质
CN109815162A (zh) * 2019-01-28 2019-05-28 Oppo广东移动通信有限公司 内存管理方法、装置、移动终端及存储介质

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170000109A (ko) * 2015-06-23 2017-01-02 주식회사 인프라웨어 메모리 블록 리스트가 병렬로 배열된 메모리 풀에서 메모리를 할당 및 해제하는 방법 및 장치

Also Published As

Publication number Publication date
JP2021077378A (ja) 2021-05-20
EP3819772A1 (en) 2021-05-12
CN112783640A (zh) 2021-05-11
JP6993739B2 (ja) 2022-01-14
EP3819772B1 (en) 2022-04-27
CN112783640B (zh) 2023-04-04
EP3819772B8 (en) 2022-11-30
WO2021093507A1 (zh) 2021-05-20
KR102521099B1 (ko) 2023-04-11

Similar Documents

Publication Publication Date Title
KR20210057693A (ko) 메모리 사전 할당 방법과 장치, 회로, 전자장치 및 매체
CN108027803B (zh) 分布式无锁基于rdma的存储器分配和解分配
US10374792B1 (en) Layout-independent cryptographic stamp of a distributed dataset
JP2015001828A (ja) 割当プログラム、割当装置および割当方法
US10606516B2 (en) Systems and methods for I/O prioritization in NVMe-compliant storage devices
US20080162810A1 (en) Storage subsystem configuration management method and device
CN111259205B (zh) 一种图数据库遍历方法、装置、设备及存储介质
CN113287286A (zh) 通过rdma进行分布式存储节点中的输入/输出处理
CN110291502B (zh) 一种调度加速资源的方法、装置及加速系统
US9389997B2 (en) Heap management using dynamic memory allocation
CN106897246B (zh) 处理器和使用处理器处理数据的方法
KR102238600B1 (ko) 스케쥴러 컴퓨팅 장치, 그것을 포함하는 분산 컴퓨팅 시스템의 데이터 노드 및 그것의 방법
CN111176838B (zh) 为二分图中的节点分配嵌入向量的方法以及装置
US20190018664A1 (en) Cache aware self-referential structure peeling
JP2017507411A (ja) 動的言語でのインラインキャッシュのためのハードウェアアクセラレーション
JP2017509950A (ja) 動的言語でのインラインキャッシュのためのハードウェアアクセラレーション
JP6716730B2 (ja) 演算量分担機能付きコンピュータ入力システム及びそのコンピュータ入力方法
CN111459412B (zh) 磁盘管理方法、装置以及电子设备
CN111026615B (zh) 一种逻辑卷列表获取方法、装置及电子设备和存储介质
US12026604B2 (en) Memory pre-allocation for forward calculation in a neural network
US20210142154A1 (en) Memory pre-allocation for forward calculation in a neural network
US9697036B2 (en) Method and apparatus for generating unique identifier for distributed computing environment
KR102423876B1 (ko) 어플리케이션 리소스 최적화를 위한 방법과 시스템
CN110543351A (zh) 数据处理方法以及计算机设备
JPWO2018173300A1 (ja) I/o制御方法およびi/o制御システム

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant