KR101245494B1 - 배열의 병렬화 포인트 탐색 방법 및 장치 - Google Patents

배열의 병렬화 포인트 탐색 방법 및 장치 Download PDF

Info

Publication number
KR101245494B1
KR101245494B1 KR1020110001327A KR20110001327A KR101245494B1 KR 101245494 B1 KR101245494 B1 KR 101245494B1 KR 1020110001327 A KR1020110001327 A KR 1020110001327A KR 20110001327 A KR20110001327 A KR 20110001327A KR 101245494 B1 KR101245494 B1 KR 101245494B1
Authority
KR
South Korea
Prior art keywords
array
elements
loop
updated
data structure
Prior art date
Application number
KR1020110001327A
Other languages
English (en)
Other versions
KR20120079957A (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 대한민국(환경부 국립환경과학원장)
Priority to KR1020110001327A priority Critical patent/KR101245494B1/ko
Publication of KR20120079957A publication Critical patent/KR20120079957A/ko
Application granted granted Critical
Publication of KR101245494B1 publication Critical patent/KR101245494B1/ko

Links

Images

Classifications

    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

배열에 대한 연산을 병렬화하기 위한 방법 및 장치가 제공된다. 배열의 특정 요소들을 갱신하는 루프가 검색된다. 루프가 반복하는 전체 범위가 하나 이상의 구간들로 분할된다. 분할된 구간들 각각에 대해, 구간에서 갱신되는 배열의 요소들이 검색된다. 구간들 각각이 갱신하는 요소들이 중복되지 않는 경우, 루프는 병렬로 실행되는 하나 이상의 루프들로 분할될 수 있다. 하나 이상의 루프들은 각각 하나의 구간에 대응한다. 병렬화된 구간들은 각각 서로 상이한 노드에 의해 실행될 수 있다.

Description

배열의 병렬화 포인트 탐색 방법 및 장치{METHOD AND APPARATUS FOR SEARCHING PARALLELIZATION POINT OF ARRAY}
아래의 실시예들은 배열의 병렬화 포인트를 탐색하기 위한 방법 및 장치에 관한 것이다.
배열의 병렬화 포인트를 탐색하여, 병렬화 포인트를 기준으로 배열에 대한 연산을 노드별로 분할하는 방법 및 장치가 개시된다.
소프트웨어의 병렬화(parallelization)는 기존의 순차(sequential) 프로그램을 병렬화함으로써 멀티코어(multi-core) 또는 복수 개의 노드(node)에서 실행될 수 있는 병렬 소프트웨어를 구축하는 것이다.
소프트웨어를 병렬화하기 위해서, 다양한 방법론 및 이러한 방법론들에 기반한 라이브러리들이 사용된다. 일반적으로, 소켓을 이용한 분산처리 방법론 및 스레드 프로그래밍 방법론 등이 병렬화를 위해 사용된다. 이러한 방법론은 서적, 기술 문서, 논문, 프로그래밍 라이브러리, 프로그래밍 프레임워크 등의 형태로 배표된다.
예컨대, 유닉스(unix) 시스템에서는 pthread에 관련된 시스템 콜(system call)들을 이용함으로써 병렬 프로그램이 구현될 수 있다.
또한, 개발자용 프레임워크(framework) 기술로서, 오픈 앰피 라이브러리(OpenMP Library), 메시지 패싱 인터페이스(Massage Passing Interface), 테스트 페러럴 라이브러리(Task Parallel Library) 등이 있다.
이러한 프레임워크 기술들은, 개발자가 명시적인 선언을 할 경우, 병렬 처리를 수행할 수 있는 스레드를 생성한다.
기존의 기술들은 매우 추상적인 방법론에 기반하여 이루어졌거나, 개발자가 이미 병렬화가 가능한지 여부를 알고 있는 경우에 한해서만(즉, 개발자가 명시적으로 병렬화를 위한 선언을 한 경우에만), 병렬화를 구현할 수 있는 방법을 제공해준다.
본 발명의 일 실시에는 배열의 병렬화 포인트를 탐색하는 장치 및 방법을 제공할 수 있다.
본 발명의 일 실시에는 탐색된 병렬화 포인트에 기반하여 배열에 대한 연산을 병렬화하는 장치 및 방법을 제공할 수 있다.
본 발명의 일 측에 따르면, 소스 코드 내의 루프 내부에 모니터링 코드를 삽입하는 단계 - 상기 루프는 제1 배열의 복수 개의 요소들에게 값을 할당함. 상기 모니터링 코드는 모니터링 데이터 구조를 포함하고, 상기 모니터링 데이터 구조는 상기 루프의 각 반복에서 상기 제1 배열의 복수 개의 요소들 중 어떤 요소가 갱신되었는지를 기록함. -, 상기 루프의 실행이 종료된 후의 상기 모니터링 데이터 구조의 결과 값을 획득하는 단계, 상기 루프에 대한 n 개의 구간들을 결정하는 단계 - 상기 n은 2 이상의 정수임, 상기 루프의 각 반복은 상기 n 개의 구간들 중 하나의 구간에 포함됨. -, 상기 결과 값에 기반하여, 상기 제1 배열의 복수 개의 요소들 중 중복 갱신 요소가 있는지 여부를 판단하는 단계 - 상기 중복 갱신 요소는 상기 n 개의 구간들 중 2 개 이상의 구간들에서 갱신되는 요소임. - 및 상기 중복 갱신 요소가 발견되지 않은 경우, 상기 루프를 병렬로 실행되는 상기 n 개의 구간들 각각에 대한 루프들로 분할하여 상기 소스 코드를 갱신하는 단계를 포함하는, 배열의 요소들에 대한 연산의 병렬화 방법이 제공된다.
상기 배열의 요소들에 대한 연산의 병렬화 방법은, 상기 소스 코드 내에서 상기 제1 배열을 선택하는 단계 및 상기 소스 코드 내에서 상기 루프를 선택하는 단계를 더 포함할 수 있다.
상기 n은 2일 수 있고, 제1 구간은 상기 루프가 수행하는 반복들 중 앞부분이고, 제2 구간은 상기 반복들 중 뒷부분일 수 있다.
상기 제1 배열은 k 차원일 수 있고, 상기 모니터링 데이터 구조는 상기 k 차원의 요소들 각각이 상기 루프의 몇 번째 반복들에서 갱신되었는지를 나타낼 수 있다.
상기 루프의 반복 횟수는 L일 수 있다.
상기 모니터링 데이터 구조는 상기 제1 배열의 복수 개의 요소들 각각에 대한 제2 배열을 포함할 수 있고, 상기 제2 배열은 크기가 L인 1차원 배열이고, 상기 제2 배열의 요소들 각각은 L개의 불리언(Boolean) 값들의 배열일 수 있다.
상기 모니터링 코드는, 상기 루프의 i 번째 반복에서 상기 제1 배열의 복수 개의 요소들 중 특정 요소가 갱신되면, 상기 갱신된 요소에 대응하는 제2 배열의 i 번째 요소의 i 번째 불리언 값을 참(ture)으로 세트할 수 있다.
상기 제1 배열의 복수 개의 요소들 중 제x 요소가 상기 k 개의 구간들 중 제y 구간에서 갱신되었는지 여부는, 상기 제x 요소에 대응하는 상기 제2 배열의 요소들 중, 상기 제y 구간이 포함하는 반복들에 대응하는 인덱스들의 요소들의 값들을 논리합 한 값에 기반하여 판단될 수 있다.
상기 제1 배열의 복수 개의 요소들 중 제x 요소가 상기 k 개의 구간들 중 제y 구간 및 제z 구간에서 중복 갱신되었는지 여부는, 상기 제x 요소에 대응하는 상기 제2 배열의 요소들 중, 상기 제y 구간이 포함하는 반복들에 대응하는 인덱스의 요소들의 값들을 논리합 한 제1 논리합을 계산하고, 상기 제z 구간이 포함하는 반복들에 대응하는 인덱스의 요소들의 값들을 논리합 한 제2 논리합을 계산하고, 상기 제1 논리합 및 상기 제2 논리합을 논리곱(and)함으로써 판단될 수 있다.
상기 모니터링 데이터 구조는 상기 제1 배열 및 상기 제1 배열의 복수 개의 요소들 각각에 대한 상기 제2 배열에 대응하는 k+1 차원의 배열일 수 있다.
상기 루프의 실행이 종료된 후의 상기 모니터링 데이터 구조의 결과 값을 획득하는 단계는, 상기 소스 코드에 기반한 실행 코드를 생성하는 단계, 상기 실행 코드를 실행함으로써 상기 루프의 실행이 종료된 후의 상기 결과 값을 획득하는 단계를 포함할 수 있다.
본 발명의 다른 일 측에 따르면, 소스 코드 내의 루프 내부에 모니터링 코드를 삽입하는 모니터링 코드 삽입부 - 상기 루프는 제1 배열의 복수 개의 요소들에게 값을 할당함. 상기 모니터링 코드는 모니터링 데이터 구조를 포함하고, 상기 모니터링 데이터 구조는 상기 루프의 각 반복에서 상기 제1 배열의 복수 개의 요소들 중 어떤 요소가 갱신되었는지를 기록함. -, 상기 루프의 실행이 종료된 후의 상기 모니터링 데이터 구조의 결과 값을 획득하는 결과 값 획득부, 상기 루프에 대한 n 개의 구간들을 결정하는 구간 결정부 - 상기 n은 2 이상의 정수임, 상기 루프의 각 반복은 상기 n 개의 구간들 중 하나의 구간에 포함됨. -, 상기 결과 값에 기반하여, 상기 제1 배열의 복수 개의 요소들 중 중복 갱신 요소가 있는지 여부를 판단하는 중복 갱신 요소 판단부 - 상기 중복 갱신 요소는 상기 n 개의 구간들 중 2 개 이상의 구간들에서 갱신되는 요소임. - 및 상기 중복 갱신 요소가 발견되지 않은 경우, 상기 루프를 병렬로 실행되는 상기 n 개의 구간들 각각에 대한 루프들로 분할하여 상기 소스 코드를 갱신하는 소스 코드 갱신부를 포함하는, 배열의 요소들에 대한 연산의 병렬화 장치.
상기 배열의 요소들에 대한 연산의 병렬화 장치는 상기 소스 코드 내에서 상기 제1 배열을 선택하고, 상기 소스 코드 내에서 상기 루프를 선택하는 병렬화 대상 객체 선택부를 더 포함할 수 있다.
상기 중복 갱신 요소 판단부는, 상기 제1 배열의 복수 개의 요소들 중 제x 요소에 대응하는 상기 제2 배열의 요소들 중, 제y 구간이 포함하는 반복들에 대응하는 인덱스들의 요소들의 값들을 논리합 한 값에 기반하여, 상기 제x 요소가 상기 k 개의 구간들 중 상기 제y 구간에서 갱신되었는지 여부를 판단할 수 있다.
상기 중복 갱신 요소 판단부는, 상기 제1 배열의 복수 개의 요소들 중 제x 요소에 대응하는 상기 제2 배열의 요소들 중, 제y 구간이 포함하는 반복들에 대응하는 인덱스의 요소들의 값들을 논리합 한 제1 논리합을 계산하고, 제z 구간이 포함하는 반복들에 대응하는 인덱스의 요소들의 값들을 논리합 한 제2 논리합을 계산하고, 상기 제1 논리합 및 상기 제2 논리합을 논리곱(and)함으로써, 상기 제x 요소가 상기 k 개의 구간들 중 상기 제y 구간 및 상기 제z 구간에서 중복 갱신되었는지 여부를 판단할 수 있다.
상기 결과 값 획득부는, 상기 소스 코드에 기반한 실행 코드를 생성하고, 상기 실행 코드를 실행함으로써, 상기 루프의 실행이 종료된 후의 상기 모니터링 데이터 구조의 결과 값을 획득할 수 있다.
배열의 병렬화 포인트를 탐색하는 장치 및 방법이 제공된다.
탐색된 병렬화 포인트에 기반하여 배열에 대한 연산을 병렬화하는 장치 및 방법이 제공된다.
도 1은 본 발명의 일 실시예에 따른 배열의 요소들에 대한 연산을 병렬화하는 방법의 흐름도이다.
도 2는 본 발명의 일 예에 따른 병렬화의 대상이 되는 원본(source) 배열이다.
도 3은 본 발명의 일 예에 따른 원본 배열을 갱신하는 루프를 포함하는 슈도 코드이다.
도 4는 본 발명의 일 예에 따른 모니터링 데이터 구조를 나타낸다.
도 5는 본 발명의 일 예에 따른 모니터링 코드를 나타낸다.
도 6은 본 발명의 일 예에 따른 루프 실행 중의 모니터링 데이터 구조의 갱신을 나타낸다.
도 7은 본 발명의 일 예에 따른 루프 실행이 완료된 후의 모니터링 데이터 구조를 나타낸다.
도 8은 본 발명의 일 예에 따른 병렬화된 루프를 나타낸다.
도 9는 본 발명의 일 실시예에 따른 배열의 요소들에 대한 연산의 병렬화 장치의 구조도이다.
이하에서, 본 발명의 일 실시예를, 첨부된 도면을 참조하여 상세하게 설명한다. 그러나, 본 발명이 실시예들에 의해 제한되거나 한정되는 것은 아니다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
도 1은 본 발명의 일 실시예에 따른 배열의 요소들에 대한 연산을 병렬화하는 방법의 흐름도이다.
단계(S110)에서, 소스 코드 내에서 원본 배열이 선택된다.
원본 배열은 병렬화의 대상이 되는 배열이다.
단계(S120)에서, 소스 코드 내에서 병렬화의 대상이 되는 루프(loop)가 선택된다. 루프는 원본 배열의 복수 개의 요소들에게 값을 할당한다.
즉, 루프가 반복됨(iterated)에 따라, 각 반복(iteration)에서 원본 배열의 복수 개의 요소들 중 특정 요소의 값이 갱신(또는, 생성)된다.
단계(S130)에서, 선택된 루프 내부에 모니터링 코드(monitoring code)가 삽입된다.
모니터링 코드는 모니터링 데이터 구조(data structure)를 포함한다.
모니터링 데이터 구조는 루프의 각 반복에서 원본 배열의 요소들 중 어떤 요소가 갱신되었는지를 기록한다. 즉, 모니터링 데이터 구조에 의해 원본 배열의 요소들 중 어떤 요소가 루프의 몇 번째 반복에서 갱신되었는지가 식별될 수 있다.
단계(S140)에서, 모니터링 코드가 삽입된 소스 코드에 기반한 실행 코드가 생성된다.
단계(S150)에서, 생성된 실행 코드를 실행함으로써, 루프의 실행이 종료된 후의 모니터링 데이터 구조의 결과 값이 획득된다.
단계(S160)에서, 루프에 대한 n 개의 구간들이 결정된다.
n은 2 이상의 정수이다. 루프의 각 반복은 n 개의 구간들 중 하나의 구간에 포함된다.
n이 2일 경우, 제1 구간은 루프가 수행하는 반복들 중 앞부분이고, 제2 구간은 루프가 수행하는 반복들 중 뒷부분일 수 있다.
단계(S170)에서, 모니터링 데이터 구조의 결과 값에 기반하여 원본 배열의 복수 개의 요소들 중 중복 갱신 요소가 있는지 여부가 판단된다.
중복 갱신 요소는, k 개의 구간들 중 2 개 이상의 구간들에서 갱신되는 요소를 의미한다.
즉, 원본 배열의 요소들 중 특정 요소가 제1 구간 및 제2 구간에서 갱신될 경우 상기의 특정 요소는 중복 갱신 요소이다.
만약, 원본 배열의 요소들 중 중복 갱신 요소가 있다면, k 개의 구간들은 병렬화될 수 없다.
예컨대, 제1 중복 갱신 요소가 루프의 a 번째 반복 및 b 번째 반복에서 갱신될 경우를 가정한다. 여기서 a < b이다. a 번째 반복은 k 개의 구간들 중 제c 구간에 속하는 반복이고, b 번째 반복은 k 개의 구간들 중 제d 구간에 속하는 반복이다.
원래의 루프가 실행될 경우, a < b이므로, 제1 중복 갱신 요소가 갖는 값은 b 번째 반복에 의해 갱신(또는, 생성)된 값이다.
그러나, k 개의 구간들이 모두 병렬로 실행된다면, a 번째 반복은 c 구간에 대해 분할된 루프에서 실행되고, b 번째 반복은 d 구간에 대해 분할된 루프에서 실행되기 때문에, a 번째 반복 및 b 번째 반복 중 b 번째 반복이 최종적으로 실행된다는 것이 보장될 수 없다.
반면, 원본 배열의 요소들 중 중복 갱신 요소가 없다면, k 개의 구간들은 병렬화될 수 있다.
원본 배열의 요소들 중 특정한 요소가 루프의 a' 번째 반복 및 b' 번째 반복에서 갱신될 경우를 가정한다. 여기서 a' < b'이다. a' 번째 반복 및 b' 번째 반복은 모두 k 개의 구간들 중 제c' 구간에 속하는 반복이다.
원래의 루프가 실행될 경우, a' < b'이므로, 요소가 갖는 값은 b' 번째 반복에 의해 갱신(또는, 생성)된 값이다.
k 개의 구간들이 모두 병렬로 실행되더라도, a' 번째 반복 및 b' 번째 반복은 모드 c' 구간에 대해 분할된 루프에서 실행된다. 따라서, a' 번째 반복 및 b' 번째 반복 중 b' 번째 반복이 최종적으로 실행된다는 것이 보장될 수 있다.
즉, 원본 배열의 복수 개의 요소들에 대해서, 각 요소가 k 개의 구간들 중 단지 하나의 구간에서만 갱신되거나 또는 어떤 구간에서도 갱신되지 않으면, k 개의 구간들은 병렬화될 수 있다.
중복 갱신 요소가 발견되지 않은 경우 단계(S180)가 수행된다.
단계(S180)에서, 루프는 n 개의 구간들 각각에 대한 루프들로 분할된다.
분할된 루프들은 병렬로 실행된다. 분할된 루프들은 시스템 내의 복수 개의 노드들에 의해 병렬로 실행될 수 있다.
루프는 n 개의 구간들 각각에 대한 루프들로 분할함으로써 소스 코드가 갱신된다.
도 2는 본 발명의 일 예에 따른 병렬화의 대상이 되는 원본(source) 배열이다.
도시된 원본 배열(200)은 2 차원(dimension)의 배열이다. 원본 배열(200)의 첫 번째 차원(x)의 크기는 size_X이고, 원본 배열의 두 번째 차원(y)의 크기는 size_Y이다.
즉, 원본 배열(200)은 하기의 표 1의 슈도 코드(pseudo code)에 의해 선언될 수 있다.
element_type matrix(size_X, size_Y);
여기서, matrix는 원본 배열(200)의 명칭이고, element_type은 원본 배열(200)이 element_type 형식(type)의 요소들의 배열임을 나타낸다.
본 실시예에서, 원본 배열(200)이 2 차원인 것은, 단지 예시적인 것이다. 원본 배열은 k 차원일 수 있다. k는 1 이상의 정수이다.
도 3은 본 발명의 일 예에 따른 원본 배열을 갱신하는 루프를 포함하는 슈도 코드이다.
루프(300)는 1부터 LOOP_MAX_INDEX(310)(이하, L(310)로 표시한다.)까지, L 번 반복된다.
루프(300)의 각 반복(iteration)에서, 원본 배열(200) "matrix"의 요소 matrix(x,y)에게 함수 ex_function()(330)의 결과 값이 할당(assign)된다. 즉, matrix(x, y)의 값이 갱신된다.
ex_function()(330)은 임의의 함수일 수 있다.
변수 x 및 변수 y는 원본 배열(200)의 하나 이상의 요소들 중 하나의 요소를 특정한다. 즉, 변수 x 및 변수 y는 원본 배열(200)의 요소를 특정하는 인덱스(index)(320)이다.
인덱스(320)의 값, 즉 x의 값 및 y의 값은 루프(300)가 반복되면서 계속적으로 변경될 수 있다. 따라서, 루프(300)가 반복되면서, 인덱스에 의해 특정되는, 원본 배열(200)의 특정 요소들이 점차 변경된다.
즉, 루프(300)가 반복됨에 따라, 원본 배열(200)의 요소들 중 하나의 요소가 선택되고, 선택된 요소의 값이 갱신된다.
원본 배열(200) 내의 요소들 중 특정한 요소 e는 루프(300)의 반복들(즉 제1 반복 내지 제L 반복) 중 갱신되지 않을 수 있다. 반면, 원본 배열(200)의 요소들 중 특정한 요소 f는 루프(300)가 반복되면서 2 회 이상 갱신될 수 있다.
도 4는 본 발명의 일 예에 따른 모니터링 데이터 구조를 나타낸다.
전술된 것처럼, 루프(300)를 n 개의 구간들 각각에 대한 루프들로 분할하기 위해서는 원본 배열(200)의 요소들 중 중복 요소가 있는지 여부가 판단되어야 한다.
원본 배열(200)의 특정 요소가 중복 여부인지 여부를 판단하기 위해서는, 원본 배열(200)의 각 요소가 루프(300)의 어떤 반복(iteration)에서 갱신되었는지가 기록되어야 한다. 예컨대, 원본 배열(200)의 요소들이 k 차원의 배열이면, 모니터링 데이터 구조는 k 차원의 요소들 각각이 루프(200)의 몇 번째 반복들에서 갱신되었는지를 나타낼 수 있다.
또는, 루프(300)의 특정 구간에서 원본 배열(200)의 요소들 중 어떤 요소들이 갱신되었는지가 기록되어야 한다. 예컨대, 원본 배열(200)이 L 번 반복되면, 모니터링 데이터 구조는 각 반복에서 원본 배열(200)의 어떤 요소들이 갱신되었는지를 나타낼 수 있다.
예컨대, 모니터링 데이터 구조는 원본 배열(200)의 복수 개의 요소들 각각에 대해 반복 배열을 할당할 수 있다. 반복 배열의 길이는 L이다. 전술된 것과 같이, L은 루프(300)의 반복 횟수이다. 즉, 원본 배열(200)의 복수 개의 요소들 각각에 대해 길이 L인 1 차원의 반복 배열이 할당된다.
반복 배열의 요소들 각각은 L 개의 불리언(Boolean) 값들의 배열일 수 있다. 또는, 반복 배열의 요소들은 길이가 L인 비트(bit) 스트링(string)일 수 있다.
루프(300)의 i 번째 반복에서 원본 배열(200)의 요소들 중 한 요소가 갱신될 경우, 루프(300) 내의 모니터링 코드는, 상기 갱신된 요소의 반복 배열의 i 번째 요소의 값을 갱신한다. 즉, 상기 갱신된 요소의 반복 배열의 i 번째 요소의 값인, L 개의 불리언 값들 중(또는, 비트 스트링 중), i 번째 불리언 값(또는, i 번째 비트가)이 참(true)(또는, 1)로 세트된다. 따라서, 원본 배열(200)의 특정 요소에 대응하는 반복 배열은, 그 요소가 몇 번째 반복에서 갱신되었는지를 기록할 수 있다.
또한, 반복 배열의 값들을 모두 논리 합(OR)함으로써 논리 합된 반복 배열을 생성하면, 논리합된 반복 배열의 요소들은 1부터 L까지의 반복들 중 특정 요소가 갱신된 반복을 참으로, 그렇지 않은 반복을 거짓(false)으로 순서대로 나타낸다.
모니터링 데이터 구조는 하나의 배열로서 구성될 수 있다. 모니터링 데이터 구조는 원본 배열(200) 및 상기 원본 배열(200)의 각 요소에 대한 반복 배열들을 포함하는 단일한 배열을 포함할 수 있다. 즉, 모니터링 데이터 구조는 원본 배열(200) 및 상기 원본 배열(200)의 복수 개의 요소들 각각에 대한 반복 배열에 대응하는 단일한 배열 k+1 차원의 배열일 수 있다.
예컨대, 원본 배열이 k 차원의 배열이라면, 모니터링 데이터 구조는 k+1 차원의 배열일 수 있다.
도 4의 모니터링 데이터 구조(400)는 단일한 배열을 포함하는 모니터링 데이터 구조(400)의 일 예를 나타낸다.
원본 배열(200)이 2 차원 배열일 때, 모니터링 데이터 구조(400)는 3차원의 배열일 수 있다.
모니터링 데이터 구조(400)의 제1 차원(410)의 범위(range)는 원본 배열의 제1 차원의 범위(range)와 동일하다. 또한, 모니터링 데이터 구조(400)의 제2 차원(420)의 범위(range)는 원본 배열의 제2 차원의 범위(range)와 동일하다.
즉, 원본 배열(200)이 k 차원의 배열일 때, 모니터링 데이터 구조(400)의 제1 내지 제k 차원의 범위들은 각각 원본 배열(200)의 대응하는 차원의 범위와 동일하다.
모니터링 데이터 구조(400)의 제3 차원(430)은 전술된 반복 배열에 대응한다. 모니터링 데이터 구조(400)의 제3 차원의 범위는 1 내지 L이다. 도 4에서, L = 4이다.
도 4에서, 모니터링 데이터 구조(400)의 제1 차원(410)의 크기는 2이고, 제2 차원(420)의 크기는 2이고, 제3 차원(430)의 크기는 4이다. 모니터링 데이터 구조(400)의 요소는 4 개의 불리언 값들이다.
이 중, 원본 배열(200)의 matrix(1, 1)에 대응하는 모니터링 데이터 구조(400)의 요소는 제1 차원이 1이고, 제2 차원이 2인 4 개의 요소들(440, 442, 444 및 446)이다.
모니터링 데이터 구조(400)의 각 요소는 전술된 반복 배열의 요소들이다. 즉, 모니터링 데이터 구조(400)의 각 요소는 L 개의 불리언 값들의 배열(또는, 길이가 L인 비트 스트링)이다.
즉, 모니터링 데이터 구조(400)는 하기의 표 2의 슈도 코드에 의해 선언될 수 있다.
bool[L] matrix_monitor(index 1, index 2, ... , index k, L);
여기서, matrix_monitor는 모니터링 데이터 구조(400)의 명칭이다.
index 1 내지 index k는 k 차원인 원본 배열의 각 차원의 범위를 나타낸다.
L은, 전술된 것처럼, 루프(300)의 반복 횟수이다.
여기서, 모니터링 구조(400)는, bool 값을 요소로 갖는 k+2 차원의 배열으로서 선언될 수 있다. k+2 차원의 배열은 하기의 표 3의 슈도 코드에 의해 선언될 수 있다.
bool matrix_monitor(index 1, index 2, ... , index k, L, L);
도 5는 본 발명의 일 예에 따른 모니터링 코드를 나타낸다.
도 5에서, 모니터링 코드(510)가 삽입된 루프(500)가 도시되었다.
모니터링 코드(510) 내에서, matrix_monitor(x, y, i)(520)의 값이 갱신된다.
즉, 원본 배열(200) 요소들 중 인덱스 x 및 y에 의해 특정되는 요소(320)가 "ex_function()"(330)에 의해 갱신되고, 모니터링 데이터 구조(400)의 요소들 중 인덱스 x, y 및 i에 의해 특정되는 요소(520)가 "mark(i)"(530)에 의해 갱신된다.
"mark(i)"(530)는 길이가 L인 불리언 배열 중 i 번째 요소의 값을 참으로 변경하는 함수이다. 즉, "mark(i)" 함수(530)에 의해, 모니터링 데이터 구조(400)의 요소들 중 인덱스 x, y 및 i에 의해 특정되는 요소(520)의 i 번째 불리언 값이 참으로 갱신된다.
도 6은 본 발명의 일 예에 따른 루프 실행 중의 모니터링 데이터 구조의 갱신을 나타낸다.
루프(300)를 포함하는 실행 코드가 실행되면, 루프(300)가 반복된다.
루프(300)가 2 번째 반복될 때, 원본 배열(200)의 요소들 중 matrix(1, 1)이 갱신된다. 즉, 루프(300)가 2 번째 반복될 때, x = 1, y = 1가 된다.
이 때, 모니터링 코드(510)에 의해 모니터링 데이터 구조(400) 중 matrix_monitor(1, 1, 2)(442)이 갱신된다. 즉, matrix_monitor(1, 1, 2)이 가리키는 불리언 배열(610) 중 2 번째 요소(620)의 값이 참으로 갱신된다. 만일, 모니터링 데이터 구조(400)의 요소가 비트 스트링이면, matrix_monitor(1, 1, 2)이 가리키는 비트 스트링이 "0010"으로 갱신된다.
도 7은 본 발명의 일 예에 따른 루프 실행이 완료된 후의 모니터링 데이터 구조를 나타낸다.
도 7에서, 루프(300)의 제1 반복에서 matrix(2, 2)가 갱신되고, 제2 반복에서 matrix(1, 1)이 갱신되고, 제3 반복에서 matrix(2, 1)가 갱신되고, 제4 반복에서 matrix(1, 2)가 갱신되었을 때, 모니터링 데이터 구조(400)의 값이 표현되었다.
모니터링 데이터 구조(400)의 요소인 불리언 배열에서, 사선이 그어진 부분이 값이 참인 불리언 요소를 나타내고, 빈 부분이 값이 거짓인 불리언 요소를 나타낸다.
도 8은 본 발명의 일 예에 따른 병렬화된 루프를 나타낸다.
우선, 병렬화 포인트를 기준으로 루프의 병렬화를 설명한다.
병렬화 포인트는 루프(300)를 2 개의 서브 루프(810 및 820)들로 분할하는 지점이다.
도 7에서, 병렬화 포인트에 의해 루프(300)는 범위가 1 내지 2인 제1 서브 루프(810) 및 범위가 3 내지 4인 제2 서브 루프(820)로 분할되었다.
병렬화된 루프들(810 및 820)을 포함하는 소스 코드는 컴파일 등을 통해 실행 코드로 변환될 수 있다. 변환된 실행 코드는 다중 노드(node) 환경의 복수 개의 노드들에 의해 수행된다.
상단의 "if" 문(statement)(830)에 의해, 제1 서브 루프(810)는 제1 노드에 의해 실행된다. 또한, 중단의 "else if" 문(840)에 의해, 제2 서브 루프(820)는 제2 노드에 의해 실행된다.
마지막 "merge()" 함수(850)에 의해 제1 노드에 의해 갱신된 원본 행렬(200) 및 제2 노드에 의해 갱신된 원본 행렬(200)이 병합된다.
병렬화 포인트는 특정한 예측 방법에 의해서 결정될 수 있고, 임의로 결정될 수 있다. 즉, 임의로 수 개의 병렬화 포인트들이 설정될 수 있고, 그 중 특정 조건을 만족시키는 병렬화 포인트를 기준으로 루프(300)가 분할될 수 있다.
특정 병렬화 포인트에 의해 루프(300)가 병렬화될 수 있는지 여부는 모니터링 데이터 구조(400)의 결과 값에 기반하여 판단될 수 있다.
즉, 모니터링 데이터 구조(400)의 요소에 대한 OR 연산을 통해, 구간에 포함되는 반복들 내에서 어떤 요소가 갱신되었는지가 판별될 수 있다. 또한, 병렬화 포인트에 의해 구분되는 제1 구간 및 제2 구간 각각에서 어떤 요소들이 갱신되었는지가 판별될 수 있다.
만약, 제1 구간에서 갱신된 요소들 및 제2 구간에서 갱신된 요소들 중 겹치는 것이 있다면(즉, 특정 요소가 제1 구간 및 제2 구간 양자에서 갱신되었으면), 제1 구간 및 제2 구간은 병렬로 수행될 수 없다.
반면, 제1 구간에서 갱신된 요소들 및 제2 구간에서 갱신된 요소들 중 겹치는 것이 없다면(즉, 원본 배열(200) 내의 모든 요소가 최대 1 개의 구간(즉, 제1 구간 및 제2 구간 중 단지 하나의 구간)에서만 갱신되었으면, 제1 구간 및 제2 구간은 병렬로 수행될 수 있다. 따라서, 제1 구간 및 제2 구간을 나눈 병렬화 포인트에 의해 루프(300)는 제1 서브 루프(810) 및 제2 서브 루프(820)로 분할될 수 있다.
도 6에서, 제1 구간에 속하는 제1 반복 및 제2 반복에서, matrix(2, 2) 및 matrix(1, 1)이 갱신되었다. 제2 구간에 속하는 제3 반복 및 제4 반복에서, matrix(2, 1) 및 matrix(1, 2)가 갱신되었다. 따라서, 제1 구간 및 제2 구간은 병렬화되어 수행될 수 있다.
제1 반복에서 갱신되는 모니터링 데이터 구조(400)의 요소들은 "matrix_monitor(*, *, 1)"과 같이 표현될 수 있다.
또한, 제1 반복 또는 제2 반복에서 갱신되는 모니터링 데이터 구조(400)의 요소들은 논리 합으로써 표현될 수 있다. 즉, 제1 구간에 해당하는 제1 반복 및 제2 반복에서 갱신되는 모니터링 데이터 구조(400)의 요소들은 "matrix_monitor(*, *, 1) OR matrix_monitor(*, *, 2)"로 표현될 수 있다. 제2 구간에 해당하는 제3 반복 및 제4 반복에서 갱신되는 모니터링 데이터 구조(400)의 요소들은 "matrix_monitor(*, *, 3) OR matrix_monitor(*, *, 4)"로 표현될 수 있다.
제1 구간 및 제2 구간에서 갱신되는 모니터링 데이터 구조(400)의 요소들은 논리 곱으로써 표현될 수 있다. 즉, 제1 구간 및 제2 구간 양자에서 갱신되는 모니터링 데이터 구조(400)의 요소들은 하기의 표 4와 같이 표현될 수 있다.
( matrix_monitor(*,*,1) OR matrix_monitor(*,*,2) ) AND ( matrix_monitor(*,*,3) OR matrix_monitor(*,*,4) )
상기의 수학식 4의 결과가 0(또는, 공집합)이라는 것은, 모니터링 데이터 구조(400)의 요소들 중 어떤 요소도 양 구간들에서 중복되어 갱신되지 않는다는 것을 의미한다. 따라서, 이러한 경우, 양 구간들은 병렬로 수행될 수 있다.
다음으로, 병렬화 포인트가 하나 이상인 경우를 검토한다. 즉, 루프(200)가 k 개의 구간들로 분할된 경우를 검토한다.
원본 배열(200)의 복수 개의 요소들 중 제x 요소가 k 개의 구간들 중, 특정한 제y 구간에서 갱신되었는지 여부가 판단될 수 있다.
즉, 제x 요소에 대응하는 반복 배열의 요소들 중, 상기의 제 y 구간이 포함하는 반복들에 대응하는 인덱스들의 요소들의 값들을 논리합 한 값에 기반하여 판단될 수 있다.
예컨대, 제1 구간이 포함하는 반복들이 제1 반복 및 제2 반복이면, 2 개의 반복들에 대응하는 인덱스는 "1" 및 "2"이다. 원본 배열(200)의 제x 요소에 대응하는 반복 배열의 제1 요소(즉, 반복 배열의 제1 불리언 배열) 및 제2 요소(즉, 반복 배열의 제2 불리언 배열)의 값을 논리 합함으로써(즉, 제1 불리언 배열의 각 요소들 및 제2 불리언 배열의 각 요소들을 서로 논리합함으로써 논리합된 불리언 배열을 생성함으로써), 제x 요소가 제1 구간에서 갱신되었는지 여부가 판단될 수 있다.
따라서, 전술된 방법을 사용하여 원본 배열(200)의 제x 요소가 k 개의 구간들 중 제y 구간 및 제z 구간에서 중복 갱신되었는지 여부가 판단될 수 있다. 즉, 제y 구간에 대한 제1 논리합된 불리언 배열을 생성하고, 제z 구간에 대한 제2 논리합된 불리언 배열을 생성하고, 제1 논리합된 불리언 배열 및 제2 논리합된 불리언 배열을 논리곱한 논리곱된 불리언 배열을 생성함으로써 원본 배열(200)의 제x 요소가 제y 구간 및 제z 구간에서 중복 갱신되었는지 여부가 판단될 수 있다.
논리곱된 불리언 배열이 참 값을 갖는 요소를 포함한 경우, 특정한 요소가 제y 구간 및 제z 구간에서 중복된 것이다.
상기의 설명은, k가 3 이상인 경우에도 적용될 수 있다. 이 경우, 제1 논리합된 불리언 배열 내지 제k 논리합된 불리언 배열 중 가능한 모든 논리합된 블리언 배열 쌍을 논리곱함으로써 제x 요소가 특정한 2 개의 구간에서 중복 갱신되었는지 여부가 판단될 수 있다.
원본 배열(200)의 모든 요소에 대해, 상기의 논리합을 계산 및 검사함으로써 k 개의 구간들이 병렬 수행될 수 있는지 여부가 판단될 수 있다. 즉, 원본 배열(200)의 모든 요소가 중복 갱신되지 않았으면, k 개의 구간들은 병렬 수행될 수 있다.
도 9는 본 발명의 일 실시예에 따른 배열의 요소들에 대한 연산의 병렬화 장치의 구조도이다.
병렬화 장치(900)는 병렬화 대상 객체 선택부(910)를 포함할 수 있다.
병렬화 장치(910)는 모니터링 코드 삽입부(920), 결과 값 획득부(930), 구간 결정부(940), 중복 갱신 요소 판단부(950) 및 소스 코드 갱신부(960)를 포함한다.
병렬화 대상 객체 선택부(910)는 소스 코드 내에서 제1 배열을 선택하고, 소스 코드 내에서 루프를 선택한다. 제1 배열은 전술된 원본 배열(200)일 수 있다. 루프는 전술된 병렬화의 대상이 되는 루프(300)일 수 있다.
모니터링 코드 삽입부(920)는 소스 코드 내의 루프 내부에 모니터링 코드를 삽입한다. 루프는 제1 배열의 복수 개의 요소들에게 값을 할당한다. 상기 모니터링 코드는 모니터링 데이터 구조를 포함하고, 모니터링 데이터 구조는 루프의 각 반복에서 제1 배열의 복수 개의 요소들 중 어떤 요소가 갱신되었는지를 기록한다.
제1 배열이 k 차원이면, 모니터링 데이터 구조는 k 차원의 요소들 각각이 루프의 몇 번째 반복들에서 갱신되었는지를 나타낼 수 있다.
루프의 반복 횟수는 L로 나타낼 수 있다.
모니터링 데이터 구조는 제1 배열의 복수 개의 요소들 각각에 대한 제2 배열을 포함할 수 있다. 제2 배열은 전술된 반복 배열일 수 있다.
모니터링 데이터 구조는 제1 배열 및 제1 배열의 복수 개의 요소들 각각에 대한 제2 배열에 대응하는 k+1 차원의 배열일 수 있다.
이 때, 제2 배열은 크기가 L인 1차원 배열일 수 있고, 제2 배열의 요소들 각각은 L개의 불리언(Boolean) 값들의 배열일 수 있다.
모니터링 코드는, 루프의 i 번째 반복에서 제1 배열의 복수 개의 요소들 중 특정 요소가 갱신되면, 상기 갱신된 요소에 대응하는 제2 배열의 i 번째 요소의 i 번째 불리언 값을 참(ture)으로 세트할 수 있다.
결과 값 획득부(930)는 루프의 실행이 종료된 후의 모니터링 데이터 구조의 결과 값을 획득한다.
구간 결정부(940)는 루프에 대한 n 개의 구간들을 결정한다. n은 2 이상의 정수이고, 루프의 각 반복은 n 개의 구간들 중 하나의 구간에 포함된다.
n은 2일 수 있다. 이 경우, 제1 구간은 상기 루프가 수행하는 반복들 중 앞부분일 수 있고, 제2 구간은 상기 반복들 중 뒷부분일 수 있다.
중복 갱신 요소 판단부(950)는 결과 값에 기반하여, 제1 배열의 복수 개의 요소들 중 중복 갱신 요소가 있는지 여부를 판단한다. 중복 갱신 요소는 n 개의 구간들 중 2 개 이상의 구간들에서 갱신되는 요소이다.
중복 갱신 요소 판단부(950)는, 제1 배열의 복수 개의 요소들 중 제x 요소에 대응하는 제2 배열의 요소들 중, 제y 구간이 포함하는 반복들에 대응하는 인덱스들의 요소들의 값들을 논리합 한 값에 기반하여, 제x 요소가 상기 k 개의 구간들 중 상기 제y 구간에서 갱신되었는지 여부를 판단할 수 있다.
중복 갱신 요소 판단부(950)는, 제1 배열의 복수 개의 요소들 중 제x 요소에 대응하는 제2 배열의 요소들 중, 제y 구간이 포함하는 반복들에 대응하는 인덱스의 요소들의 값들을 논리합 한 제1 논리합을 계산하고, 제z 구간이 포함하는 반복들에 대응하는 인덱스의 요소들의 값들을 논리합 한 제2 논리합을 계산하고, 상기 제1 논리합 및 상기 제2 논리합을 논리곱함으로써, 제x 요소가 k 개의 구간들 중 제y 구간 및 제z 구간에서 중복 갱신되었는지 여부를 판단할 수 있다.
소스 코드 갱신부(960)는 중복 갱신 요소가 발견되지 않은 경우, 루프를 병렬로 실행되는 n 개의 구간들 각각에 대한 루프들로 분할하여 소스 코드를 갱신한다.
앞서 도 1 내지 도 8을 참조하여 설명된 본 발명의 일 실시예에 따른 기술 적 내용들이 본 실시예에도 그대로 적용될 수 있다. 따라서 보다 상세한 설명은 이하 생략하기로 한다.
상기 구성요소들(910 내지 960)의 기능은 단일한 제어부(도시되지 않음)에서 수행될 수 있다. 이때, 상기 제어부는 단일(single) 또는 복수(multi) 칩(chip), 프로세서(processor) 또는 코어(core)를 나타낼 수 있다. 상기 구성요소들(910 내지 960) 각각은 상기 제어부에서 수행되는 함수(function), 라이브러리(library), 서비스(service), 프로세스(process), 쓰레드(thread) 또는 모듈(module)을 나타낼 수 있다.
본 발명의 일 실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 롬(ROM), 램(RAM) 및 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 본 발명의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
900: 배열의 요소들에 대한 연산의 병렬화 장치
920: 모니터링 코드 삽입 부
930: 구간 결정부
960: 소스 코드 갱신부

Claims (20)

  1. 소스 코드 내의 루프 내부에 모니터링 코드를 삽입하는 단계 - 상기 루프는 제1 배열의 복수 개의 요소들에게 값을 할당함. 상기 모니터링 코드는 모니터링 데이터 구조를 포함하고, 상기 모니터링 데이터 구조는 상기 루프의 각 반복에서 상기 제1 배열의 복수 개의 요소들 중 어떤 요소가 갱신되었는지를 기록함. -;
    상기 루프의 실행이 종료된 후의 상기 모니터링 데이터 구조의 결과 값을 획득하는 단계;
    상기 루프에 대한 n 개의 구간들을 결정하는 단계 - 상기 n은 2 이상의 정수임, 상기 루프의 각 반복은 상기 n 개의 구간들 중 하나의 구간에 포함됨. -;
    상기 결과 값에 기반하여, 상기 제1 배열의 복수 개의 요소들 중 중복 갱신 요소가 있는지 여부를 판단하는 단계 - 상기 중복 갱신 요소는 상기 n 개의 구간들 중 2 개 이상의 구간들에서 갱신되는 요소임. -; 및
    상기 중복 갱신 요소가 발견되지 않은 경우, 상기 루프를 병렬로 실행되는 상기 n 개의 구간들 각각에 대한 루프들로 분할하여 상기 소스 코드를 갱신하는 단계
    를 포함하고,
    상기 제1 배열은 k 차원이고, 상기 k는 1 이상의 정수이고, 상기 모니터링 데이터 구조는 상기 k 차원의 요소들 각각이 상기 루프의 몇 번째 반복들에서 갱신되었는지를 나타내는, 배열의 요소들에 대한 연산의 병렬화 방법.
  2. 제1항에 있어서,
    상기 소스 코드 내에서 상기 제1 배열을 선택하는 단계; 및
    상기 소스 코드 내에서 상기 루프를 선택하는 단계
    를 더 포함하는, 배열의 요소들에 대한 연산의 병렬화 방법.
  3. 제1항에 있어서,
    상기 n은 2이고,
    제1 구간은 상기 루프가 수행하는 반복들 중 앞부분이고, 제2 구간은 상기 반복들 중 뒷부분인, 배열의 요소들에 대한 연산의 병렬화 방법.
  4. 삭제
  5. 제1항에 있어서,
    상기 루프의 반복 횟수는 L이고,
    상기 모니터링 데이터 구조는 상기 제1 배열의 복수 개의 요소들 각각에 대한 제2 배열을 포함하고, 상기 제2 배열은 크기가 L인 1차원 배열이고, 상기 제2 배열의 요소들 각각은 L개의 불리언(Boolean) 값들의 배열인, 배열의 요소들에 대한 연산의 병렬화 방법.
  6. 제5항에 있어서,
    상기 모니터링 코드는, 상기 루프의 i 번째 반복에서 상기 제1 배열의 복수 개의 요소들 중 특정 요소가 갱신되면, 상기 갱신된 요소에 대응하는 제2 배열의 i 번째 요소의 i 번째 불리언 값을 참(ture)으로 세트하는, 배열의 요소들에 대한 연산의 병렬화 방법.
  7. 제5항에 있어서,
    상기 제1 배열의 복수 개의 요소들 중 제x 요소가 상기 k 개의 구간들 중 제y 구간에서 갱신되었는지 여부는, 상기 제x 요소에 대응하는 상기 제2 배열의 요소들 중, 상기 제y 구간이 포함하는 반복들에 대응하는 인덱스들의 요소들의 값들을 논리합 한 값에 기반하여 판단되는, 배열의 요소들에 대한 연산의 병렬화 방법.
  8. 제5항에 있어서,
    상기 제1 배열의 복수 개의 요소들 중 제x 요소가 상기 k 개의 구간들 중 제y 구간 및 제z 구간에서 중복 갱신되었는지 여부는, 상기 제x 요소에 대응하는 상기 제2 배열의 요소들 중, 상기 제y 구간이 포함하는 반복들에 대응하는 인덱스의 요소들의 값들을 논리합 한 제1 논리합을 계산하고, 상기 제z 구간이 포함하는 반복들에 대응하는 인덱스의 요소들의 값들을 논리합 한 제2 논리합을 계산하고, 상기 제1 논리합 및 상기 제2 논리합을 논리곱(and)함으로써 판단되는, 배열의 요소들에 대한 연산의 병렬화 방법.
  9. 제5항에 있어서,
    상기 모니터링 데이터 구조는 상기 제1 배열 및 상기 제1 배열의 복수 개의 요소들 각각에 대한 상기 제2 배열에 대응하는 k+1 차원의 배열인, 배열의 요소들에 대한 연산의 병렬화 방법.
  10. 제1항에 있어서,
    상기 루프의 실행이 종료된 후의 상기 모니터링 데이터 구조의 결과 값을 획득하는 단계는,
    상기 소스 코드에 기반한 실행 코드를 생성하는 단계; 및
    상기 실행 코드를 실행함으로써 상기 루프의 실행이 종료된 후의 상기 결과 값을 획득하는 단계
    를 포함하는, 배열의 요소들에 대한 연산의 병렬화 방법.
  11. 소스 코드 내의 루프 내부에 모니터링 코드를 삽입하는 모니터링 코드 삽입부 - 상기 루프는 제1 배열의 복수 개의 요소들에게 값을 할당함. 상기 모니터링 코드는 모니터링 데이터 구조를 포함하고, 상기 모니터링 데이터 구조는 상기 루프의 각 반복에서 상기 제1 배열의 복수 개의 요소들 중 어떤 요소가 갱신되었는지를 기록함. -;
    상기 루프의 실행이 종료된 후의 상기 모니터링 데이터 구조의 결과 값을 획득하는 결과 값 획득부;
    상기 루프에 대한 n 개의 구간들을 결정하는 구간 결정부 - 상기 n은 2 이상의 정수임, 상기 루프의 각 반복은 상기 n 개의 구간들 중 하나의 구간에 포함됨. -;
    상기 결과 값에 기반하여, 상기 제1 배열의 복수 개의 요소들 중 중복 갱신 요소가 있는지 여부를 판단하는 중복 갱신 요소 판단부 - 상기 중복 갱신 요소는 상기 n 개의 구간들 중 2 개 이상의 구간들에서 갱신되는 요소임. -; 및
    상기 중복 갱신 요소가 발견되지 않은 경우, 상기 루프를 병렬로 실행되는 상기 n 개의 구간들 각각에 대한 루프들로 분할하여 상기 소스 코드를 갱신하는 소스 코드 갱신부
    를 포함하고,
    상기 제1 배열은 k 차원이고, 상기 k는 1 이상의 정수이고, 상기 모니터링 데이터 구조는 상기 k 차원의 요소들 각각이 상기 루프의 몇 번째 반복들에서 갱신되었는지를 나타내는, 배열의 요소들에 대한 연산의 병렬화 장치.
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR1020110001327A 2011-01-06 2011-01-06 배열의 병렬화 포인트 탐색 방법 및 장치 KR101245494B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020110001327A KR101245494B1 (ko) 2011-01-06 2011-01-06 배열의 병렬화 포인트 탐색 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110001327A KR101245494B1 (ko) 2011-01-06 2011-01-06 배열의 병렬화 포인트 탐색 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20120079957A KR20120079957A (ko) 2012-07-16
KR101245494B1 true KR101245494B1 (ko) 2013-03-25

Family

ID=46712740

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110001327A KR101245494B1 (ko) 2011-01-06 2011-01-06 배열의 병렬화 포인트 탐색 방법 및 장치

Country Status (1)

Country Link
KR (1) KR101245494B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111930795B (zh) * 2020-07-02 2022-11-29 苏州浪潮智能科技有限公司 一种分布式模型搜索方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5121498A (en) 1988-05-11 1992-06-09 Massachusetts Institute Of Technology Translator for translating source code for selective unrolling of loops in the source code
KR20090017400A (ko) * 2007-08-14 2009-02-18 오끼 덴끼 고오교 가부시끼가이샤 프로그램 변환장치 및 컴파일러 프로그램
KR20110054102A (ko) * 2009-11-17 2011-05-25 한국과학기술원 비정규 리덕션의 병렬화 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5121498A (en) 1988-05-11 1992-06-09 Massachusetts Institute Of Technology Translator for translating source code for selective unrolling of loops in the source code
KR20090017400A (ko) * 2007-08-14 2009-02-18 오끼 덴끼 고오교 가부시끼가이샤 프로그램 변환장치 및 컴파일러 프로그램
KR20110054102A (ko) * 2009-11-17 2011-05-25 한국과학기술원 비정규 리덕션의 병렬화 방법

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
논문1:GEOCHEMICAL JOURNAL *

Also Published As

Publication number Publication date
KR20120079957A (ko) 2012-07-16

Similar Documents

Publication Publication Date Title
US8122442B2 (en) Method and system for array optimization
Tan et al. Efficient and precise points-to analysis: modeling the heap by merging equivalent automata
Van Dijk et al. Sylvan: Multi-core decision diagrams
EP3572952A1 (en) Unified optimization of iterative analytical query processing
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US9152389B2 (en) Trace generating unit, system, and program of the same
US9690552B2 (en) Technologies for low-level composable high performance computing libraries
Wang et al. Scalable and deterministic timing-driven parallel placement for FPGAs
JP5403999B2 (ja) トンネリング及びスライシング・ベースのbmc分解のためのシステム及び方法
JP5479942B2 (ja) 並列化方法、システム、及びプログラム
Shterenlikht et al. Fortran 2008 coarrays
Lashgar et al. IPMACC: open source openacc to cuda/opencl translator
KR101245494B1 (ko) 배열의 병렬화 포인트 탐색 방법 및 장치
US7308657B2 (en) Method for generating hints for program analysis
Cesare et al. Practical parallelization of scientific applications
Hamez et al. Building efficient model checkers using hierarchical set decision diagrams and automatic saturation
Coutts et al. Deterministic parallel programming with Haskell
JP4787456B2 (ja) 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム
Sen et al. Speeding up cycle based logic simulation using graphics processing units
US8549456B2 (en) System and method for circuit design floorplanning
Feldman et al. Efficient Memory Partitioning in Software Defined Hardware
Leiserson et al. Efficient evaluation of large polynomials
Fabre et al. Enhancing Multi-threaded legalization through $ k $-d tree circuit partitioning
Gankema Loop-Adaptive Execution in Weld
Save ViennaRNA–Optimizing a Real-world RNA Folding Program

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20151214

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161227

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180313

Year of fee payment: 19