KR20090106613A - 메모리 관리방법, 정보처리장치, 프로그램의 작성방법 및 프로그램 - Google Patents
메모리 관리방법, 정보처리장치, 프로그램의 작성방법 및 프로그램 Download PDFInfo
- Publication number
- KR20090106613A KR20090106613A KR1020097017059A KR20097017059A KR20090106613A KR 20090106613 A KR20090106613 A KR 20090106613A KR 1020097017059 A KR1020097017059 A KR 1020097017059A KR 20097017059 A KR20097017059 A KR 20097017059A KR 20090106613 A KR20090106613 A KR 20090106613A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- program
- memory
- block
- blocks
- Prior art date
Links
- 230000015654 memory Effects 0.000 title claims abstract description 318
- 238000000034 method Methods 0.000 title claims abstract description 57
- 230000010365 information processing Effects 0.000 title claims 2
- 238000007726 management method Methods 0.000 title description 50
- 238000003860 storage Methods 0.000 claims abstract description 32
- 238000012546 transfer Methods 0.000 claims description 53
- 238000004458 analytical method Methods 0.000 claims description 11
- 230000005540 biological transmission Effects 0.000 claims description 4
- 230000005055 memory storage Effects 0.000 abstract description 5
- 238000012545 processing Methods 0.000 description 46
- 238000010586 diagram Methods 0.000 description 37
- 238000002360 preparation method Methods 0.000 description 17
- 238000003491 array Methods 0.000 description 11
- 230000008878 coupling Effects 0.000 description 11
- 238000010168 coupling process Methods 0.000 description 11
- 238000005859 coupling reaction Methods 0.000 description 11
- 238000005192 partition Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 7
- 101150086656 dim1 gene Proteins 0.000 description 6
- 238000009826 distribution Methods 0.000 description 6
- 239000013256 coordination polymer Substances 0.000 description 5
- 235000019580 granularity Nutrition 0.000 description 5
- 230000003252 repetitive effect Effects 0.000 description 4
- 238000005111 flow chemistry technique Methods 0.000 description 3
- 230000004807 localization Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 101150097195 TLG1 gene Proteins 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000036316 preload Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000005285 magnetism related processes and functions Effects 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0284—Multiple user address space allocation, e.g. using different base addresses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/453—Data distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5033—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/483—Multiproc
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Description
본 발명은 복수의 프로세서 코어로 구성되는 멀티 프로세서 시스템에서의 메모리 관리방법에 관한 것으로, 특히, 컴파일러가 취득한 정보에 기초하여, 프로세서에 의해 액세스되는 데이터를 메모리의 분할된 영역으로 할당하는 방법에 관한 것이다.
복수의 프로세서 코어를 하나의 칩 상에 집적한 멀티코어 프로세서(칩 멀티 프로세서)가 각 마이크로 프로세서 제조업자에 의해 차례차례 발표되고 있다. 슈퍼 컴퓨터, 서버, 데스크 탑 컴퓨터 및 PC서버 분야 외에, 정보가전 분야 및 장치내장 분야(예를 들면, 휴대전화기, 게임기, 자동차 내비게이션 시스템, 디지털 TV수상기, HDD/DVD 레코더·플레이어 등)에서도 마이크로 프로세서의 멀티코어화 움직임이 보인다.
이와 같이, 현재 정보가전에서 슈퍼 컴퓨터에 이르는 대부분의 정보기기에 있어서 멀티코어 프로세서가 사용되게끔 되어 있으며, 향후, 더욱 많은 정보기기에 멀티코어 프로세서가 내장될 것으로 생각된다.
멀티코어 프로세서는 세립도(fine grain) 명령 레벨의 병렬성뿐만 아니라, 보다 병렬성이 큰 루프 레벨의 병렬성, 보다 입도가 큰 루프간의 병렬성, 함수간의 조립도(coarse grain) 태스크 병렬성도 이용할 수 있다. 이와 같이, 멀티코어 프로세서는 보다 큰 병렬성의 이용에 의해, 프로세서의 처리성능을 향상시킬 수 있다는 점에서 유리하다. 또한, 멀티코어 프로세서는 n대의 프로세서 코어를 사용하여 동일 성능을 달성할 수 있으므로, 클럭 주파수를 n분의 1로 하고, 인가하는 전압도 낮춤으로써, 소비전력(전압의 2승으로 증대)을 낮출 수 있다는 점에서도 유리하다.
또한, 소프트웨어 측면에서는 멀티 프로세서용의 병렬 프로그래밍은 통상적으로 튜닝에 많은 시간을 필요로 하기 때문에, 어플리케이션(application) 소프트웨어의 개발이 힘들다. 그러나, 비교적 소수의 프로세서가 집적되어 있는 현 시점에서는 순차 프로그램을 자동적으로 병렬화하는 자동 병렬화 컴파일러에 의해 고성능을 얻을 수 있다. 정보가전 분야에서는 어플리케이션의 질과 수가 시장에서의 경쟁력을 결정하기 때문에, 컴파일러에 의해 4코어, 8코어, 16코어의 멀티 프로세서용 프로그램의 자동병렬화가 가능하게 되면, 멀티코어의 우위성이 높아진다.
또한, 멀티그레인 병렬화에서는 글 레벨, 루프 레벨, 보다 큰 레벨(예를 들면, 루프간, 서프루틴간, 기본블럭(basic block)간)의 모든 병렬성을 조합하여 가장 조기에 실행가능한 조건 해석에 의해 병렬성을 추출하는 기술이 일본 특허공개 제2001-175619호 공보에 개시되어 있다.
이와 같은 로컬메모리의 최적화는 종래부터 행해져 왔다. 그러나, 종래의 로컬메모리의 최적화는 병렬 루프가 연속될 경우에, 병렬가능한 루프를 연속적으로 실행함으로써 메모리 상의 데이터를 돌아가며 사용한 것뿐이었다.
그러나, 한 개의 루프에서 사용되는 데이터 사이즈는 로컬메모리의 사이즈보다도 큰 경우가 많으며, 루프 중에서 데이터의 로드(load) 및 저장(store)이 발생하였었다. 이 때, 프로세서는 다음에 사용할 데이터가 준비될 때까지 처리를 기다릴 필요가 있어, 프로세서에 의한 처리의 오버헤드가 발생하였었다.
또한, 로컬메모리 상의 데이터를 사용하면서 프로그램을 실행해 가는 데이터 로컬리제이션에 따르면, 로컬메모리만을 사용하여 처리하기 때문에, 순차형 루프 및 기본블럭에서 사용되는 커다란 데이터도 로컬메모리에 저장해야만 한다. 로컬메모리에 로드할 수 없는 데이터는 공유 메모리에 저장하였었다. 따라서, 프로그램 전역에 걸쳐 데이터 로컬리제이션을 적용하는 것이 요망되고 있다.
또한, 스태틱 스케쥴링시 및 다이나믹 스케쥴링 코드의 생성시에는 각 프로세서 상의 로컬메모리 또는 분산공유메모리를 유효하게 사용하며, 프로세서간의 데이터 전송량을 최소화하기 위한 데이터 로컬리제이션도 사용된다.
게다가, 프로세서의 집적도가 높아져서, 1칩에 포함되는 프로세서 코어수가 늘어나면, 프로그램을 병렬화하여도 그다지 처리성능이 향상되지 않는다. 왜냐하면, 프로세서의 동작이 빨라져도, 프로세서에 의한 처리속도와 메모리 액세스 속도와의 차가 확대됨으로 인해, 프로세서가 사용하는 데이터를 적절한 타이밍으로 메모리에 공급할 수 없다는 메모리 월의 문제가 발생하기 때문이다.
따라서, 프로세서에 근접하게 설치되어 있는 메모리를 잘 사용할 필요가 있다. 즉, 프로세서에 근접하는 메모리의 기억용량은 작으므로, 큰 데이터가 필요한 경우에는 데이터를 분할하여 메모리에 로드하는 것이 필요하게 된다. 또한, 메모리간의 데이터 전송은 시간이 걸리므로, 메모리에 로드되어 있는 데이터를 돌아가며 사용할 수 있도록 프로그램 처리 순서를 짠 스케쥴링을 하는 것이 요구된다. 게다가, 메모리 간에 데이터를 전송할 때에 DMA 컨트롤러를 사용하여 오버헤드를 숨길 필요가 있다.
컴파일러는 프로세서에서 실행되는 프로그램의 병렬성을 해석할 때에, 프로그램 내의 태스크의 실행순서에 관한 정보를 취득하여, 태스크간의 데이터 의존관계(정의, 참조 관계)도 해석한다. 또한, 분기(分岐)가 결정되면, 동일한 데이터를 사용하는 프로그램을 알 수 있다. 이와 같이, 컴파일러가 취득한 정보에 의해, 메모리에 저장된 데이터가 사용되는 타이밍을 알 수 있으며, 복수의 태스크 간에 데이터를 돌아가며 사용할 수 있다.
즉, 본 발명에서는 프로세서 근방에 배치된 고속 메모리에 저장된 데이터를 가능한 한 연속적으로 장기간 놓아둔 채로 처리를 계속할 수 있게 하기 위해, 데이터를 효율적으로 배치한다. 구체적으로는 필요한 데이터를 프로세서 근방의 고속 메모리에 저장하고, 불필요하게 된 데이터를 저속이지만 대용량의 메모리에 순차적으로 전송한다. 게다가, 본 발명에서는 데이터를 분할하여 로컬 메모리에 할당한다. 또한, 로컬메모리에 저장된 데이터를 장기간 사용할 수 있도록 하기 위해, 컴파일러가 가지고 있는 정보(데이터가 언제 어디에서 사용될 지에 관한 정보)에 기초하여, 어떤 데이터를 내보낼지를 결정한다. 또한, 필요로 하는 데이터를 먼저 로드하도록 DMA를 스케쥴링한다.
또한, 본 발명은 동일 종류의 프로세서에서의 메모리 관리뿐만 아니라, 다른 종류의 헤테로지니어스·멀티 프로세서에서의 메모리 관리에도 적용할 수 있다.
본 발명에 따르면, 메모리의 기억영역의 관리가 용이해지기 때문에, 로컬메모리 및 분산공유메모리로의 데이터 배치를 최적화할 수 있다. 이에 의해, 메모리에 로드되어 있는 데이터를 돌아가며 사용할 수 있으며, 메모리 간의 데이터 전송을 줄일 수 있다.
도 1은 본 발명의 실시형태에 따른 싱글 칩 멀티코어 프로세서의 구성도이다.
도 2는 본 발명의 실시형태에 따른 멀티그레인 병렬처리의 설명도이다.
도 3은 본 발명의 실시형태에 따른 매크로 플로우 그래프의 설명도이다.
도 4는 본 발명의 실시형태에 따른 로컬메모리 관리의 개요 설명도이다.
도 5는 본 발명의 실시형태에 따른 메모리의 기억영역의 분할상태의 설명도이다.
도 6은 본 발명의 실시형태에 따른 메모리의 소거 우선도의 설명도이다.
도 7은 본 발명의 실시형태에 따른 메모리에 로드되어 있는 변수의 추이를 설명하기 위한 도면이다.
도 8은 본 발명의 실시형태에 따른 루프 분할수순의 구체예를 나타낸 설명도이다.
도 9는 본 발명의 실시형태에 따른 루프 분할수순의 구체예를 나타낸 설명도이다.
도 10은 본 발명의 실시형태에 따fms 루프 분할수순의 구체예를 나타낸 설명도이다.
도 11은 본 발명의 실시형태에 따른 루프 분할수순의 구체예를 나타낸 설명도이다.
도 12는 본 발명의 실시형태에 따른 블럭 사이즈 결정수순의 구체예를 나타낸 설명도이다.
도 13은 본 발명의 실시형태에 따른 블럭 사이즈 결정수순의 구체예를 나타낸 설명도이다.
도 14는 본 발명의 실시형태에 따른 로컬메모리 관리 매크로 태스크 생성의 구체예(디스트리뷰션 전)를 나타낸 설명도이다.
도 15는 본 발명의 실시형태에 따른 로컬메모리 관리 매크로 태스크 생성의 구체예(디스트리뷰션 후)를 나타낸 설명도이다.
도 16은 본 발명의 실시형태에 따른 템플레이트 작성수순의 예를 나타낸 도면이다.
도 17은 본 발명의 실시형태에 따른 템플레이트가 맵핑된 로컬메모리 상태의 설명도이다.
도 18은 본 발명의 실시형태에 따른 템플레이트가 맵핑된 로컬메모리 상태의 설명도이다.
도 19A 및 도 19B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 1)를 나타낸 설명도이다.
도 20A 및 도 20B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 2)를 나타낸 설명도이다.
도 21A 및 도 21B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 3)를 나타낸 설명도이다.
도 22A 및 도 22B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 4)를 나타낸 설명도이다.
도 23A 및 도 23B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 5)를 나타낸 설명도이다.
도 24A 및 도 24B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 6)를 나타낸 설명도이다.
도 25A 및 도 25B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 7)를 나타낸 설명도이다.
도 26A 및 도 26B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 8)를 나타낸 설명도이다.
도 27A 및 도 27B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 9)를 나타낸 설명도이다.
도 28A 및 도 28B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 10)를 나타낸 설명도이다.
도 29A 및 도 29B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 11)를 나타낸 설명도이다.
도 30A 및 도 30B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 12)를 나타낸 설명도이다.
도 31A 및 도 31B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 13)를 나타낸 설명도이다.
도 32A 및 도 32B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 14)를 나타낸 설명도이다.
도 33A 및 도 33B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 15)를 나타낸 설명도이다.
도 34A 및 도 34B는 본 발명의 실시형태에 따른 코드 이미지의 작성예(상태 16)를 나타낸 설명도이다.
먼저, 본 발명의 개요에 대해 설명한다.
본 발명은 컴파일러가 프로그램의 해석에 의해 취득한 정보에 기초하여, 메모리의 기억영역을 관리한다. 컴파일러는 프로그램을 컴파일할 때 프로그램의 정보를 취득한다. 구체적으로, 컴파일러는 상기 프로그램에서 사용되는 데이터의 정 보, 상기 데이터가 다음에 사용될 타이밍의 정보, 및 상기 데이터가 사용되는 프로세서의 정보를 프로그램의 해석에 의해 취득할 수 있다. 즉, 프로그램에 의해 데이터가 사용되는 타이밍을 취득할 수 있다. 본 발명의 제 1 특징은 프로그램을 해석하여 얻어진 정보에 기초하여, 메모리 기억영역의 할당을 관리하는 것이다.
구체적으로, 컴파일러는 프로그램(예를 들면, 네스팅된 각 계층의 처리)의 실행 스케쥴 정보를 가지고 있으므로, 데이터가 언제 액세스되는가에 관한 정보를 취득할 수 있다. 따라서, 프로그램의 실행 스케쥴에 따라 메모리의 기억영역을 데이터에 최적으로 할당할 수 있으므로, 데이터의 전송을 최소화할 수 있다.
게다가, 메모리에 할당된 데이터를 어떤 프로세서가 언제 필요로 하는가에 관한 정보를 취득할 수 있다. 따라서, 프로세서에 의한 처리에 영향을 미치지 않고 DMA 컨트롤러에 의해 데이터를 메모리에 연속적으로 공급(로드)할 수 있다. 이로써, 데이터가 메모리에 공급되는 것을 기다리기 위해 프로세서가 멈추지 않는다.
또한, 컴파일러는 데이터가 프로그램에 의해 언제 액세스되는가에 관한 정보를 취득할 수 있으므로, 이미 불필요하게 된 데이터 또는 바로는 액세스되지 않는 데이터를 특정할 수 있으며, DMA 컨트롤러에 의해 불필요해진 데이터 또는 바로는 액세스되지 않는 데이터를 메모리의 기억영역으로부터 소거(저장)할 수 있다. 이 장래 정보에 기초한 데이터 소거는 종래 사용되었던 LRU(Least Recently Used)와 달리, 최근 사용되지 않았지만 바로 사용될지도 모르는 데이터가 소거되는 일이 없으며, 메모리의 이용을 최적화하여 메모리간의 데이터 전송을 줄일 수 있다.
즉, 본 발명의 제 2 특징은 프로그램을 해석하여 얻어진 정보에 기초하여, 메모리로 및/또는 메모리로부터 데이터를 전송하는 타이밍을 결정하는 것이다.
이와 같이 메모리의 기억영역을 관리하기 위해, 메모리의 기억영역을 고정 사이즈의 블럭으로 분할하여 블럭마다 데이터를 할당한다. 기억영역이 분할되는 블럭의 사이즈는 컴파일시에 취득한 프로그램의 특성(프로그램에서 사용되고 있는 배열 사이즈, 배열의 형상, 프로그램의 실행 패턴 등)에 따라 적절한 사이즈를 결정한다. 또한, 블럭의 사이즈는 정수배(예를 들면, 2의 배수)의 관계로 하면 된다.
즉, 본 발명의 제 3 특징은 프로그램을 해석하여 얻어진 정보에 기초하여, 메모리의 기억영역을 적절한 사이즈의 블럭으로 분할하여 데이터를 할당하는 것이다. 프로그램의 특성에 따라 기억영역을 고정사이즈의 블럭으로 분할하는 것은 하드웨어나 OS(오퍼레이팅 시스템)에서는 이룰 수 없다. 이는 하드웨어나 OS에 의해 기억영역을 분할하면, 언제나 정해진 사이즈로 분할되어버리기 때문이다.
게다가, 액세스할 데이터의 종류나 범위에 따라, 프로그램에 사용되는 데이터의 사이즈가 다른 경우가 있다. 따라서, 프로그램 중에서 사용되는 데이터의 사이즈에 적합하도록 복수 사이즈의 블럭을 준비한다. 그리고, 데이터의 사이즈에 적합하도록 할당되는 블럭의 사이즈를 변경한다.
또한, 프로그램의 실행시에 필요로 하는 데이터(어느 순간에 메모리에 로드되어 있어야만 하는 데이터를 '워킹세트'라 한다)의 분할에 맞추어 프로그램도 분할한다. 예를 들면, 루프를 2분의 1로 분할하면, 사용되는 데이터도 2분의 1이 된다. 본 발명의 제 4 특징은 프로그램을 해석하여 얻어진 정보에 기초하여, 메모리 의 기억영역에 워킹세트가 로드되도록 프로그램의 분할 수를 결정하는 것이다. 예를 들면, 프로그램의 분할은 하나의 커다란 루프를 분할하여 작은 단위의 루프를 반복하여 실행한다.
또한, 다중 루프에서는 통상적으로 다차원 배열변수가 사용된다. 1차원 어드레스 공간을 갖는 고정사이즈의 블럭에 다차원 배열변수를 할당할 때에, 1차원의 블럭에 다차원 배열 템플레이트를 할당한다. 이 다차원 배열 템플레이트의 형상 및 사이즈는 프로그램에서 사용되는 배열변수의 형상 및 사이즈에 기초하여 결정된다. 본 발명의 제 5 특징은 프로그램을 해석하여 얻어진 정보에 기초하여, 블럭으로 할당되는 템플레이트를 결정하는 것이다. 이에 의해, 배열변수의 첨자를 변환하는 수고나 프로그램의 복잡화를 피하면서, 임의의 배열을 메모리 상의 임의의 어드레스에 할당할 수 있다.
또한, 이하의 본 발명의 실시형태에서는 데이터의 사용에 대해 구체적으로 설명할 것이나, 프로세서에 의한 데이터의 사용(참조) 외에, 데이터의 정의(데이터를 계산하여 메모리에 저장하는 것)에 있어서의 메모리 관리도 본 발명의 범주이다. 즉, 본 발명은 데이터의 사용 및 정의 모두를 포함하는 데이터의 액세스에 대해 적용가능한 것이다.
이어, 본 발명의 실시형태에 대해 도면을 참조하여 설명한다.
도 1은 본 발명의 실시형태에 따른 싱글 칩 멀티코어 프로세서의 구성도이다.
본 발명의 실시형태에 따른 싱글 칩 멀티코어 프로세서(10)는 복수의 프로세서 코어(PC0, PC1, ...., PCn)(16)를 포함하는 복수의 멀티코어 칩(CMP0, ..., CMPm)(10), 복수의 집중공유메모리(CSM0, ..., CSMj)(14), 입출력 제어를 행하는 복수의 입출력용 칩(I/O CSP0, ..., I/O CSPk)(18), 및 칩간 결합망(InterCCN)(12)을 구비한다.
칩간 결합망(12)은 기존의 접속기술(크로스바 스위치, 버스, 멀티 스테이지 네트워크 등)에 의해 실현되며, 복수의 프로세서 코어(16), 복수의 집중공유메모리(14) 및 입출력용 팁(18)을 접속한다. 집중공유메모리(14)는 시스템 중의 전체 프로세서 코어(16)에 의해 공유되며, 각 프로세서 코어(16)로부터 액세스가능한 메모리이다. 집중공유메모리(14)는 멀티코어 칩(10) 내에 구비되는 집중공유메모리(28)를 보완한다.
각 멀티코어 칩(10)은 복수의 프로세서 코어(PC)(16), 집중공유메모리(CSM/L2 Cache)(28) 및 칩내 결합망(IntraCCN)(34)을 구비한다. 각 프로세서 코어(16)는 CPU(20), 분산공유메모리(DSM : distributed shared memory)(22), 로컬 프로그램 메모리(LPM/I-Cache)(24), 로컬 데이터 메모리(LDM/D-cache)(26), 데이터 전송 컨트롤러(DTC)(30), 네트워크 인터페이스(NI)(32) 및 전력제어레지스터(FVR)(36)를 구비한다.
CPU(20)는 정수 연산 및 부동소수점 연산이 가능한 것이면 되며, 특별히 한정되지 않는다. 예를 들면, 데이터의 로드(load) 및 저장(store)의 아키텍처가 단순한 싱글 이슈 RISC 아키텍처의 CPU를 사용할 수 있다. 또한, 슈퍼 스칼라 프로 세서, VLIW 프로세서 등도 사용할 수 있다.
분산공유메모리(DSM)(22)는 듀얼 포트 메모리로 구성되어 있으며, 데이터 전송 컨트롤러(30)를 통해, 다른 프로세서 코어(16)에서 데이터를 직접 읽고 쓸 수 있으며, 태스크간의 데이터 전송에 사용된다.
로컬 프로그램 메모리(LPM)(24)는 스케쥴러에 의해 정해진 태스크의 실행순서에 따라, 실행할 명령을 다른 메모리로부터 먼저 읽어내어 캐시한다. 또한, 프로그램의 특징에 따라, 통상의 데이터 캐시 메모리로서도 사용될 수 있으며, 히트 미스를 적게 하기 위한 캐시로서도 사용된다.
로컬 데이터 메모리(LDM)(26)는 각 프로세서 코어(16) 내에서만 액세스가능한 메모리이며, 각 프로세서 코어(16)에 할당된 태스크에서 사용되는 데이터(예를 들면, 배열변수)를 저장한다. 또한, 로컬 데이터 메모리(26)는 L1 데이터 캐시로 전환할 수 있다.
데이터 전송 컨트롤러(DTC)(30)는 공지의 DMA 컨트롤러에 의해 구성되며, 스케쥴러에 의해 정해진 타이밍에 따라, 실행할 명령이나 사용되는 데이터를 메모리간에 전송한다. 구체적으로는 자기 또는 다른 프로세서 코어(16) 상의 로컬메모리(26), 자기 및 다른 프로세서 코어(16) 상의 분산공유메모리(22), 자기 및 다른 멀티코어 칩(10) 상의 집중공유메모리(28), 그리고 다른 칩에 마련된 집중공유메모리(14) 간에 데이터를 전송한다.
또한, 로컬 데이터 메모리(26)와 데이터 전송 컨트롤러(30) 간의 점선은 싱글 칩 멀티프로세서의 용도에 따라, 데이터 전송 컨트롤러(30)가 로컬 데이터 메모 리(26)에 액세스될 수 있도록 구성하여도 좋다는 것을 나타내고 있다. 이와 같은 경우, CPU(20)가 전송 지시를 로컬 데이터 메모리(26)를 통해 데이터 전송 컨트롤러(30)에 부여할 수 있다. 또한, CPU(20)가 전송종료 후에 전송된 데이터를 체크할 수 있다.
CPU(20)는 로컬 데이터 메모리(26), 분산공유메모리(22) 또는 전용 버퍼(도시생략)를 통해, 데이터 전송 컨트롤러(30)로 데이터 전송을 지시한다. 또한, 데이터 전송 컨트롤러(30)는 로컬 데이터 메모리(26), 분산공유메모리(22) 또는 전용 버퍼(도시생략)를 통해, CPU(20)로 데이터 전송의 종료를 보고한다. 이 때, 어떤 메모리 또는 버퍼를 사용할 것인지는 프로세서의 용도에 따라 프로세서의 설계시에 결정된다. 또는, 복수의 하드웨어적인 방법을 준비하여, 프로그램의 특성에 따라 컴파일러 또는 사용자가 소프트웨어적으로 구분하여 사용할 수 있게 하여도 좋다.
데이터 전송 컨트롤러(30)로의 데이터 전송 지시(예를 들면, 몇 번지로부터 몇 바이트의 데이터를 어디에 저장하거나 로드할 것인지, 및 데이터 전송의 모드(연속데이터 전송, 스트라이드 전송 등)는 컴파일러가 데이터 전송 명령을 메모리 또는 전용 버퍼에 저장하여, 프로그램 실행시에는 어떤 데이터 전송명령을 실행할 것인지에 관한 지시만을 내리도록 하여, 데이터 전송 컨트롤러(30)를 구동하기 위한 오버헤드를 삭감하는 것이 바람직하다.
네트워크 인터페이스(NI)(32)는 각 멀티코어 칩(10) 내의 프로세서 코어(16)간을 통신가능하게 하기 위해 칩내 결합망(34)에 접속된다. 칩내 결합망(34)은 칩간 결합망(12)에 접속되어 있다. 프로세서 코어(16)는 칩간 결합망(12)에 의해, 다른 멀티코어 칩(10) 내의 프로세서 코어(16)와 통신할 수 있다.
프로세서 코어(16)는 칩내 결합망(34)을 통해 집중공유메모리(14)에 접속된다. 집중공유메모리(14)는 칩간 결합망(12)에 접속된다.
또한, 네트워크 인터페이스(32)는 칩내 접속네트워크(34)를 통하지 않고, 칩간 결합망(12)을 직접 접속할 수도 있다. 이와 같은 구성은 시스템 중의 전체 프로세서 코어(16)가 각 칩 상에 분산되어 배치된 집중공유메모리(28) 및 분산공유메모리(22)에 평등한 액세스를 가능하게 한다. 또한, 직결된 패스를 마련함으로써, 칩간의 데이터 전송량이 많은 경우에도 시스템 전체의 데이터 전송능력을 높일 수 있다.
전력제어레지스터(FVR)(36)는 프로세서 코어(16)의 동작주파수 및 동작전압을 제어하기 위해, 프로세서 코어(16)에 공급되는 전원전압이나 클럭 주파수가 설정된다. 또한, 도시한 바와 같이, 전력제어레지스터는 프로세서 코어(16) 뿐만 아니라, 멀티코어 칩(10), 칩간 결합망(12), 집중공유메모리(14), 입출력용 칩(18), 집중공유메모리(28) 및 칩내 결합망(34)에도 마련되며, 이들 각 구성의 동작 주파수 및 동작 전압을 제어하기 위한 데이터가 저장된다.
도 2는 본 발명의 실시형태에 따른 멀티그레인 병렬처리를 설명하는 도면이다.
멀티그레인 병렬처리란, 조립도(coarse grain) 병렬성, 중립도(medium grain) 병렬성 및 근세립도(near-fine grain) 병렬성을 계층적으로 이용하는 병렬처리 방식이다. 조립도 병렬성이란 서브루틴간, 루프간 및 기본블럭간의 병렬성이 며, 중립도 병렬성이란 루프의 이터레이션(iteration)간의 병렬성이며, 근세립도 병렬성이란 스테이트먼트간 및 명령간의 병렬성이다. 이 멀티그레인 병렬처리에 의해, 종래 행해져 왔던 국소적이고도 단일 입도(粒度)의 병렬화(루프의 병렬화 및 명령레벨의 병렬화 등)와는 달리, 프로그램 전역에 걸친 글로벌하고도 복수 입도에 걸친 플렉시블한 병렬처리가 가능하게 된다.
멀티그레인 병렬처리에서는 다음과 같은 수순으로 병렬화처리가 행해진다.
1) 소스 프로그램으로부터 매크로 태스크를 생성.
2) 매크로 태스크간의 제어 플로우 및 데이터 의존을 해석하여 매크로 플로우 그래프를 생성.
3) 가장 빨리 실행가능한 조건 해석에 의해 매크로 태스크 그래프를 생성.
이하, 이들 수순을 구체적으로 설명한다.
단일 프로그램 중의 서브루틴, 루프, 기본블럭간의 병렬성을 이용하는 멀티그레인 병렬처리에서는 소스가 되는, 예를 들면 포트란 프로그램을 조립도 태스크(매크로 태스크)로 하여, 반복 블럭(RB : repetition block), 서브루틴 블럭(SB : subroutine block), 및 유사 대입문 블럭(BPA : block of pseudo assignment statements)의 3종류의 매크로 태스크(MT)로 분해한다. 반복 블럭은 각 계층에서 가장 외측의 루프이다.
또한, 유사 대입문 블럭은 스케쥴링 오버 헤드 및 병렬성을 고려하여, 결합 및/또는 분할된 기본블럭이다. 여기에서, 유사 대입문 블럭은 기본적으로는 통상의 기본블럭이지만, 병렬성 추출을 위해 단일 기본블럭을 복수개로 분할할 수도 있 다. 또한, 한 개의 유사 대입문 블럭의 처리시간이 짧고, 다이나믹 스케쥴링시의 오버헤드를 무시할 수 없는 경우에는 복수의 유사 대입문 블럭을 결합하여 하나의 유사 대입문 블럭을 생성한다.
최외측 루프인 반복 블럭이 Doall 루프인 경우에는 루프 인덱스를 분할함으로써 복수의 부분 Doall 루프로 분할하고, 분할된 Doall 루프를 새롭게 반복 블럭으로 정의한다. 반복 블럭이 non-Doall 루프인 경우에는 반복 블럭 내의 병렬성에 계층적 매크로 데이터 플로우 처리를 적용하면 된다.
서브루틴 블럭은 가능한 한 인라인 전개하면 된다. 그러나, 코드 길이를 고려한 결과, 효과적으로 인라인 전개가 불가능한 서브루틴은 그대로 서브루틴 블럭으로 한다. 이 경우, 서브루틴 블럭 내의 병렬성에 계층적 매크로 데이터 플로우 처리를 적용하면 된다.
이어, 매크로 태스크간의 제어 플로우와 데이터 의존을 해석하여, 도 3에 나타낸 바와 같은 매크로 태스크 그래프(MTG)를 작성한다. 매크로 플로우 그래프에서는 매크로 태스크(MT) 간의 제어 플로우를 나타내고 있다. 매크로 태스크 그래프를 작성할 때는 매크로 태스크간의 제어 의존 및 데이터 의존을 동시에 해석하여, 각 매크로 태스크를 가장 빨리 실행할 수 있는 조건(가장 빨리 실행가능한 조건)의 형태로 매크로 태스크간의 병렬성을 검출한다. 또한, 가장 빠른 실행개시조건을 그래프로 표현한 것이 매크로 태스크 그래프이다.
그리고, 컴파일러는 매크로 태스크 그래프 상의 매크로 태스크를 프로세서 클러스터(컴파일러 또는 사용자에 의해 정의되는 프로세서 그룹)에 할당한다. 이 태스크의 할당에는 컴파일시에 할당하는 스태틱 스케쥴링과, 실행시에 할당하는 다이나믹 스케쥴링이 있다. 다이나믹 스케쥴링의 경우, 다이나믹 CP 알고리즘을 이용하여 다이나믹 스케쥴링 코드를 생성하고, 생성된 다이나믹 스케쥴링 코드를 프로그램 중에 삽입한다. 또한, 다이나믹 스케쥴링시에는 실행시까지 어떠한 매크로 태스크가 어떤 프로세서로 실행될지 알 수 없기 때문에, 매크로 태스크간에 공유되는 데이터는 전체 프로세서로부터 등거리로 보이는 집중공유메모리(14)에 할당하면 된다.
멀티그레인 병렬화에서는 매크로 데이터 플로우 처리에 의해 프로세서 클러스터에 할당되는 루프 블럭은, 그 루프 블럭이 Doall 루프 또는 Doacross 루프인 경우, 프로세서 클러스터 내의 복수의 프로세서 코어(16)에 의해 처리가 되도록 이터레이션 레벨로 루프가 분할되어, 루프가 병렬화된다.
루프의 재구축에는 스테이트먼트의 실행순서 변경, 루프 디스트리뷰션, 노드 스플릿팅 스칼라 익스펜션, 루프 인터체인지, 루프 언롤링, 스트립 마이닝(strip mining), 어레이 프라이버타이제이션(array privatization), 및 유니모듈러 변환(루프 리버설, 퍼뮤테이션(permutation), 스큐잉 등) 등의 종래 기술을 그대로 이용할 수 있다.
또한, 루프 병렬처리를 적용할 수 없는 루프에는 근세립도 병렬처리, 또는 루프의 바디부를 계층적으로 매크로 태스크로 분할하는 조립도 태스크 병렬처리를 적용한다.
프로세서 클러스터에 할당되는 매크로 태스크가 유사 대입문 블럭이거나, 또 는 루프 병렬화도 계층적인 매크로 데이터 플로우 처리도 적용할 수 없는 루프 블럭인 경우에는 유사 대입문 블럭 내의 스테이트먼트 또는 명령을 근세립도 태스크로 하여 프로세서 클러스터 내의 프로세서에서 병렬처리한다.
멀티 프로세서 시스템에서의 근세립도 병렬처리에서는 프로세서간의 부하 밸런스뿐만 아니라 프로세서간의 데이터 전송을 최소로 하도록 근세립도 태스크를 프로세서에 스케쥴링함으로써, 효율적으로 병렬처리를 실현한다. 게다가, 이 근세립도 병렬처리에서 요구되는 스케쥴링에서는 근세립도 태스크간에는 데이터 의존에 따른 실행순서의 제약이 있기 때문에, 태스크의 실행순서가 문제가 된다.
이와 같이 하여 생성된 근세립도 태스크 그래프를 각 프로세서에 스태틱하게 스케쥴링한다. 이 때, 스케쥴링 알고리즘으로서, 데이터 전송 오버헤드를 고려하여 실행시간을 최소화하기 위해, 공지된 휴리스틱(heuristic) 알고리즘(CP/DT/MISF법, CP/ETE/MISF법, ETF/CP법, 또는 DT/CP법)을 적용하여 최적의 스케쥴을 결정한다.
스케쥴링의 종료 후, 컴파일러는 프로세서 코어에 할당된 태스크의 명령열을 순번에 따라 늘어놓고, 데이터전송 명령이나 동기 명령을 필요한 부위에 삽입함으로써, 각 프로세서용 머신 코드를 생성한다. 이 때, 삽입되는 데이터전송 명령은 매크로 태스크간의 제어 의존 및 데이터 의존에 의해, 로컬메모리(26)에 데이터를 저장하는 타이밍, 및 로컬메모리(26)로부터 데이터를 소거하는 타이밍이 결정된다.
근세립도 태스크간의 동기에는 버젼 넘버법을 사용하며, 동기 플래그의 수신은 수신측 프로세서 코어의 비지웨이트(busy-wait)에 의해 수행하면 된다. 여기 서, 데이터 전송 지시 및 동기 플래그의 설정은 송신측 프로세서가 수신측 프로세서 코어(16) 상의 분산공유메모리(22)에 직접 기입함으로써, 낮은 오버헤드로 수행할 수 있다.
<로컬메모리 관리>
도 4는 본 발명의 실시 형태에 따른 로컬메모리 관리의 개요를 설명하는 도면이다.
프로그램은 일반적으로, 서브루틴 및 다중 루프에 의해 복수의 계층으로 나뉘어져 있다. 따라서, 프로그램의 실행에 필요한 데이터를 어떤 타이밍으로 전송할 것인지를 생각하는 것이 중요하다. 예를 들면, 루프에서는 루프의 전후에 데이터를 전송하면 된다. 구체적으로는 루프의 실행 전에 데이터를 로컬메모리로 전송하고, 루프의 실행 후에 데이터를 로컬메모리로부터 전송한다. 그리고, 루프 내에서는 데이터를 로컬메모리에 로드한 채로, 루프가 실행될 수 있도록 데이터를 배치하면 된다. 이와 같이, 데이터를 로컬메모리에 로드한 채로 실행될 수 있는 프로그램의 단위를 '로컬메모리 관리 매크로 태스크'라 한다.
즉, 로컬메모리 관리 매크로 태스크에서 취급하는 데이터는 반드시 로컬메모리 상에 로드되는 사이즈의 데이터이다. 또한, 로컬메모리 관리 매크로 태스크의 실행에 필요한 데이터는 로컬메모리 관리 매크로 태스크의 실행 전 또는 실행 후의 적절한 타이밍으로 전송(로드, 저장(store))된다. 게다가, 태스크 내에서 데이터의 전송이 발생하지 않도록 로컬메모리 관리 매크로 태스크를 결정한다.
그리고, 필요한 모든 데이터를 로컬메모리에 로드할 수 없는 루프는 그 루프 중에서, 사용되는 모든 데이터가 로컬메모리에 로드되는 부분을 로컬메모리 관리 매크로 태스크라 정의한다. 즉, 필요한 모든 데이터가 로컬메모리에 로드되도록 프로그램을 분할하고, 로컬메모리 관리 매크로 태스크를 결정한다. 이와 같이 로컬메모리 관리 매크로 태스크를 결정하여, 로컬메모리 관리 매크로 태스크의 실행에 필요한 데이터는 매크로 태스크의 실행 전후에 전송(로컬메모리로의 로드, 로컬메모리로부터 집중공유메모리로의 저장)한다. 이 때문에, 매크로 태스크 내에서 데이터 전송이 발생하지 않는다.
이상, 루프에 대해 설명하였는데, 프로그램 중의 기본블럭 및 서브루틴에서도 마찬가지이다. 또한, 서브루틴에 대해서는 후술하는 예외가 있다.
또한, 본 명세서에서는 로컬메모리의 관리에 대해 설명하는데, 용량에 제한이 있는(기억용량이 사용되는 데이터보다 적은) 메모리이면 본 발명을 적용할 수 있다. 예를 들면, 로컬메모리(26) 외에, 프로세서 코어(16) 내의 분산공유메모리(22), 온 칩의 집중공유메모리(28) 및 오프 칩의 집중공유메모리(14)에도 본 발명을 적용할 수 있다.
이상 설명한 프로그램을 분할하여 로컬메모리 관리 매크로 태스크를 생성하는 방법에 대해 도 4를 참조하여 설명한다.
로컬메모리에 배열변수의 요소가 1000개 로드된다고 가정한다. 또한, 도 4에 나타낸 바와 같이, 이 프로그램은 변수 i, j에 의한 이중 루프가 포함되어 있다. 루프 중에서 배열변수 A[1:30, 1:20]은 600요소가 사용되며, 배열변수 B[1:30]은 30요소가 사용되고, 배열변수 C[1:30, 1:20]은 600요소가 사용된다. 모 두 합치면, 이 루프에서는 1230개의 배열요소가 사용된다. 따라서, 모든 데이터를 로컬메모리에 로드하여, 이 루프를 실행할 수 없다.
때문에, 본 발명의 실시형태에 따른 컴파일러는 변수 i의 루프를 i=1~10 및 i=11~20의 두 루프로 분할한다. 그러면, 각 루프에서 액세스되는 데이터는 630요소가 되므로, 모든 데이터를 로컬메모리에 로드한 채, 루프를 처음부터 마지막까지 실행할 수 있다. 이 분할된 루프가 로컬메모리 관리 매크로 태스크이다. 그리고, 이 매크로 태스크의 실행 전후에 필요한 데이터가 로드 및 저장된다.
데이터의 로컬메모리로의 전송(로드)은 매크로 태스크의 실행 직전이 아니더라도, 다른 데이터 블럭으로의 할당을 고려하여 더 이전의 시점에서 실행해도 좋다. 이와 같이, 배열변수(데이터)가 사용되는 매크로 태스크의 실행 개시전까지의 임의의 타이밍에서, 그 매크로 태스크에서 사용되는 배열변수를 메모리에 로드하는 것을 '프리로드(preload)'라 한다. 이 프리로드는 다른 매크로 태스크의 실행중이더라도, 그 데이터가 로드될 블럭이 비어 있으면, DMA에 의해 데이터 전송이 가능하다. 이와 같이 블럭의 빈 상태에 따라, 매크로 태스크의 실행전에도 데이터를 로드할 수 있어, 프로그램 실행까지 필요한 데이터를 구비할 수 있다. 이 때문에, 메모리에 필요한 데이터가 로드되어 있지 않음으로 인한 프로세서의 대기시간을 삭감할 수 있다.
또한, 데이터의 로컬메모리로부터의 전송(저장)은 매크로 태스크의 실행 종료 직후가 아니더라도, 다른 데이터 블럭으로의 할당을 고려하여 더 이후의 시점에서 실행할 수도 있다. 이와 같이, 배열변수(데이터)가 사용되는 매크로 태스크 종 료 후의 임의의 타이밍에서, 그 매크로 태스크에서 사용된 배열변수를 메모리에 로드하는 것을 '포스트스토어(poststore)'라 한다. 이 포스트스토어는 다른 매크로 태스크의 실행중이더라도, DMA에 의해 로컬메모리로부터 집중공유메모리로의 데이터 전송이 가능하다. 이와 같이 임의의 타이밍에서 데이터를 저장함으로써, DMA의 부하가 매크로 태스크의 실행 전후에 집중하는 것을 피할 수 있다.
이어, 상술한 서브루틴에서의 예외에 관하여 설명한다.
상술한 바와 같이, 일반적으로는 로컬메모리 관리 매크로 태스크 내에서 데이터의 전송이 발생하는 일은 없다. 그러나, 서브루틴이 로컬메모리 관리 매크로 태스크가 된 경우, 및 내부에서 서브루틴을 호출하고 있는 루프가 로컬메모리 관리 매크로 태스크가 된 경우의 두 경우에는, 서브루틴 내에서 데이터를 전송(로드 및/또는 저장)할 필요가 있다.
구체적으로는 서브루틴의 개시시에, 서브루틴 호출원에서 사용하고 있었던 배열변수를 로드한다. 예를 들면, 포트란(Fortran)에서의 세이브, 커먼(common) 및 데이터 변수, C언어에서의 스태틱 변수 및 글로벌 변수를 사용하면, 이들 변수는 호출원에서는 관리할 수 없다. 따라서, 매크로 태스크 내의 서브루틴 처리가 종료되었다면 사용된 변수를 공유메모리에 전송할 필요가 있다. 서브루틴 종료시에 변수를 로컬메모리부터 읽어내어 공유메모리에 기입하지 않으면, 데이터의 정합성이 확보되지 않기 때문이다. 또한, 매크로 태스크는 한 개의 물리 프로세서에 의해 실행되므로, 매크로 태스크 내에서 데이터를 로드 및 저장하여도 정확한 값이 보증된다.
<기억영역의 분할>
도 5는 본 발명의 실시형태에 따른 메모리의 기억영역의 분할 상태를 설명하는 도면이다.
본 발명에서, 기억영역의 관리 대상이 되는 메모리는 로컬메모리 및 분산공유메모리이다. 이들 관리 대상인 메모리의 기억영역은 복수의 블럭(서브블럭 등도 포함)(101∼104)으로 분할되어 있다.
도 5에 로컬메모리의 기억영역을 분할한 블럭을 나타낸다. 블럭(101)은 로컬메모리의 기억영역이 2의 멱승분의 1(도시한 상태에서는 8분의 1)로 분할된 고정길이의 영역이다. 게다가, 블럭 4∼7은 블럭 사이즈의 절반인 서브블럭 8∼15(102)로 분할되어 있다. 또한, 서브 블럭 12∼15은 서브 블럭 사이즈의 절반인 서브서브블럭 24∼31(103)로 분할되어 있다. 그리고, 서브서브블럭 28∼31은 서브서브블럭 사이즈의 절반인 서브서브서브블럭 56∼63(104)으로 분할되어 있다.
블럭(101), 서브블럭(102), 서브서브블럭(103), 서브서브서브블럭(104)은 독립적으로 관리된다. 컴파일러는 메모리의 각 어드레스 공간에 임의 사이즈의 블럭을 설정할 수 있다. 컴파일러는 컴파일되는 프로그램에 따라 적절한 사이즈의 블럭 등을 설정한다. 즉, 큰 데이터를 취급하는 프로그램에서는 큰 사이즈의 블록을 준비하고, 작은 데이터를 취급하는 프로그램에서는 작은 사이즈의 블럭을 준비함으로써, 로컬메모리를 낭비 없이 그리고 효율적으로 사용할 수 있다.
또한, 블럭의 관리를 용이하게 하기 위해, 서브블럭 등도 기억영역의 선두 어드레스에서부터 통과번호를 부여한다. 이 때문에, 하나의 어드레스에 의해 표시 되는 영역이 복수의 블럭, 서브블럭에 포함된다. 예를 들면, 블럭 0, 서브블럭 0∼1, 서브서브블럭 0∼3, 및 서브서브서브블럭 0∼7은 동일한 메모리 공간(어드레스 0∼127)을 나타낸다. 이와 같이 복수 종류의 블럭을 메모리 공간의 동일 어드레스로 설정함으로써, 수시로 적절한 종류의 블럭 등을 사용하도록 메모리를 관리할 수 있다.
이와 같이 설정된 서브블럭의 사이즈는 블럭 사이즈의 1/2이며, 서브서브블럭의 사이즈는 블럭 사이즈의 1/4이고, 서브서브서브블럭의 사이즈는 블럭 사이즈의 1/8이 되도록 분할되어 있다. 즉, 메모리의 기억영역은 사이즈가 2의 멱승인 관계(인접하는 사이즈의 블럭과 2배의 관계)에 있는 복수 사이즈의 블럭으로 분할되며, 분할된 복수 사이즈의 블럭이 기억영역으로 제공된다.
또한, 블럭 사이즈는 컴파일러가 프로그램을 컴파일할 때에 취득한 프로그램의 정보에 의해 결정되므로, 프로그램 실행개시부터 종료까지 동안 변경되지 않는다. 그러나, 컴파일러가 다른 프로그램을 컴파일하면, 컴파일 대상인 프로그램의 특성에 적합하도록 블럭의 수 및 사이즈는 달라진다. 즉, 본 발명의 로컬메모리 기억영역의 관리단위가 되는 블럭은 완전히 고정된 사이즈가 아니라, 컴파일러가 프로그램을 해석한 정보에 기초하여, 프로그램에서 사용되는 데이터 사이즈에 가장 적합한 블럭 사이즈를 결정할 수 있다. 블럭 사이즈는 프로그램 내에서는 고정이지만, 프로그램마다 가장 적합한 블럭 사이즈를 선택한다.
또한, 프로그램 실행중에 블럭 사이즈를 바꿀 수도 있다. 구체적으로는 프로그램의 어느 단계까지는 큰 배열 데이터를 사용하였지만, 어떤 단계 이후에는 작 은 스칼라 데이터(1차원 변수)를 사용할 때에는 배열 데이터의 사용종료시에 블럭을 분할하여 서브블럭으로 할 수도 있다. 또한, 템플레이트의 할당을 바꿈으로써, 블럭에 로드되는 배열변수의 사이즈를 변경할 수 있다. 템플레이트의 블럭으로의 할당에 대해서는 후술한다.
본 발명에서는 하나의 로컬메모리 관리 매크로 태스크에서 사용되는 모든 데이터가 한 블럭에 저장될 수 있도록 블럭 사이즈가 결정된다. 바꾸어 말하면, 블럭 사이즈에 의해, 로컬메모리 관리 매크로 태스크의 사이즈가 결정된다. 또한, 결정된 블럭 사이즈에 데이터를 입출력하는 타이밍은, 그 후 매크로 태스크 실행 타이밍에 기초하여 스케쥴러에 의해 결정된다.
이와 같이 하여 로컬메모리의 기억영역을 복수 사이즈의 블럭으로 분할함으로써, 로컬메모리 관리 매크로 태스크에서 사용되는 데이터에 가장 적합한 사이즈의 블럭에, 필요한 데이터가 로드된다. 또한, 로컬메모리의 기억영역을 고정 사이즈의 영역에서 관리함으로써, 가변 사이즈의 영역에서 관리할 경우에 발생하는 단편화(fragmentation)의 문제를 회피할 수 있다.
도 4에 나타낸 분할한 루프의 예에서는 배열변수 A는 로컬메모리의 한 블럭에 수용된다. 또한, 배열변수 B는 한 개의 서브서브블럭에 수용된다. 바꾸어 말하면, 블럭 사이즈는 컴파일러에 의해 프로그램의 성질에 따라 결정된다. 보다 구체적으로는 배열변수 A가 로컬메모리의 한 블럭에 수용되도록 블럭 사이즈가 결정되어, 루프가 분할된다. 그리고, 통상적으로 블럭 사이즈는 컴파일 대상인 프로그램의 개시시로부터 종료시까지는 변경되지 않는다.
<데이터의 로드 및 저장>
다음으로, 블럭으로의 데이터 기입하기(로드), 읽어내기(저장) 및 블럭의 할당에 관하여 설명한다.
도 5에 나타낸 바와 같이 기억영역이 분할된 메모리에는 로컬메모리 관리 매크로 태스크에서 사용되는 데이터가 로드된다. 먼저, 스케쥴러는 데이터를 로드하는 메모리가 로컬메모리인지 분산공유메모리인지를 결정한다. 이 때, 복수의 프로세서 코어에 의해 공유되는 데이터는 분산공유메모리에 로드하면 된다.
이어서, 스케쥴러는 필요한 데이터가 이미 로드되어 있는 블럭이 있는 경우, 그 블럭에 로드되어 있는 데이터를 그대로 사용한다. 한편, 필요한 데이터가 어느 블럭에도 로드되어 있지 않은 경우, 비어 있는 블럭을 해당 로드되는 데이터에 할당하고, 할당된 블럭에 필요한 데이터를 로드한다. 게다가, 비어 있는 블럭이 없으면, 소거 우선도가 가장 높은 데이터를 로컬메모리(26)로부터 읽어내어, 집중공유메모리(28 또는 14)에 기입하고, 빈 블럭이 된 기억영역에 필요한 데이터를 로드한다.
도 6은 본 발명의 실시 형태에 따른 메모리의 소거 우선도를 설명하는 도면이며, 횡축에 시간 경과를 나타낸다.
본 발명의 실시 형태에서는 소거 우선도는 다음과 같은 순서로 결정된다.
1) 이후 액세스되지 않는 데이터.
2) 다른 프로세서에서 액세스되지만, 자기 프로세서에서는 액세스되지 않는 데이터.
3) 재차 자기 프로세서에서 사용되는데, 그 앞 시간에 사용되는 데이터.
4) 자기 프로세스에서 바로 사용되는 데이터.
이후 액세스되지 않는 데이터는 예를 들면, 새롭게 재계산되어 버린 변수이다. 이와 같이 이미 죽은 변수는 남겨둘 필요가 없기 때문에, 소거 우선도는 가장 높아진다. 다른 프로세서에서 액세스되지만, 앞으로 자기 프로세서에서 액세스되지 않는 데이터는 그 데이터를 필요로 하는 프로세서 코어(16)의 분산공유메모리(22)에 전송하면 되므로, 그 다음으로 소거 우선도가 높아진다. 다른 프로세스에서 액세스되는 데이터는 바로 분산공유메모리(22)로 전송하면 되는데, 다른 프로세서 코어(16)의 메모리 상황에 따라, 바로 전송할 수 없는 경우에는 약간 시간을 어긋나게 하고 나서 분산공유메모리(22)로 전송하거나, 집중공유메모리(28 또는 14)로 전송한다. 이와 같이 로컬메모리(26)로부터의 데이터의 전송 타이밍에 자유도를 갖게 하기 위해, 액세스되지 않는 데이터보다 소거 우선도를 낮게 설정하고 있다.
마지막으로, 재차 자기 프로세서에서 액세스되는 데이터에 대해서는 다음에 사용될 때까지의 시간에 따라 우선도를 결정한다. 그 데이터가 사용되는 시간이 먼저일수록 소거 우선도는 높고, 바로 머지않아 사용되는 데이터는 소거 우선도를 낮게 하고, 가능한 메모리에 로드되어 있는 대로 남아 있게 한다.
도 6을 참조하여 시간의 경과와 함께 메모리의 소거 우선도에 관하여 설명한다. 도 6에서는 현재, 프로세서 코어 0(PC0)에서 실행되고 있는 로컬메모리 관리 매크로 태스크에 있어서, 배열변수 A, B, C 및 D가 로컬메모리에 로드되어 있는 상 태를 생각한다(1001).
이 로컬메모리 관리 매크로 태스크에서는 처음, 프로세서 코어 0(PC0)에서 배열변수 A를 정의하고(Def A), 배열변수 A를 사용하고 있다(1002).
이어, 프로세서 코어 1(PC1)에서 다른 배열변수 A를 정의하였다(1003). 그러면, PC0의 로컬메모리에 로드되어 있는 배열변수 A는 이미 바뀌어 있으므로, 차후 액세스되는 일은 없다. 따라서, 소거 우선도가 최고위가 된다. 캐시의 코히런스 제어와 마찬가지로, 정합성이 확보되지 않는 데이터는 불필요한 데이터로 판단하면 되기 때문이다.
이어서, 나중에 실행될 매크로 태스크를 검토한다. 배열변수 B는 다른 프로세서(PC1)에서 사용된다(1004). 배열변수 C 및 D는 자기 프로세서(PC0)에서 사용된다(1005, 1006). 따라서, 배열변수 B의 소거 우선도는 배열변수 C 및 D의 소거 우선도보다 높아진다.
배열변수 C와 배열변수 D를 비교해 보면, 배열변수 D쪽이 배열변수 C보다 먼저 사용된다. 따라서, 배열변수 C의 소거 우선도는 배열변수 D의 소거 우선도보다 높아진다. 또한, 배열변수 C 및 D는 나중에 이용되므로, 집중공유메모리(CSM)에 일단 갱신(write-back)하여, 다음에 필요로 할 때에 로드하면 된다.
이 때문에, 소거 우선도는 A, B, C, D의 순서가 된다.
도 7은 본 발명의 실시형태에 따른 메모리에 로드되어 있는 변수의 추이를 설명하는 도면이다.
도 7은 한 개의 프로세서 코어 상에서, 2개의 로컬메모리 관리 매크로 태스 크(MT1, MT2)가 포함되는 프로그램이 한 개의 계층으로 실행될 경우에, 프로그램의 실행개시전의 메모리 상태를 매크로 태스크 1(MT1)의 실행 종료시의 메모리 상태, 매크로 태스크 2(MT2)의 실행개시시의 메모리 상태, 및 매크로 태스크 2(MT2)의 실행종료시의 메모리 상태를 나타낸다. 또한, 로컬메모리의 기억영역은 도 5에서 나타낸 바와 같이 분할되어 있다.
매크로 태스크 1(MT1)의 실행개시전에는 모든 메모리의 기억영역(블럭)은 빈 상태이다(1011). 그리고, 매크로 태스크 1의 개시시에는 매크로 태스크 1에서 필요로 되는 데이터(배열변수 A, B, C, D, E, F)에 블럭이 할당되며, 각 배열변수가 메모리에 로드된다. 그 후, 매크로 태스크 1에 의한 처리가 시작된다. 구체적으로는 선언문 def A에 의해 배열변수 A가 블럭 0으로 할당된다. 마찬가지로, 배열변수 B가 블럭 1로 할당되며, 배열변수 C가 블럭 2로 할당되고, 배열변수 D가 블럭 3으로 할당되며, 배열변수 E가 서브블럭 8로 할당되고, 배열변수 F가 서브블럭 9로 할당된다.
매크로 태스크 1의 실행종료시에는 각 배열변수가 블럭에 로드되어 있다(1012).
매크로 태스크 2(MT2)의 실행개시시에는 매크로 태스크 2에서 사용되는 모든 데이터가 메모리에 로드되어 있을 필요가 있다. 매크로 태스크 2에서는 배열변수 A, B, C, G, E, H, I 및 J가 사용되므로, 4개의 블럭 및 4개의 서브블럭이 필요하다. 필요한 배열변수 중, 배열변수 A, B, C 및 E는 이미 로컬메모리에 로드되어 있으므로, 매크로 태스크 2의 실행시에 새롭게 로드할 배열변수는 배열변수 G, H, I 및 J이다. 이들 중, 배열변수 H는 매크로 태스크 2의 실행개시전에 서브 블록 10에 프리로드되어 있다. 또한, 서브블럭 11은 비어 있다. 따라서, 매크로 태스크 2의 실행개시단계에서 한 개의 블럭 및 한 개의 서브블럭을 비게 할 필요가 있다.
따라서, 필요한 데이터를 로드할 블럭을 확보하기 위해, 소거 우선도에 따라 배열변수 D를 블럭 3으로부터 소거하고, 배열변수 F를 서브블럭 9로부터 소거한다. 이로써, 한 개의 빈 블럭 및 한 개의 빈 서브 블럭을 확보한다(1014).
이 때문에, 매크로 태스크 1의 실행종료 후 매크로 태스크 2의 실행전에는, 배열변수 D 및 F의 집중공유메모리로의 전송, 배열변수 H의 로컬메모리로의 전송이 필요로 된다(1013).
매크로 태스크 2의 실행개시전에, 배열변수 G가 블럭 3에 할당되며, 배열변수 I가 서브블럭 9에 할당되고, 배열변수 J가 서브블럭 11에 할당된다. 그 후, 매크로 태스크 2가 실행되며, 배열변수 G, I 및 J가 매크로 태스크 2에서 사용된다(1014).
이와 같이 상술한 우선도에 따라, 메모리로부터 데이터를 분산공유메모리 또는 집중공유메모리에 저장하므로, 종래의 LRU와는 달리, 메모리의 이용을 최적화할 수 있으며, 메모리간의 데이터 전송을 줄일 수 있다. 즉, 종래의 LRU에 따르면, 최근 사용되고 있지 않지만 바로 사용될지도 모르는 데이터도 메모리로부터 전송되어 버린다. 그러나, 본 발명과 같이 컴파일러가 취득한 정보에 의하면, 그 데이터가 다음에 사용될 타이밍을 알 수 있어, 메모리를 최적으로 사용할 수 있다.
<루프의 분할>
다음으로, 도 8 내지 도 11을 참조하여 루프의 분할수순의 구체예를 설명한다.
루프의 분할은 복수의 루프를 보고 정합 분할을 실시한다. 다중화된 루프에서 가장 넓게 액세스하는 범위를 해석하여, 글로벌 인덱스 레인지라 한다. 즉, 로컬메모리를 액세스하면 좋은 범위와, 인접 프로세서와 통신을 해야만 하는 범위가 있으므로, 데이터의 액세스 범위를 해석하여 이를 구분한다. 이 때문에, 프로그램의 구조를 해석하여, 타겟 루프 그룹(TLG)을 선택한다. 본 실시형태에서는 종래의 컴파일러에 의한 병렬적인 루프를 연속적으로 실행하기 위한 해석과 달리, 복수의 루프에 걸쳐 어떻게 메모리가 액세스되는 지를 해석한다.
여기에서, 2개의 루프가 정합한다라는 것은 이하의 모든 조건을 만족하는 것이다.
1) 각 루프가 Doall 루프, Reduction 루프, 및 루프 캐리드 데이터 의존(리커런스(recurrence))에 의한 Sequential 루프 중 어느 하나이다.
2) 루프간에 배열변수의 데이터 의존이 존재한다.
3) 각 루프의 루프제어변수가 동일배열의 동일 차원의 첨자식으로 사용되고 있으며, 차원의 배열첨자가 루프제어변수의 일차식으로 표시되어 있다.
4) 루프간에 데이터 의존을 인도하는 각 배열에 대해, 배열첨자 중 루프제어변수계수의 루프간 비율이 일정하다.
이 때, 선택되지 않은 단일 루프도 모두 타겟 루프 그룹으로 하고, 타겟 루 프 그룹의 네스팅을 허용하고, 간접참조를 포함하는 루프도 선택한다. 즉, 타겟 루프 그룹에 선택된 루프의 내측에도 루프가 존재하고 있던 경우, 내측의 루프에 대해서도 타겟 루프 그룹을 생성한다. 또한, 다른 루프와 정합이 불가능한 루프는 그 루프만으로 타겟 루프 그룹을 이룬다.
타겟 루프 그룹이란, 매크로 태스크 상에서 루프 정합 분할이 적용가능한 반복 블럭(RB)의 집합이며, 매크로 태스크 그래프 상에서 직접 데이터 의존 선행, 후속관계를 갖는 반복 블럭의 집합이다. 이는 실행시의 비용(메모리 및 프로세서 등의 리소스 소비)가 큰 반복 블럭과 그 반복 블럭에 직접 데이터 의존 선행, 후속 관계를 갖는 반복 블럭은 커다란 데이터를 취급하므로, 분할 효과가 높기 때문이다. 이로써, 루프간에 동일 데이터를 사용할 경우에, 동일 영역을 돌아가며 사용하여 캐시 미스를 방지할 수 있다.
구체적으로, 도 8에 나타낸 프로그램에서는 변수 i에 의한 2개의 루프가 TLG1이 되고, 각 TLG1 내의 변수 j에 의한 루프가 TLG1-1 및 TLG1-2가 된다. 또한, TLG1-1 내의 변수 k에 의한 루프가 TLG1-1-1이 되며, TLG1-2 내의 변수 k에 의한 루프가 TLG1-2-1이 된다.
이어서, 도 9에 나타낸 바와 같이 TLG 집합을 생성한다. TLG가 다음과 같은 생성조건의 모두를 만족할 경우, TLG 집합이 생성된다.
1) 적어도 하나 이상 공유배열을 갖는다(의존관계도 고려된다).
2) 공유배열의 정합 차원이 모두 일치한다.
3) 서브루틴에 걸쳐 있는 경우에는 공유배열의 형상이 일치한다.
이어서, 도 10에 나타낸 바와 같이, 분할후보 TLG 집합을 생성한다. 이는 네스팅이 된 TLG가 있는 경우, 비용이 최대인 TLG 집합을 선택하고, 선택된 TLG 집합을 분할후보로 한다. 그 후, 분할후보 TLG 집합마다 GIR을 계산한다. 이와 같이 하면, 프로그램 중의 모든 코드를 커버할 수 있다. 구체적으로는 TLG 집합 1이 분할후보 TLG 집합 1이 되며, GIR은 [1:10]이 된다.
이어, 분할기준영역을 결정한다. 분할기준영역은 각 TLG 집합에서 사용되는 데이터를 수용해야만 하는 기억영역이다. 구체적으로는 분할후보 TLG 집합에서 사용되는 데이터 사이즈의 비율을 계산한다. 여기서, 3개의 분할후보 TLG 집합이 있으며, 집합 1에서 사용되는 데이터 사이즈가 300k, 집합 2에서 사용되는 데이터 사이즈가 200k, 집합 3에서 사용되는 데이터 사이즈가 100k이면, 데이터 사이즈의 비율은 3:2:1이 된다.
이 비율에 기초하여, 최소메모리영역(로컬메모리와 분산공유메모리 중 용량이 작은 것)을 각 분할후보 TLG 집합에 할당한다. 구체적으로는 분할후보 TLG 집합에서 사용되는 데이터가 최소메모리영역보다도 작은 영역에 수용되도록, 분할후보 TLG 집합을 분할한다. 또한, 실제로는 이 때에 할당된 영역 이외의 영역에도 분할후보 TLG 집합에서 사용되는 데이터를 로드할 수 있는데, 분할용 기준으로서 이와 같은 처리를 한다.
이로써, 분할 후의 각 분할후보 TLG 집합에서 사용되는 데이터를 동시에 로컬메모리에 로드하는 것이 가능하게 된다. 또한, 실제로 데이터를 메모리에 로드할 것인지는 스케쥴링 및 메모리 관리 루틴에 의해 결정된다.
이어서, 블럭 사이즈를 결정한다.
먼저, 비용이 가장 큰 분할후보 TLG 집합을 블럭 사이즈를 결정하는 기준으로 삼는다. 단, 다중분할이 필요하게 된 경우, 분할후보 TLG 집합에는 최대 분할수가 채용된다. 여기서, 최대 분할수란 할당되는 프로세서 그룹(PG) 내의 프로세서 코어(PC)의 구성과, 병렬처리에 의한 오버헤드를 고려한 경우의 최대 분할수이다. CPU의 수가 하나인 경우, 최대 분할수는 루프의 이터레이션 수이다. 이후, 다중분할이 필요하게 된 TLG 집합은 분할후보 TLG 집합으로 선택하지 않는다. 그리고, 다시 분할후보 TLG 집합을 생성한다.
구체적으로는 도 11에 나타낸 바와 같이, TLG 집합 1은 최대 분할수로 분할되므로, 다음의 TLG 집합 2가 분할후보 TLG로 선택된다. 분할후보로 된 TLG 집합 2는 GIR이 [1:20]이다.
이어서, 블럭 사이즈의 결정 수순에 관하여 설명한다.
먼저, 블럭 사이즈 결정전 처리를 실행한다. 기준이 되는 분할후보 TLG 집합에서 액세스하는 데이터가, 분할기준영역보다도 작은 사이즈가 되는 분할수를 계산한다. 여기에서는 액세스되는 데이터의 사이즈만을 생각하여, 간접적으로 참조되는 데이터의 액세스에 대해서는 고려하지 않는다. 분할수는 프로세서 그룹 수의 정수배가 되도록 선택한다. 구해진 분할수로 TLG 집합 내의 각 루프의 분할을 시행한다.
구체적으로는 최외측 루프(i의 루프)에서 4분할을 시행한다. 액세스되는 배열변수 A 및 B의 사이즈는 [k, j, i] = [1:30, 1:20, 1:3]이다. 총 데이터 사이즈 는 30ㅧ20ㅧ3ㅧ2=3600이 된다.
이어서, 블럭 사이즈를 결정한다.
분할 후의 배열 액세스 범위에 기초하여, TLG 집합 중의 모든 로컬 배열의 템플레이트를 작성하고, 작성된 템플레이트의 크기를 임시 블럭 사이즈로 한다. 템플레이트의 작성에 대한 상세한 설명은 후술한다. 여기에서도, 간접적으로 참조되는 배열데이터의 액세스에 대해 고려하지 않는다. 템플레이트의 작성에 실패한 경우, 분할수를 크게 하여, 블럭 사이즈 결정전 처리부터 다시 한다.
결정된 임시 블럭 사이즈를 이용하여, 분할기준영역에 할당할 수 있을 것인지를 판정한다. 이 단계에서는 데이터를 간접적으로 참조하고 있는 경우에는 그 차원에 대해서는 배열의 선언 사이즈를 이용하여 판정한다. 간접적으로 참조되고 있는 배열이 블럭에 수용되지 않은 경우, 공유 메모리에 두는 것을 결정할 수도 있다.
TLG 집합에서 사용되는 데이터를 임시 블럭 사이즈로 할당할 수 있는 경우, 템플레이트를 작성했을 때의 분할수를 채용한다(즉, 추가로 분할은 하지 않는다). 그리고, 임시 블럭 사이즈를 블럭 사이즈로 결정한다.
한편, TLG 집합에서 사용되는 데이터를 임시 블럭 사이즈로 할당할 수 없는 경우, 분할수를 크게 하여 블럭 사이즈 결정전 처리부터 다시 한다. 또한, 최대분할수로도 할당할 수 없었던 경우 최대 분할수를 채택하고, 이후 할당할 수 없었던 TLG 집합은 분할후보 TLG 집합으로 선택하지 않는다. 그리고, 다시 분할후보 TLG 집합을 생성한다.
이어서, 분할수를 결정한다.
분할후보 TLG 집합마다, 앞서 결정된 블럭 사이즈에 기초하여, 분할기준영역 결정에서 결정한 영역 중에 몇 개의 블럭을 확보할 수 있을 것인지를 계산하고, 할당가능한 분할수를 구한다. 그 결과, 어느 한 분할후보 TLG 집합의 할당에 실패한 경우, 다시 분할후보 TLG 집합을 생성한다.
그 때, 할당할 수 없었던 분할후보 TLG 집합은 최대 분할수를 채용하고, 이후 할당할 수 없었던 TLG 집합은 분할후보 TLG 집합으로 선택하지 않고, 블럭 사이즈는 다시 계산하지 않는다. 이미, 분할수가 결정된 분할후보 TLG 집합의 데이터 사이즈를 로컬메모리의 사이즈로부터 감소시켜, 아직 남아 있는 분할후보 TLG 집합의 데이터 사이즈 비율에 기초하여 다시 TLG 집합을 할당한다. 그리고, 분할수가 결정된 분할후보 TLG 집합 내에 있는 각 루프를 로컬메모리 관리 매크로 태스크 후보로 한다.
구체적으로는 TLG 집합 1에서 사용되는 데이터 사이즈가 300k, TLG 집합 2에서 사용되는 데이터 사이즈가 200k, TLG 집합 3에서 사용되는 데이터 사이즈가 100k인 예를 생각한다. TLG 집합 1을 기준으로 블럭 사이즈를 결정할 수 있었던 것으로 한다. TLG 집합 2을 최대 분할수로도 할당에 실패한 경우, TLG 집합 2 중에 TLG 집합 4, TLG 집합 5 및 TLG 집합 6이 있었던 경우, 이들이 다음의 분할후보 TLG 집합에 추가된다.
모든 데이터를 로컬메모리에 배치할 수 있는 루프의 분할수가 결정된 경우, 어떤 데이터가 어떤 패턴으로 액세스되는지, 및 어떤 데이터가 어떤 크기의 블럭 등을 사용한다고 가정하고 분할한 것인지에 관한 정보를, 데이터를 로컬메모리에 할당할 때를 위해 기억해 둔다.
이어서, 매크로 태스크의 분할, 루프의 재구축을 수행한다. 여기서 행해지는 처리는 매크로 태스크의 분할, 루프 디스트리뷰션, 루프 퓨젼 및 루프의 재구축이다.
여기서, 루프 디스트리뷰션(Loop distribution)이란 구체적으로는 도 14 및 도 15에서 후술하겠지만, 다중분할을 수행했을 때에 데이터를 돌아가며 사용하기 위한 처리이다. 루프 퓨젼(Loop fusion)이란 레지스터를 돌아가며 사용하기 위한 처리이다.
그리고, 루프의 재구축(Loop restructuring) 후, 외측 계층의 루프로부터 순서대로 분할수가 설정되어 있는 매크로 태스크를 찾아, 발견한 매크로 태스크를 로컬메모리 관리 매크로 태스크로 한다. 로컬메모리 관리 매크로 태스크로 설정된 매크로 태스크의 내측에서는 매크로 태스크의 탐색을 수행하지 않는다.
<템플레이트의 작성>
다음으로, 템플레이트의 작성 수순에 관하여 설명한다.
본 실시형태에 있어서, 템플레이트란 배열변수를 로컬메모리에 할당하는 단위이다. 컴파일러는 프로그램이 데이터에 액세스하는 패턴에 따라 템플레이트를 준비한다. 제공되는 템플레이트의 사이즈는 블럭 또는 서브블럭의 사이즈와 동일하다. 또한, 템플레이트는 차원마다(1차원 배열, 2차원 배열, 3차원 배열, …) 준비되며, 프로그램에 의해 액세스되는 사이즈 이상의 크기이다.
블럭을 이용하여 로컬메모리를 관리하는 경우에, 동일 어드레스 영역의 블럭에 다양한 데이터(형상, 차원이 다른 배열 등)를 로드할 필요가 있다. 즉, 데이터의 사이즈가 블럭에 수용되는 것이더라도, 1차원으로 선언되어 있는 스칼라 변수이거나, 2차원, 3차원의 배열변수인 경우가 있다. 또한, 동일 차원의 데이터이더라도 각 차원의 사이즈가 다른 데이터인 경우도 있다. 이들을 동일한 어드레스 공간의 블럭에 로드하기 위해, 모든 데이터를 1차원의 데이터로 변환하여 메모리 어드레스와 일치시킬 수도 있다. 그러나, 배열변수의 경우 첨자 변환이 필요하게 되어, 사용자가 쓴 프로그램과 다른 것이 된다. 이와 같은 첨자 변환을 하면, 프로그램이 이해하기 어렵게 되며, 디버그도 곤란하게 되고, 병렬성의 해석이 이해하기 어렵게 된다.
때문에, 프로그램의 가독성을 유지한 채, 로컬메모리를 관리하기 위해 블럭 등의 사이즈와 동일 사이즈의 템플레이트를 이용한다. 템플레이트란 배열변수가 저장되는 템플레이트이다. 템플레이트에 필요한 데이터를 저장함으로써, 로컬메모리 상의 임의의 블럭에 데이터를 로드하는 것을 실현한다.
템플레이트는 이하의 수순에 따라 작성된다.
먼저, TLG 집합 내의 모든 배열에 대해, 각 차원의 액세스 사이즈보다도 크고 또한 가장 작은 2의 멱승의 수를 구한다. 그리고, 각 차원이 구해진 크기의 임시 템플레이트를 작성한다.
상술한 예에서는 최외측 변수 i의 루프에서 4분할을 시행한다. 예를 들면 i=1∼3, 4∼6, 7∼8, 9∼10의 4개의 루프로 분할하면, 3회전의 2개의 루프, 2회전 의 2개의 루프가 생성된다. 분할된 루프 내에서의 배열변수 A 및 B의 액세스 사이즈는 모두 [k, j, i]=[1:30, 1:20, 1:3]이다. 또한, 3차원째는 루프의 회전수 중 큰 쪽을 선택하여 3회전으로 한다.
이어서, 임시 템플레이트의 크기를 계산한다. 템플레이트의 각 차원은 배열변수의 각 차원의 사이즈보다 큰 2의 멱승의 수로 하고 있으므로, 템플레이트 사이즈는 32ㅧ32ㅧ4=4k 요소가 된다. 그리고, 가장 큰 임시 템플레이트의 사이즈를 블럭 사이즈로 한다. 상술한 예에서는 블럭 사이즈는 4k 요소가 된다.
그 후, 분할기준영역 사이즈를 블럭 사이즈로 나눗셈하여 몫을 구한다(분할기준영역 사이즈/블럭 사이즈). 이 구해진 몫이 1이상인 경우에는 나눗셈에 의해 구해진 몫의 소수점 이하를 버림으로써, 준비가능한 블럭의 수(Block_num)를 구한다. 한편, 구해진 몫이 1미만인 경우에는 이 템플레이트 사이즈에서는 하나도 블럭을 작성할 수 없으므로, 템플레이트의 작성이 실패했다고 판단한다.
또한, 블럭 사이즈를 각 템플레이트의 사이즈로 나눗셈(블럭 사이즈/각 템플레이트의 사이즈)하고, 그 몫을 서브블럭의 수로 한다.
상술한 예에서는 분할되는 로컬메모리의 영역이 12k 요소분이므로, 준비가능한 블럭 수는 12k/4k=3개로 구해진다. 최종적으로, 4k요소의 사이즈인 3개의 템플레이트 [1:32, 1:32, 1:4, 0:2]가 마련된다. 템플레이트 사이즈 및 템플레이트 수가 결정되었으므로, 루프의 분할수는 4로 확정한다.
즉, 이 처리에서는 프로그램 전체를 보고 최적의 블럭 사이즈를 결정한다. 이 때문에, 매크로 태스크에서 사용되는 데이터(워킹세트)를 로컬메모리에 로드하 기 위한 프로그램의 분할수를 결정한다. 그리고, 분할된 데이터 사이즈보다도 큰 블럭 사이즈가 되도록 분할수를 선택한다.
<로컬메모리 관리 매크로 태스크의 결정예 1>
다음으로, 도 12 내지 도 13을 참조하여 블럭 사이즈의 결정수순의 다른 구체예에 관하여 설명한다.
블럭 사이즈를 결정하기 위해서는 먼저 루프 내에서 액세스되는 데이터를 해석하여 2의 멱승 크기인 템플레이트를 만든다.
이 예에서는 로컬메모리의 사이즈(플래그 영역은 제외)가 2kB이고, 각 배열요소의 사이즈는 4B/요소로 가정하고, 분산공유메모리의 존재는 생각하지 않는다.
먼저, 최외측 루프를 최대 분할수로 분할한 경우를 생각해 보자.
도 12에 나타낸 바와 같이, 변수 i에 의한 최외측 루프 1020, 루프 1020 중의 변수 j에 의한 내측 루프 1021, 및 루프 1021 중의 변수 k에 의한 최내측 루프 1022가 있는 3중 로프 구조로 되어 있다.
구체적으로는 루프의 분할을 고려하지 않을 경우, 최내측 루프 1022에서 사용되는 배열변수 A, B 및 C의 사이즈는 [k, j, i]=[1:10, 1:10, 1:10]이다. 상술한 수순에 의해 임시 템플레이트를 작성한다. 작성된 임시 템플레이트의 사이즈는 [k, j, i]=[1:16, 1:16, 1:16]이 된다. 이 임시 템플레이트에 필요한 블럭 사이즈는 16ㅧ16ㅧ16ㅧ4=16kB이다. 로컬메모리의 사이즈는 2kB이므로, 하나도 블럭을 준비할 수 없다. 따라서, 최외측 루프 1020를 분할하는 것을 생각해 보자.
도 13에 나타낸 바와 같이, 최외측 루프(변수 I) 1020를 최대 분할수로 분 할(10분할)한다. 최대 분할수는 루프의 이터레이션수이다. 또한, 외측 루프는 한계까지 분할하여도 필요한 블럭수를 확보할 수 없는 경우에, 내측 루프를 분할하는 것이 바람직하다.
이 경우, 최내측 루프 1022에서 사용되는 배열변수 A, B 및 C의 사이즈는 [k, j, i]=[1:10, 1:10, 1:1]이다. 상술한 수순에 의해 작성되는 임시 템플레이트의 사이즈는 [k, j, i]=[1:16, 1:16, 1:1]이 된다. 이 임시 템플레이트에 필요한 블럭 사이즈는 16ㅧ16ㅧ1ㅧ4=1kB이다. 로컬메모리의 사이즈는 2kB이므로, 준비가능한 블럭수는 분할기준영역 사이즈(2kB)/블럭 사이즈(1kB)=2개가 된다. 이 루프에서는 3개의 배열변수를 사용하므로, 이 상태에서는 필요한 블럭을 확보할 수 없다. 따라서, 내측 루프 1021를 분할하는 것을 생각해 보자.
내측 루프 1021를 2분할(2등분)한 경우, 최내측 루프 1022에서 사용되는 배열변수 A, B 및 C의 사이즈는 [k, j, i]=[1:10, 1:5, 1:1]이다. 상술한 수순에 의해 작성되는 임시 템플레이트의 사이즈는 [k, j, i]=[1:16, 1:8, 1:1]이 된다. 이 임시 템플레이트에 필요한 블럭 사이즈는 16ㅧ8ㅧ1ㅧ4=512B이다. 로컬메모리의 사이즈는 2kB이므로, 분할기준영역 사이즈(2kB)/블럭 사이즈(512B)에 의해 준비가능한 블럭 수를 구하면, 준비가능한 블럭은 4개가 된다.
따라서, 이 루프에서 사용되는 3개의 배열변수가 할당되는 블럭을 확보할 수 있으므로, 블럭의 사이즈 및 개수가 결정된다. 작성되는 템플레이트는 [1:16, 1:8, 1:1, 0:3]이 된다.
그리고, 내측 루프 1021를 j=1:5와 j=6:10으로 나눈 루프가 로컬메모리 관리 매크로 태스크가 된다.
루프 1030, 1031도 마찬가지로 분할한다.
이와 같이 외측 루프의 분할에 실패한 경우, 내측(다른 차원)의 루프에서도 분할(다차원 분할)함으로써, 로컬메모리의 사이즈에 적합한 로컬메모리 관리 매크로 태스크를 결정할 수 있다.
<로컬메모리 관리 매크로 태스크의 결정예 2 >
다음으로, 도 14 내지 도 15를 참조하여, 로컬메모리 관리 매크로 태스크의 생성의 다른 구체예를 설명한다.
이 예에서도, 상술한 예와 마찬가지로 로컬메모리의 사이즈(플래그 영역은 제외)가 2kB이고, 각 배열요소의 사이즈는 4B/요소로 가정하며, 분산공유메모리의 존재는 고려하지 않는다.
이 프로그램은 도 14에 나타낸 바와 같이, 변수 i, j, k에 의한 3중 루프를 갖는다. 변수 i에 의한 최외측 루프 1041 내에, 내측 루프 1042(j=1:10) 및 내측 루프 1043(j=11:20)이 포함되어 있다. 마찬가지로, 변수 i에 의한 최외측 루프 1051 내에, 내측 루프 1052(j=1:10) 및 내측 루프 1053(j=11:20)이 포함되어 있다.
루프 1051은 루프 1041 후에 실행되며, 또한 루프 1042와 루프 1052는 같은 데이터(배열변수 A [1:30, 1:10, 1:1] 및 배열변수 B [1:30, 1:10, 1:1])를 사용하고, 루프 1043과 루프 1053은 동일 데이터(배열변수 A [1:30, 11:20, 1:1] 및 배열변수 B [1:30, 11:20, 1:1])를 사용한다.
그러나, 이 프로그램에서는 루프 1042, 루프 1043, 루프 1052, 루프 1053의 순서로 실행되기 때문에, 같은 데이터를 로컬메모리 상에 로드한 채 돌아가며 사용할 수 없다. 때문에, 도 15에 나타낸 바와 같이, 최외측 루프 1041를 내측 루프 1042(j=1:10)와 내측 루프 1043(j=11:20)으로 분할한다. 마찬가지로, 최외측 루프 1051을 내측 루프 1052(j=1:10)와 내측 루프 1053(j=11:20)으로 분할한다.
이 분할에 의해, 분할된 최외측 루프 1041A와 최외측 루프 1051A를 순서대로 실행할 수 있다(즉, 내측 루프 1042와 내측 루프 1052가 순서대로 실행된다). 이 때문에, 루프 1042에서 사용한 배열 데이터를 그대로 루프 1052에서 사용할 수 있다. 즉, 루프 1041A의 실행종료시와 루프 1051A의 실행개시시와의 사이에서 데이터(배열변수)의 전송이 발생하지 않는다.
마찬가지로, 분할된 최외측 루프 1041B와 최외측 루프 1051B를 순서대로 실행할 수 있다(즉, 내측 루프 1043과 내측 루프 1053이 순서대로 실행된다). 이 때문에, 루프 1043에서 사용한 배열 데이터를 그대로 루프 1053에서 사용할 수 있다. 즉, 루프 1041B의 실행종료시와 루프 1051B의 실행개시시와의 사이에서 데이터(배열변수)의 전송이 발생하지 않는다.
이와 같이, 프로그램의 실행 순서와 그 프로그램에서 사용되는 데이터가 정합하지 않을 경우, 루프의 디스트리뷰션을 실행하여, 동일한 데이터를 취급하는 루프를 연속적으로 실행하도록 한다. 이로써, 루프의 실행시에 데이터 전송이 발생하지 않도록 할 수 있다.
<템플레이트의 작성수순의 예>
도 16은 본 발명의 실시형태에 따른 템플레이트의 작성수순의 예를 나타낸 다.
템플레이트는 로컬메모리를 매크로 태스크상에서 취급하기 때문에, 로컬메모리에 배열변수를 할당하는 단위이다.
템플레이트는 1차원 배열, 2차원 배열, 3차원 배열 … 등이 준비되며, 그 형태는 매크로 태스크에서 사용되는 배열변수에 따라 다양하다. 예를 들면, 2차원 배열을 생각하면, 배열변수의 각 첨자의 최대값이 동등한 정사각형이나, 첨자의 최대값이 다른 직사각형(세로길이, 가로길이)이, 매크로 태스크에서 사용되는 배열변수의 크기에 맞도록 준비된다.
템플레이트의 사이즈는 로컬메모리 관리 매크로 태스크에서 사용되는 데이터의 사이즈보다 커진다. 또한, 템플레이트의 각 차원의 첨자의 최대값은 로컬메모리 관리 매크로 태스크에서 사용되는 배열변수의 각 차원의 첨자의 최대값보다 크고, 또한 가장 작은 2의 멱승의 수가 선택된다. 이 때문에, 템플레이트는 그 형태가 바뀌더라도, 그 크기는 블럭 및 서브블럭 등의 어느 한 사이즈와 동등하다.
따라서, 템플레이트의 사이즈는 블럭 사이즈와 동일하거나 또는 블럭 사이즈의 2의 멱승분의 1이 된다. 이로써, 데이터가 수용되는 최소 크기의 템플레이트를 작성하고, 이 작성된 템플레이트에 데이트가 수용되도록 프로그램(루프)을 분할한다. 그리고, 배열변수를 로컬메모리에 할당할 때에, 동일 사이즈의 블럭 등에 할당할 수 있으며, 로컬메모리의 기억용량을 낭비 없이 사용할 수 있다.
할당된 템플레이트를 사용함으로써, 블럭 0에 할당된 템플레이트는 블럭 0의 메모리 공간을 사용하고, 블럭 1에 할당된 템플레이트는 블럭 1의 메모리 공간을 사용한다.
템플레이트는 동일한 형태의 것을 블럭 수만큼 준비한다. 그리고, 블럭 번호에 따라 사용하는 템플레이트 배열을 바꾼다. 그 때문에, 준비되는 템플레이트는 동일한 템플레이트를 복수개 늘어놓은 형태(데이터를 로드하여 사용하는 배열변수의 차원 + 1차원)가 실제로 작성되는 템플레이트가 된다. 새롭게 작성된 차원은 블럭 지정용 차원이 되며, 요소수는 블럭의 수가 된다.
즉, 템플레이트의 차원은 배열변수의 차원보다 1차원 크게 되어 있다. 이는 템플레이트의 추가된 차원의 첨자 값에 의해, 복수의 배열변수를 전환하고, 액세스할 블럭을 바꾸기 때문이다. 또한, 각 템플레이트는 로컬메모리의 다른 블럭(다른 어드레스)에 할당된다. 배열변수의 형상 및 크기가 동일한 경우, 동일한 템플레이트를 사용할 수 있다. 예를 들면, 균등하게 분할된 루프는 동일한 형태 및 크기의 배열변수를 사용하기 때문에, 이와 같은 템플레이트를 준비하는 것이 유효하다.
예를 들면, 블럭 수가 8개이고 그 각각의 사이즈가 [1:2, 1:16, 1:4]인 경우, tempA[1:2, 1:16, 1:4, 0:7]의 템플레이트를 로컬메모리에 할당한다. 또한, 이 때 프로그램 중에 나타나는 배열변수가 5개이었던 경우에는, tempA[1:2, 1:16, 1:4, 0:4]로 하여 블럭 0 내지 4만으로 템플레이트를 할당한다. 다른 블럭은 또다시 분할하여 서브블럭으로서 이용할 수도 있다.
도 17에 템플레이트가 맵핑된 로컬메모리의 상태를 나타낸다.
템플레이트의 맵핑에는 예를 들면 FORTRAN에서는 EQUIVALENCE문이 사용된다. 구체적으로는 EQIVALENCE(LM(1), tempA(1,1,1,0))로 선언함으로써, 로컬메모리의 블럭 0에 템플레이트 A를 할당할 수 있다.
템플레이트 A는 3차원 배열용의 템플레이트이며, 각 차원은 tempA[1:2, 1:16, 1:4, 0:7]이다. 따라서, 블럭 0(어드레스 0∼127)에는 tempA[1,1,1,0]가 할당되며, 블럭 1(어드레스 128∼255)에는 tempA[1,1,1,1]가 할당된다.
즉, 상술한 바와 같이 템플레이트의 최외측의 4차원째는 템플레이트 자체의 차원이 아니라, 템플레이트가 할당되는 블럭 번호를 나타낸다.
더욱 구체적으로 예시하면,
do dim3 = 1, 4
do dim2 = 1, 16
do dim1 = 1, 2
tempA(dim1, dim2, dim3, 2) = GA(dim1, dim2, dim3)
enddo
enddo
enddo
를 실행함으로써, 배열변수 GA의 데이터가 로컬메모리의 블럭 2에 저장된다.
도 18에 다른 템플레이트가 맵핑된 로컬메모리의 상태를 나타낸다.
상술한 예와 달리, 프로그램 중에 나타나는 배열 사이즈가 [1:2, 1:8. 1:4]인 경우, 서브블럭 사이즈에 적합한 템플레이트 temp_subA[1:2, 1:8, 1:4, 0:15]를 로컬 메모리에 할당할 수 있다. 이와 같이 최외측의 요소의 값에 의해 액세스하는 서브블럭이 가변으로 된다.
상술한 바와 마찬가지로 EQUIVALENCE문을 사용하여, EQIVALENCE(LM(1), temp_subA(1,1,1,0))으로 선언함으로써, 로컬메모리의 서브블럭 0에 템플레이트(서브) A를 할당할 수 있다.
템플레이트 A는 3차원 배열용 템플레이트이며, 그 크기는 temp_subA[1:2, 1:8, 1:4, 0:15]이다. 따라서, 서브블럭 0(어드레스 0∼63)에는 temp_subA[1,1,1,0]이 할당되고, 서브블럭 1(어드레스 64∼127)에는 temp_subA[1,1,1,1]이 할당된다.
더욱 구체적으로 예시하면,
do dim3 = 1, 4
do dim2 = 1, 8
do dim1 = 1, 2
temp_subA(dim1, dim2, dim3, 4) = GA(dim1, dim2, dim3)
enddo
enddo
enddo
를 실행함으로써, 배열변수 GA의 데이터가 로컬메모리의 블럭 4에 저장된다.
이와 같이, 컴파일러가 프로그램을 해석하여 취득한 정보에 기초하여, 프로그램 중에서 사용되는 배열변수의 형태를 특정하여 템플레이트를 작성하고, 그 변수를 어떠한 템플레이트에 할당할 것인지를 결정한다. 이로써, 메모리의 1차원 어드레스 공간을 다차원으로 보이게 할 수 있으며, 프로그램 중에서 사용된 다차원 배열을 그대로의 형태로 메모리에 할당할 수 있다.
<템플레이트 배열을 사용한 코드 이미지의 작성>
다음으로, 도 19 내지 도 34를 참조하여, 템플레이트 배열을 사용한 코드 이미지 작성의 구체예에 관하여 설명한다. 도 19 내지 도 34의 설명은 로컬메모리 사이즈를 1024로 하며, 블럭 사이즈는 128로 하고, 로컬메모리의 영역을 4개의 블럭(101), 4개의 서브블럭(102), 4개의 서브서브블럭(103), 8개의 서브서브서브블럭(104)으로 분할한 경우에, 컴파일러가 코드를 고쳐쓰는 모습 및 프로그램 실행시의 로컬메모리의 상태를 나타낸다.
도 19는 컴파일 전의 오리지널 코드 및 로컬메모리의 상태(상태 1)를 나타낸다. 이 오리지널 코드 중에는 3개의 루프 및 2개의 서브루틴 호출이 포함되어 있으며, 이들 루프 및 서브루틴 호출이 로컬메모리 관리 매크로 태스크가 된다.
도 20은 템플레이트가 블럭 등으로 설정되는 상태(상태 2)를 나타낸다. LM 영역 및 템플레이트 배열을 정의하여, EQUIVALENCE문에 의해 템플레이트를 로컬메모리의 어드레스 공간에 할당한다. 이 할당에 의해, 로컬메모리와 템플레이트는 동일한 영역을 가리킨다. 그리고, 템플레이트의 첨자(0∼7)를 바꿈으로써 대응하는 영역이 바뀐다. 또한, 템플레이트 배열에 의해 선언되는데, temp1(1, 4) 이후에는 서브블럭 등에 할당된 영역이므로, 블럭으로서는 사용되지 않는다.
구체적으로는 이하의 문장이 프로그램에 삽입된다.
Integer a(128), b(128), c(128), d(128), e(128)
Integer LM(1024)
Integer temp1(128, 0:7)
EQUIVALENCE(LM, temp1)
이로써, 템플레이트가 로컬메모리에 할당된다.
도 21은 템플레이트 배열로 변환되는 상태(상태 3)를 나타낸다. 로컬메모리에 로드하여 사용하고 싶은 배열을, 새롭게 정의한 템플레이트 배열로 변환한다. 오리지널 코드 중의 배열을 템플레이트 배열로 함으로써, 로컬메모리를 사용하고 있는 것으로 된다. 블럭을 지정하는 차원의 값(첨자)을 바꿈으로써, 사용되는 블럭(로컬메모리의 어드레스)을 바꿀 수 있다.
구체적으로는 오리지널 코드 중의 배열명 a(i), b(i), c(i)는 temp1(i, 0), temp1(i,1), temp1(i,2)로 바꿔쓰여진다.
도 22는 블럭으로부터 데이터가 소거되는 상태(상태 4)를 나타낸다. 2번째의 매크로 태스크에서는 4개의 배열 b, c, d 및 e를 사용하기 때문에, 4개의 블럭이 필요하다. 첫번째 매크로 태스크가 종료된 시점에서, 다음에 실행될 매크로 태스크에서 필요한 블럭 수가 비어 있지 않은 경우, 소거 우선도에 따라 필요한 수의 블럭을 비우게 한다. 구체적으로는 3개의 배열 a, b 및 c가 로컬메모리 상에 로드되어 있는데, 배열 b 및 c는 계속해서 사용된다. 따라서, 배열 e를 로드하기 위해, 배열 a가 소거된다. 소거되는 블럭에 저장되어 있던 데이터는 집중공유메모리(28 또는 14)에 전송된다. 따라서, 템플레이트 배열에 저장된 데이터를 집중공유메모리(28 또는 14)의 배열로 전송할 명령이 오리지널 코드에 삽입된다.
도 23은 템플레이트 배열로 변환되는 상태(상태 5)를 나타낸다. 상태 3(도 21)에 나타낸 상태와 마찬가지로, 로컬메모리에 로드하여 사용하고 싶은 배열을, 새롭게 정의한 템플레이트 배열로 변환한다. 블럭 0으로부터 배열 a가 소거되고, 배열 d가 저장되어 있다.
도 24는 서브루틴이 해석되는 상태(상태 6)를 나타낸다. 서브루틴의 인수와, 서브루틴 내의 처리에 필요한 블럭 수를 해석한다. 도시하는 예에서는 서브루틴 sub1에서는 인수배열 x 및 자동변수인 배열 y를 사용하고 있다. 즉, 인수용으로 1개의 블럭과 내부처리용으로 1개의 블록, 즉 총 2개의 블럭이 필요하다.
도 25는 서브루틴 내에서 블럭 지정 변수를 사용한 템플레이트 배열로 변환되는 상태(상태 7)를 나타낸다. 여기에서, 상술한 바와 같이 서브루틴은 복수 부위로부터 호출될 가능성이 있기 때문에, 템플레이트 배열의 블럭 지정 차원을 상수에 의해 지정하면, 메모리 관리상의 제한이 강해진다. 그 때문에, 블럭 지정 변수 block_no1을 사용하여, 템플레이트를 임의의 장소에 둘 수 있도록 템플레이트 배열을 변환한다.
도 26은 서브루틴 처리용의 블럭을 확보하는 상태(상태 8)를 나타낸다. 이미 서브루틴 내의 해석이 종료되고, 서브루틴에서 필요한 블럭수를 알고 있으므로, 필요한 수의 블럭을 서브루틴 호출시에 비우게 하여, 서브루틴 처리용의 블럭을 확보한다. 필요한 수의 블럭이 비어 있지 않은 경우에는 이미 로드되어 있는 데이터를 소거한다. 소거될 데이터는 소거 우선도에 따라 결정된다.
구체적으로는 이 서브루틴에서는 1개의 인수 블럭 및 1개의 내부처리용 블럭이 필요하다. 메모리 상에 배열 b, c, d 및 e가 로드되어 있는데, 배열 e는 인수 로서 사용된다. 따라서, 1개의 블럭을 내부처리용으로 비우게 할 필요가 있다. 소거 우선도를 고려하면, 배열 c 및 d는 바로 사용되기 때문에, 배열 b가 소거된다.
도 27은 블럭 지정 변수가 설정되는 상태(상태 9)를 나타낸다. 서브루틴 내에서 사용되는 내부처리용의 배열은 블럭 지정 변수 block_no1에 의해 임의의 블럭을 사용할 수 있다. 이 때문에, 내부처리용의 배열 변수에 할당되는 블럭 번호를 지정 변수로 설정한다.
도 28은 서브루틴이 실행되는 상태(상태 10)를 나타낸다. 서브루틴 호출시에 설정된 블럭 지정 변수에 의해, 사용될 블럭이 결정된다. 즉, 블럭 1은 내부처리용의 배열 y에 할당되며, 블럭 3은 인수용의 배열 x에 할당된다. 서브루틴에서는 지정된 블럭을 사용하여 서브루틴의 처리가 행해진다.
도 29는 서브루틴의 실행종료시의 상태(상태 11)를 나타낸다. 서브루틴의 처리가 종료되면, 내부처리용 블럭은 NULL이 된다. 인수용 블럭은 인수로서 수취한 원래의 배열로 되돌아간다.
도 30은 템플레이트 배열로 변환되는 상태(상태 12)를 나타낸다. 상태 3(도 21) 및 상태 5(도 23)에 나타낸 상태와 마찬가지로, 로컬메모리에 로드하여 사용하고 싶은 배열을, 새롭게 정의한 템플레이트 배열로 변환한다.
도 31은 서브루틴 처리용의 블럭을 확보하는 상태(상태 13)를 나타낸다. 이미 서브루틴 내의 해석이 종료되고, 서브루틴에서 필요한 블럭수를 알고 있으므로, 서브루틴 호출시에 필요한 수의 블럭을 비우게 하여, 서브루틴 처리용의 블럭을 확 보한다. 필요한 수의 블럭이 비어 있지 않은 경우에는 이미 로드되어 있는 데이터를 소거한다. 소거되는 데이터는 소거 우선도에 따라 결정된다.
구체적으로는 다음의 매크로 태스크(서브루틴 호출)에서, 서브루틴의 내부 처리용으로 1개의 블럭을 비우게 할 필요가 있다. 로컬메모리에 로드되어 있는 배열 d, a, c 및 e 중 배열 a는 서브루틴의 인수로서 사용된다. 배열 d, c 및 e의 소거 우선도는 동일하므로, 블럭 번호가 가장 작은 블럭 0에 저장되어 있는 배열 d를 소거한다. 또한, 그 다음의 매크로 태스크에서 배열 a가 필요한 것을 알고 있으므로, 데이터 전송 유닛에 의해, 로컬메모리가 비어 있는 블럭 1에 배열 a를 전송한다.
도 32는 블럭 지정 변수가 설정되는 상태(상태 14)를 나타낸다. 서브루틴 내에서 사용되는 내부처리용의 배열은 블럭 지정 변수 block_no1에 의해 임의의 블럭을 사용할 수 있다. 이 때문에, 서브루틴 호출시에, 내부처리용의 배열 변수에 할당되는 블럭 번호를 지정 변수로 설정한다. 이전의 서브루틴 호출시(도 27에 나타낸 상태 9)와 다른 블럭 번호를 설정할 수 있다.
도 33은 서브루틴이 실행되는 상태(상태 15)를 나타낸다. 서브루틴 호출시에 설정된 블럭 지정 변수에 의해, 사용될 블럭이 결정된다. 즉, 블럭 0은 내부처리용의 배열 y에 할당되며, 블럭 1은 인수용의 배열 x에 할당된다. 서브루틴에서는 지정된 블럭을 사용하여 서브루틴의 처리가 행해진다. 이전의 서브루틴 호출시(도 28에 나타낸 상태 10)와는 다른 영역에서 처리를 행하고 있다.
도 34는 서브루틴의 실행종료시의 상태(상태 16)를 나타낸다. 도 34에 나타 낸 코드가 컴파일 완료시의 코드이다. 서브루틴의 처리가 종료되면, 내부처리용 블럭은 NULL이 된다. 인수용 블럭은 인수로서 수취한 원래의 배열로 되돌아간다.
본 발명은 프로세서에 의해 사용되는 메모리 기억영역의 관리에 적용가능하며, 특히 멀티 태스크 프로세서에 의해 사용되는 메모리 기억영역의 관리에 적용가능하다.
Claims (21)
- 프로세서에 의해 사용되는 메모리의 기억영역을 관리하는 방법으로서,상기 프로세서는 태스크의 실행시에 액세스되는 데이터를 저장하는 메모리에 접속되어 있으며,상기 메모리의 기억영역을 복수의 다른 사이즈의 블럭으로 분할하고,상기 태스크의 실행시에 액세스되는 데이터에 적합한 사이즈의 블럭을 선택하며,상기 선택된 블럭에 상기 태스크의 실행시에 액세스되는 데이터를 저장하는 것을 특징으로 하는 메모리 관리방법.
- 제 1 항에 있어서,상기 태스크를 포함하는 프로그램의 해석에 의해 얻어진 정보에 기초하여 결정되는 사이즈로, 상기 블럭을 분할하는 것을 특징으로 하는 메모리 관리방법.
- 제 1 항에 있어서,상기 블럭은 복수 사이즈의 블럭을 포함하며, 상기 블럭의 복수의 사이즈는 정수배의 관계에 있는 것을 특징으로 하는 메모리 관리방법.
- 제 1 항에 있어서,상기 데이터에 상기 선택된 블럭에 할당하는 것을 결정한 후, 데이터 전송수단에 의해 상기 데이터를 상기 선택된 블럭에 저장하고,상기 블럭의 해방 타이밍까지, 상기 데이터 전송수단에 의해 상기 선택된 블럭에 저장된 데이터를 읽어내어 다른 메모리에 저장하는 것을 특징으로 하는 메모리 관리방법.
- 제 1 항에 있어서,상기 태스크에서 액세스되는 데이터에 n차원의 배열 데이터가 포함되는 경우, 상기 태스크에서 액세스되는 배열 데이터에 정합하도록 선택된 n+1차원의 템플레이트를 상기 블럭으로 할당하고,데이터를 저장하는 블럭을 지정할 경우, 상기 더해진 차원의 값에 따라 액세스되는 블럭이 달라지도록, 차원의 값이 다른 상기 템플레이트를 상기 각 블럭으로 할당하는 것을 특징으로 하는 메모리 관리방법.
- 프로세서가 메모리의 기억영역을 관리하는 방법으로서,상기 프로세서는 프로그램의 실행시에 액세스되는 데이터를 저장하는 메모리에 접속되어 있으며,상기 방법은상기 메모리의 기억영역을 블럭으로 분할하고,상기 프로그램의 해석에 의해 얻어진 정보에 기초하여 정해진 복수의 형상 및 사이즈의 템플레이트를 적합한 크기의 블럭으로 할당하고,상기 할당된 템플레이트에 적합한 형상 및 크기의 데이터를 상기 템플레이트에 저장하는 것을 특징으로 하는 메모리 관리방법.
- 제 6 항에 기재된 프로그램의 작성방법으로서,상기 템플레이트를 할당하는 단계에서는각 블럭으로 할당가능한 복수 종류의 템플레이트로부터, 상기 프로그램에서 액세스되는 배열 데이터의 차원에 1을 더한 차원을 가지며, 각 차원의 최대값이 상기 프로그램에서 액세스되는 배열 데이터의 각 차원의 최대값보다 큰 템플레이트를 할당하고,상기 더해진 차원의 값에 따라 액세스되는 블럭이 달라지도록, 복수의 상기 템플레이트를 복수의 상기 블럭으로 할당하는 것을 특징으로 하는 프로그램의 작성방법.
- 프로세서 및 이 프로세서에 의해 액세스되는 데이터를 저장하는 메모리를 구비하는 정보처리장치로서,상기 메모리의 기억영역은 상기 프로세서에서 실행되는 프로그램의 해석에 의해 얻어진 정보에 기초하여 결정되는 복수 사이즈의 블럭으로 분할되며,상기 블럭으로 할당되는 템플레이트의 형태 및 사이즈는 상기 프로그램의 해석에 의해 얻어진 정보에 기초하여 결정되어 있고,상기 프로세서는상기 프로세서에서 실행되는 프로그램의 해석에 의해 얻어진 정보에 기초하여 결정되는 복수 사이즈의 블럭으로, 상기 메모리의 기억영역을 분할하며,상기 프로그램의 해석에 의해 얻어진 정보에 기초하여 정해진 형상 및 사이의 템플레이트를 적합한 크기의 블럭으로 할당하고,상기 할당된 템플레이트에 적합한 형상 및 크기의 데이터를 상기 템플레이트에 저장하는 것을 특징으로 하는 정보처리장치.
- 제 8 항에 있어서.상기 프로그램에서 액세스되는 배열 데이터의 차원에 1을 더한 차원을 가지며, 더해진 차원 이외의 각 차원의 최대값이 상기 프로그램에서 액세스되는 배열 데이터의 각 차원의 최대값 이상의 템플레이트가 할당되고,상기 더해진 차원의 값에 따라 액세스되는 블럭이 달라지도록, 복수의 상기 템플레이트가 복수의 상기 블럭으로 할당되는 것을 특징으로 하는 정보처리장치.
- 프로세서에 의해 실행가능한 프로그램의 작성방법으로서,프로그램의 정보를 컴파일러에 의해 해석하고,상기 프로그램에 포함되는 각 태스크의 실행에 필요한 데이터를 특정하며,상기 태스크의 실행 타이밍에 따라, 필요한 데이터를 메모리에 읽고 쓰는 타이밍을 결정하고,상기 결정된 데이터를 기입하는 타이밍까지 상기 메모리의 영역을 할당하는 명령을, 컴파일되는 프로그램에 추가하는 것을 특징으로 하는 프로그램의 작성방법.
- 제 10 항에 있어서,상기 프로그램의 해석에 의해 얻어진 정보에 기초하여, 해방할 상기 영역 및 상기 영역을 해방하는 타이밍을 결정하며,상기 할당된 영역을 해방하기 위해, 상기 결정된 타이밍까지 상기 메모리에 기입된 데이터를 읽어내는 명령을, 상기 컴파일되는 프로그램에 추가하는 것을 특징으로 하는 프로그램의 작성방법.
- 제 11 항에 있어서,상기 메모리의 영역을 할당한 후에, 데이터 전송수단에 의해 상기 데이터를 상기 메모리에 저장하는 명령, 및상기 메모리의 영역의 해방 타이밍까지, 상기 데이터 전송수단에 의해 상기 메모리에 저장된 데이터를 읽어내어 다른 메모리에 저장하는 명령을, 상기 컴파일되는 프로그램에 추가하는 것을 특징으로 하는 프로그램의 작성방법.
- 제 10 항에 있어서,상기 프로그램의 해석에 의해 얻어진 정보는, 상기 프로그램에서 액세스되는 데이터의 정보, 상기 데이터가 다음에 액세스되는 타이밍의 정보, 상기 데이터를 액세스하는 프로세서의 정보 중 적어도 하나를 포함하는 것을 특징으로 하는 프로그램의 작성방법.
- 제 10 항에 있어서,상기 프로세서는 복수의 프로세서 코어를 구비하는 멀티 프로세서로서,상기 방법은, 상기 태스크를 언제 어떤 프로세서에 실행시킬지를 결정하고, 상기 결정된 프로세서에 상기 태스크를 할당하는 명령을, 상기 컴파일되는 프로그램에 추가하는 것을 특징으로 하는 프로그램의 작성방법.
- 제 10 항에 있어서,상기 메모리의 영역은 상기 메모리의 기억영역이 고정 사이즈의 블럭으로 분할된 영역인 것을 특징으로 하는 프로그램의 작성방법.
- 제 15 항에 있어서,상기 메모리의 영역은 복수의 다른 사이즈의 블럭으로 분할된 영역으로서,상기 복수의 사이즈는 상기 블럭의 복수 사이즈가 정수배의 관계에 있는 것 을 특징으로 하는 프로그램의 작성방법.
- 제 15 항에 있어서,상기 블럭의 사이즈는 상기 컴파일러가 프로그램을 해석하여 얻어진 정보에 기초하여 결정되는 것을 특징으로 하는 프로그램의 작성방법.
- 제 15 항에 있어서,상기 태스크에서 액세스되는 데이터를 상기 한 개의 블럭에 수용되도록 하기 위해, 상기 프로그램을 분할하는 것을 특징으로 하는 프로그램의 작성방법.
- 제 18 항에 있어서,상기 프로그램은 다중 루프를 포함하며,외측 루프의 분할에 의해 생성된 태스크에서 액세스되는 데이터가 상기 블럭에 수용되는지의 여부를 판정하고,상기 외측 루프가 분할에 의해 생성된 태스크에서 액세스되는 데이터가 상기 블럭에 수용되지 않으면, 내측의 루프를 더 분할함으로써 상기 데이터의 사이즈를 변경하는 것을 특징으로 하는 프로그램의 작성방법.
- 제 10 항에 있어서,상기 프로그램에서 액세스되는 데이터에 n차원의 배열 데이터가 포함될 경 우, 상기 프로그램에서 액세스되는 배열 데이터에 정합하도록 선택된 n+1차원의 템플레이트를 할당하고,데이터를 저장하는 영역을 지정할 경우, 상기 더해진 차원의 값에 따라 액세스되는 영역이 지정되도록, 복수의 상기 템플레이트를 복수 영역으로 할당하는 것을 특징으로 하는 프로그램의 작성방법.
- 프로세서에 의해 실행가능한 프로그램으로서,상기 프로그램은 컴파일러에 의해,프로그램의 정보가 해석되며,상기 프로그램에 포함되는 각 태스크의 실행에 필요한 데이터가 특정되고,상기 태스크의 실행 타이밍에 따라, 필요한 데이터를 메모리에 읽고 쓰는 타이밍이 결정되며,상기 결정된 데이터를 기입하는 타이밍까지 상기 메모리의 영역을 할당하는 명령이 추가됨으로써 생성되는 프로그램.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007050269A JP5224498B2 (ja) | 2007-02-28 | 2007-02-28 | メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム |
JPJP-P-2007-050269 | 2007-02-28 | ||
PCT/JP2008/053891 WO2008105558A1 (ja) | 2007-02-28 | 2008-02-27 | メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20090106613A true KR20090106613A (ko) | 2009-10-09 |
KR101186174B1 KR101186174B1 (ko) | 2012-10-02 |
Family
ID=39721378
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020097017059A KR101186174B1 (ko) | 2007-02-28 | 2008-02-27 | 메모리 관리방법, 정보처리장치, 프로그램의 작성방법 및 프로그램 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8438359B2 (ko) |
JP (1) | JP5224498B2 (ko) |
KR (1) | KR101186174B1 (ko) |
CN (1) | CN101601017B (ko) |
GB (2) | GB2459802B (ko) |
WO (1) | WO2008105558A1 (ko) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8745339B2 (en) | 2011-01-27 | 2014-06-03 | Samsung Electronics Co., Ltd. | Multi-core system and method for processing data in parallel in multi-core system |
KR101537725B1 (ko) * | 2013-01-18 | 2015-07-20 | 서울대학교산학협력단 | 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체 |
US10579036B2 (en) | 2014-05-19 | 2020-03-03 | Lsis Co., Ltd. | Apparatus for program management of programmable logic controller |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8219740B2 (en) * | 2008-06-25 | 2012-07-10 | International Business Machines Corporation | Flash sector seeding to reduce program times |
CN101499034A (zh) * | 2009-03-05 | 2009-08-05 | 北京中星微电子有限公司 | 内存管理方法 |
US8335897B2 (en) * | 2009-12-15 | 2012-12-18 | Seagate Technology Llc | Data storage management in heterogeneous memory systems |
JP5810918B2 (ja) * | 2009-12-24 | 2015-11-11 | 日本電気株式会社 | スケジューリング装置、スケジューリング方法及びプログラム |
US8723877B2 (en) * | 2010-05-20 | 2014-05-13 | Apple Inc. | Subbuffer objects |
CN102622206A (zh) * | 2011-01-28 | 2012-08-01 | 中兴通讯股份有限公司 | 一种处理器及其处理数据的方法 |
JP2012173870A (ja) * | 2011-02-18 | 2012-09-10 | Toshiba Corp | 半導体装置及びメモリ保護方法 |
US9354988B2 (en) * | 2011-03-28 | 2016-05-31 | Sap Se | Allocation strategies for data storage applications |
JP5708216B2 (ja) * | 2011-05-09 | 2015-04-30 | ソニー株式会社 | フラッシュメモリ装置、メモリ制御装置、メモリ制御方法、ストレージシステム |
JPWO2013001614A1 (ja) * | 2011-06-28 | 2015-02-23 | 富士通株式会社 | データ処理方法およびデータ処理システム |
WO2013001614A1 (ja) * | 2011-06-28 | 2013-01-03 | 富士通株式会社 | データ処理方法およびデータ処理システム |
US9830133B1 (en) * | 2011-12-12 | 2017-11-28 | Significs And Elements, Llc | Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation |
US20140281369A1 (en) * | 2011-12-23 | 2014-09-18 | Ashish Jha | Apparatus and method for sliding window data gather |
US10193927B2 (en) * | 2012-02-27 | 2019-01-29 | University Of Virginia Patent Foundation | Method of instruction location randomization (ILR) and related system |
WO2013137862A1 (en) | 2012-03-13 | 2013-09-19 | Intel Corporation | Dynamically controlling interconnect frequency in a processor |
WO2013137859A1 (en) | 2012-03-13 | 2013-09-19 | Intel Corporation | Providing energy efficient turbo operation of a processor |
US9436245B2 (en) | 2012-03-13 | 2016-09-06 | Intel Corporation | Dynamically computing an electrical design point (EDP) for a multicore processor |
US8984313B2 (en) | 2012-08-31 | 2015-03-17 | Intel Corporation | Configuring power management functionality in a processor including a plurality of cores by utilizing a register to store a power domain indicator |
US8510531B1 (en) | 2012-09-20 | 2013-08-13 | Google Inc. | Fast, dynamic cache packing |
JP6161396B2 (ja) * | 2013-05-15 | 2017-07-12 | オリンパス株式会社 | 演算装置 |
JP6161395B2 (ja) * | 2013-05-15 | 2017-07-12 | オリンパス株式会社 | 演算装置 |
JP6018022B2 (ja) | 2013-06-14 | 2016-11-02 | 株式会社デンソー | 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置 |
JP5915624B2 (ja) * | 2013-11-14 | 2016-05-11 | 株式会社デンソー | 電子制御装置 |
JP6201788B2 (ja) * | 2014-01-29 | 2017-09-27 | 富士通株式会社 | ループ分割検出プログラム及びループ分割検出方法 |
JP6200824B2 (ja) * | 2014-02-10 | 2017-09-20 | ルネサスエレクトロニクス株式会社 | 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス |
CN104168079B (zh) * | 2014-09-03 | 2017-02-01 | 成都朗锐芯科技发展有限公司 | 一种多通道分组定时器 |
JP6488739B2 (ja) | 2015-02-05 | 2019-03-27 | 株式会社デンソー | 並列化コンパイル方法、及び、並列化コンパイラ |
JP6488738B2 (ja) | 2015-02-05 | 2019-03-27 | 株式会社デンソー | 並列化コンパイル方法、及び、並列化コンパイラ |
US10491667B1 (en) * | 2015-03-16 | 2019-11-26 | Amazon Technologies, Inc. | Customized memory modules in multi-tenant service provider systems |
JP6427054B2 (ja) | 2015-03-31 | 2018-11-21 | 株式会社デンソー | 並列化コンパイル方法、及び並列化コンパイラ |
JP6427053B2 (ja) | 2015-03-31 | 2018-11-21 | 株式会社デンソー | 並列化コンパイル方法、及び並列化コンパイラ |
EP3113026B1 (en) | 2015-06-29 | 2019-07-24 | aicas GmbH | Automatic memory management using a memory management unit |
CN110874212B (zh) | 2015-06-30 | 2021-08-20 | 华为技术有限公司 | 一种硬件加速方法、编译器以及设备 |
DE102017209697A1 (de) * | 2016-06-13 | 2017-12-14 | Denso Corporation | Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung |
DE102016211386A1 (de) * | 2016-06-14 | 2017-12-14 | Robert Bosch Gmbh | Verfahren zum Betreiben einer Recheneinheit |
JP2017228029A (ja) * | 2016-06-21 | 2017-12-28 | 株式会社デンソー | 並列化方法、並列化ツール、車載装置 |
US10289309B2 (en) | 2016-09-12 | 2019-05-14 | Toshiba Memory Corporation | Automatic detection of multiple streams |
US10073640B1 (en) | 2017-03-10 | 2018-09-11 | Toshiba Memory Corporation | Large scale implementation of a plurality of open channel solid state drives |
US10542089B2 (en) | 2017-03-10 | 2020-01-21 | Toshiba Memory Corporation | Large scale implementation of a plurality of open channel solid state drives |
US10339983B1 (en) | 2017-12-29 | 2019-07-02 | Micron Technology, Inc. | Temperature-based memory operations |
US11475306B2 (en) | 2018-03-22 | 2022-10-18 | Amazon Technologies, Inc. | Processing for multiple input data sets |
US11461631B2 (en) * | 2018-03-22 | 2022-10-04 | Amazon Technologies, Inc. | Scheduling neural network computations based on memory capacity |
JP7060803B2 (ja) | 2018-06-20 | 2022-04-27 | 富士通株式会社 | 情報処理装置、コンパイラプログラム及びコンパイル方法 |
CN109634518A (zh) * | 2018-10-29 | 2019-04-16 | 成都华为技术有限公司 | 一种存储资源配置方法及装置 |
CN110704362B (zh) * | 2019-09-12 | 2021-03-12 | 无锡江南计算技术研究所 | 一种处理器阵列局部存储混合管理方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5784699A (en) * | 1996-05-24 | 1998-07-21 | Oracle Corporation | Dynamic memory allocation in a computer using a bit map index |
US6088777A (en) * | 1997-11-12 | 2000-07-11 | Ericsson Messaging Systems, Inc. | Memory system and method for dynamically allocating a memory divided into plural classes with different block sizes to store variable length messages |
JP4784792B2 (ja) | 1999-12-22 | 2011-10-05 | 学校法人早稲田大学 | マルチプロセッサ |
JP3757825B2 (ja) * | 2001-06-29 | 2006-03-22 | 日本電気株式会社 | プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム |
DE10228103A1 (de) | 2002-06-24 | 2004-01-15 | Bayer Cropscience Ag | Fungizide Wirkstoffkombinationen |
US20050268049A1 (en) | 2002-08-30 | 2005-12-01 | Koninklijke Philips Electronics N.V. | Dynamic memory management |
US7563748B2 (en) | 2003-06-23 | 2009-07-21 | Cognis Ip Management Gmbh | Alcohol alkoxylate carriers for pesticide active ingredients |
EP1619584A1 (en) | 2004-02-13 | 2006-01-25 | Jaluna SA | Memory allocation |
-
2007
- 2007-02-28 JP JP2007050269A patent/JP5224498B2/ja active Active
-
2008
- 2008-02-27 GB GB0914592.1A patent/GB2459802B/en active Active
- 2008-02-27 KR KR1020097017059A patent/KR101186174B1/ko active IP Right Grant
- 2008-02-27 CN CN2008800037808A patent/CN101601017B/zh active Active
- 2008-02-27 WO PCT/JP2008/053891 patent/WO2008105558A1/ja active Application Filing
- 2008-02-27 US US12/525,404 patent/US8438359B2/en active Active
- 2008-02-27 GB GB1109237.6A patent/GB2478874B/en active Active
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8745339B2 (en) | 2011-01-27 | 2014-06-03 | Samsung Electronics Co., Ltd. | Multi-core system and method for processing data in parallel in multi-core system |
KR101537725B1 (ko) * | 2013-01-18 | 2015-07-20 | 서울대학교산학협력단 | 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체 |
US10579036B2 (en) | 2014-05-19 | 2020-03-03 | Lsis Co., Ltd. | Apparatus for program management of programmable logic controller |
Also Published As
Publication number | Publication date |
---|---|
CN101601017A (zh) | 2009-12-09 |
GB2478874B (en) | 2011-12-28 |
GB0914592D0 (en) | 2009-09-30 |
GB2478874A (en) | 2011-09-21 |
GB2459802B (en) | 2012-01-04 |
GB201109237D0 (en) | 2011-07-13 |
US20100174876A1 (en) | 2010-07-08 |
CN101601017B (zh) | 2013-10-09 |
JP5224498B2 (ja) | 2013-07-03 |
US8438359B2 (en) | 2013-05-07 |
KR101186174B1 (ko) | 2012-10-02 |
GB2459802A (en) | 2009-11-11 |
WO2008105558A1 (ja) | 2008-09-04 |
JP2008217134A (ja) | 2008-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101186174B1 (ko) | 메모리 관리방법, 정보처리장치, 프로그램의 작성방법 및 프로그램 | |
US7926046B2 (en) | Compiler method for extracting and accelerator template program | |
Lowney et al. | The multiflow trace scheduling compiler | |
Etsion et al. | Task superscalar: An out-of-order task pipeline | |
US10430190B2 (en) | Systems and methods for selectively controlling multithreaded execution of executable code segments | |
US8473934B2 (en) | Method for mapping applications on a multiprocessor platform/system | |
US7631305B2 (en) | Methods and products for processing loop nests | |
US8528001B2 (en) | Controlling and dynamically varying automatic parallelization | |
KR102575940B1 (ko) | 프로세서 명령어 창에 대한 명령어 블록의 대량 할당 | |
US20140068582A1 (en) | Optimized division of work among processors in a heterogeneous processing system | |
Sabne et al. | Scaling large-data computations on multi-GPU accelerators | |
WO2022162344A1 (en) | Circuitry and method for instruction execution in dependence upon trigger conditions | |
JP4784792B2 (ja) | マルチプロセッサ | |
JP2016192152A (ja) | 並列化コンパイル方法、並列化コンパイラ、及び車載装置 | |
JP4304347B2 (ja) | マルチプロセッサ | |
JP4784842B2 (ja) | マルチプロセッサ及びマルチプロセッサシステム | |
Tian et al. | Optimizing gpu register usage: Extensions to openacc and compiler optimizations | |
Dykes et al. | Mamba: Portable array-based abstractions for heterogeneous high-performance systems | |
Eisenbeis et al. | Compiler techniques for optimizing memory and register usage on the Cray 2 | |
Palem et al. | Compiler optimizations for adaptive EPIC processors | |
Lupescu et al. | Analysis of OpenCL work-group reduce for Intel GPUs | |
Benoit et al. | Runtime support for automatic placement of workloads on heterogeneous processors | |
Ghadge | Improving Code Overlay Performance by Pre-fetching in Scratch Pad Memory Systems | |
Kumar et al. | A new compiler for space-time scheduling of ILP processors | |
Papakonstantinou | High-level automation of custom hardware design for high-performance computing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20150911 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20170908 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20190916 Year of fee payment: 8 |