KR20080093108A - 프로그램 병렬 실행 시스템 및 방법 - Google Patents

프로그램 병렬 실행 시스템 및 방법 Download PDF

Info

Publication number
KR20080093108A
KR20080093108A KR1020087018262A KR20087018262A KR20080093108A KR 20080093108 A KR20080093108 A KR 20080093108A KR 1020087018262 A KR1020087018262 A KR 1020087018262A KR 20087018262 A KR20087018262 A KR 20087018262A KR 20080093108 A KR20080093108 A KR 20080093108A
Authority
KR
South Korea
Prior art keywords
concurrency
code
side effects
execution
markers
Prior art date
Application number
KR1020087018262A
Other languages
English (en)
Inventor
앤드류 리차드
앤드류 쿡
콜린 라일리
Original Assignee
코드플레이 소프트웨어 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 코드플레이 소프트웨어 리미티드 filed Critical 코드플레이 소프트웨어 리미티드
Publication of KR20080093108A publication Critical patent/KR20080093108A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

Landscapes

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

Abstract

병렬 프로세서상에서 컴퓨터 프로그램을 실행하는 컴퓨터 시스템이 제공된다. 컴퓨터 시스템은 동시성 마커들 사이의 코드가 병렬로 실행될 수 있고 지연된 부작용들과 함께 실행되어야 함을 나타내는 동시성 마커들을, 프로그램 내에서, 식별하는 컴파일러; 및 부작용들의 큐를 발생하기 위해 동시성 마커에 의해 식별된 코드를 실행하고 그 코드의 실행이 완료된 후 상기 부작용들의 큐를 순차적으로 실행하도록 동작 가능한 실행 시스템을 갖는다.
병렬 프로세서, 동시성 마커, 코드, 지연된 부작용, 프로그램, 컴파일러

Description

프로그램 병렬 실행 시스템 및 방법{A SYSTEM AND METHOD FOR PARALLEL EXECUTION OF A PROGRAM}
본 발명은 컴퓨터 프로그램의 병렬 실행 시스템 및 방법에 관한 것이다.
US5852734호에는, 루프(loop)를 복수의 프로세서들 상으로 분산하여 병렬로 실행함으로써 프로그램 실행 속도를 증가시키는 병렬 컴파일러(parallel compiler)가 기재되어 있다. 먼저, 병렬로 실행되어야 하는 원시 프로그램 내의 루프가 위치된다. 다음에, 이 루프는 데이터 종속성(data dependence)을 위해 분석된다. 분석 결과는 데이터 종속성 벡터를 계산하는데 이용된다. 다음에, 루프에서 실행되는 인덱스의 모든 영역들이 분산되어 다수의 프로세서들에 할당된다. 또한, 데이터가 프로세서들 사이에서 전송될 필요가 있는지를 결정한다. 어레이 인덱스 공간(array index space)에 기초하여, 통신 벡터들이 계산된다. 데이터 종속성 벡터들과 통신 벡터들은 통신 종속성 벡터들을 계산하기 위해 앤드 연산(AND)된다. 이때, 피연산자(operands) 전달 및 루프 실행의 방식은 통신 종속성 벡터들의 값들에 기초하여 결정된다.
US5852734호에 기재된 배열, 및 실제로 다른 알려진 병렬화 시스템(parallelization system)의 문제점은 디버그(de-bug)하기가 매우 어렵다는 점이 다. 이는 중요한 실질적인 문제이다. 이는 알려진 시스템들이 일반적으로 성질상 비결정적(non-deterministic)이기 때문이다. 이는 병렬화된 알고리즘의 어떤 부분들이 먼저 종료하는 다른 부분들에 종속됨을 의미한다. 랜덤 프로세서 에러와 같은 여러 가지 이유로, 프로그램의 부분들의 타이밍에 혼란이 야기될 수 있다. 이에 따라 병렬화된 알고리즘에 장애가 초래될 수 있다. 타이밍 에러는 랜덤 이벤트로 인해 초래될 수 있기 때문에, 이러한 타입의 문제를 찾아내는 것은 매우 어렵다. 이는 시스템의 신뢰성이 보장될 수 없음을 의미한다.
또한, 다른 알려진 시스템들은 단일의 공유 메모리 공간을 갖는다. 새로운 아키텍처는 실행 성능을 증가시키기 위해 다수의 메모리 공간들을 제공한다. 그러므로, 다수의 하드웨어 플랫폼들(hardware platform) 상에서의 작업을 요구하는 고성능 병렬화 시스템 내에서는 다수의 메모리 공간들을 지원하는 것이 필수적이다.
본 발명에 따라, 컴퓨터 프로그램 내에서 동시성 마커들(concurrency markers) 사이의 코드 내에서 어떤 부작용들(side effects)이 지연되어야 함을 나타내는 동시성 마커들을 식별하는 수단을 가진 컴파일러, 및 동시성 마커들에 의해 식별된 코드가 실행시 부작용들의 큐를 발생하고 그 코드의 실행이 완료된 후 큐를 순차적으로 실행하도록 보장하는 실행 시스템을 가진 병렬화 시스템이 제공되어 있다. 실행 시스템은 소프트웨어, 하드웨어, 또는 이들의 조합으로 구현될 수 있다.
어느 코드가 부작용들을 지연시켰는지를 나타내는 마커들을 사용하고, 이 마커들을 인식하기 위해 컴파일러를 적응시킴으로써, 컴파일러가 소프트웨어를 자동으로 병렬화시킬 수 있도록 하는 매우 간단하고 본래 결정적인 기술이 제공되어 있다. 이는 디버깅(de-bugging)을 간단화하여 신뢰성을 향상시킨다. 또한, 동시성 명령들이 코드를 실질적으로 독립적인 블록들로 분리하기 때문에, 프로그램은 광범위한 상이한 시스템들 상에서 구동될 수 있다. 구체적으로, 동시성 명령은 데이터를, 상이한 메모리 공간들에 저장될 수 있는 블록들로 분리한다. 또한, 동시성 블록들은 자동 병렬화될 수 있기 때문에, 시스템은 프로세서들 및 메모리 공간들의 수 관점에서 쉽게 스케일러블(scalable)할 수 있다.
컴파일러는 동시성 마커들 내에서 프로그램이 병렬로 실행될 수 있는 별개의 프로그램 조각들을 형성하기 위해 선택적으로 분리될 수 있는 경우를 나타내는 하나의 이상의 분리된 마커를 식별하도록 동작 가능할 수 있다. 실행 시스템은 코드의 조각들을 동시에 실행하고, 부작용들의 큐를 발생하고, 그 코드의 실행이 완료된 후 부작용들의 큐를 순차적으로 실행한다.
컴파일러는 동시성 마커 내에서 병렬 실행을 위한 다수의 변수들로 선택적으로 분리될 수 있는 하나의 이상의 특별한 변수, 및 변수들의 출력들이 어떻게 단일 결과로 병합될 수 있는지를 나타내는 병합 명령을 인식하도록 동작 가능할 수 있다. 실행 시스템은 분리된 변수들이 실행을 위해 하나의 이상의 상이한 프로세서들로 향하고, 각각의 변수의 업데이트 버전을 수신하고, 이들을 병합하여 메인 메모리에 저장하도록 동작 가능할 수 있다.
일 실시예에서, 본 발명은 컴퓨터 프로그램을 병렬화한 다음에 실행하는 병렬화 시스템을 구성하며, 이 시스템은 프로그램 내에서 동시성 마커들 사이의 코드가 지연된 부작용들과 함께 실행되어야 함을 나타내는 동시성 마커를 식별하고, 마커들 사이의 코드가 병렬화될 수 있는지를 결정하고, 코드를 실행을 위해 하나의 이상의 복수의 프로세서에 전송하고, 부작용들의 큐를 발생하기 위해 동시성 마커에 의해 식별된 코드를 하나의 이상의 프로세서상에서 실행하며, 그 코드의 실행이 완료된 후 부작용들의 큐를 순차적으로 실행하도록 구성된다.
본 발명의 다른 양태에 따라, 프로그램 내에서 동시성 마커들 사이의 코드가 지연된 부작용들과 함께 실행되어야 함을 나타내는 동시성 마커를 식별하는 것, 부작용들의 큐를 발생하기 위해 동시성 마커에 의해 식별된 코드를 실행하는 것, 및 그 코드의 실행이 완료된 후 부작용들의 큐를 순차적으로 실행하는 것을 포함하는 컴퓨터 프로그램 실행 방법이 제공되어 있다. 상기 방법은 또한 마킹된 코드 내에서 병렬로 구동될 수 있는 조각들을 식별하는 것을 포함한다.
본 발명의 또 다른 양태에 따라, 바람직하게는 데이터 캐리어 또는 컴퓨터 판독가능 매체 상의 컴퓨터 프로그램이 제공되어 있고, 컴퓨터 프로그램은 동시성 마커들 사이의 코드, 즉 동시성 영역들이 지연된 부작용들과 함께 실행되어야 함을 나타내는 동시성 마커들을 포함한다.
동시성 마커들 내에 한 변수가 동시 실행을 위한 로컬 변수들로 분리가능한 경우를 나타내는 하나의 이상의 분리가능 객체들, 및 상기 로컬 변수들이 어떻게 단일 변수로 다시 병합될 수 있는지를 나타내는 병합 명령이 포함된다.
바람직하게, 다수의 동시성 영역들이 정의되며, 이들은 병렬로 실행가능하다.
하나 이상의 동시성 영역들이 외부 동시성 영역 내에 내포될 수 있다.
이제, 첨부 도면을 참조하여 본 발명의 각종 양태에 대해 단지 예로서 설명한다.
도 1은 병렬화 시스템의 블록도.
도 2는 컴파일 프로세스의 흐름도.
도 3은 도 2의 프로세스에서 사용되는 시브(sieve)의 개략도.
도 4는 시브 계산(sieve computations)에서 함축적인 동시성(implicit concurrency)을 도시한 개략도.
도 5는 순차 계산이 어떻게 조각들(fragments)로 분리되는지를 도시한 도면.
도 6은 파편을 실행하는 시브 블록(sieve block)으로 그리고 시브 블록에서 점프하는 제어 흐름을 도시한 도면.
도 7은 분리될 수 있는 객체들과의 동시성의 개략도.
도 8은 내포된 시브들(nested sieves)의 개략도.
도 9는 복수의 병렬 시브들의 개략도.
본 발명은 한 프로그램을 별개의 코드 조각들(code fragments)로 병렬화하는 컴파일러, 및 코드 조각들을 병렬로 실행하는 실행 시스템으로 구성된 병렬화 시스템을 제공한다. 본 발명은 컴퓨터 프로그램들이 이식 가능하고(portable), 확장/축소 가능하고(scalable), 신뢰성이 있는 방식으로 병렬화되도록 한다. 이는 특정 소프트웨어 코드 구조, 및 컴파일러(compiler), 즉 프로그래머 원시 코드(programmer source code)를, 이 구조를 인식하고 이 구조에 기초하여 병렬화 판단을 하도록 동작 가능한 머신-실행가능 코드(machine-executable code)로 변환하는 프로그램을 이용하여 달성된다. 대부분의 소프트웨어는 본 발명의 요건을 따르도록 적응될 수 있지만, C 및 C++와 같은 프로그래밍 언어로 기록된 소프트웨어가 특히 본 발명에 잘 적응된다.
소프트웨어를 본 발명을 따르도록 적응시키기 위해, 병렬화되어야 하는 프로그램 내에 동시성 영역들(concurrency regions)이 마킹(mark)되어야 한다. 동시성 영역은 프로그래머가 병렬로 실행되기를 원하는 원시 코드의 섹션(section)이다. 동시성 영역들을 마킹하는 것은 소프트웨어가 기록되고 있을 때 또는 추후에 소프트웨어가 후속하여 병렬화를 위해 적응되어야 하는 경우에 실행될 수 있다. 동시성 영역들은 2가지 목적이 있다. 즉 , 첫 번째 목적은 코드를 병렬로 구동해야 하는 경우를 컴파일러에 지시해 주는 것이고. 두 번째 목적은 부작용(side-effects)이 지연되어야 하는 코드의 블록들을 마킹하는 것이다. 부작용들은 시브 블록 외부에 정의된 프로그램 상태의 어느 부분에 대한 수정을 의미한다. 이는 메모리 기록, 하드웨어 상태 수정, 및 시브 시스템 외부에 정의된 함수들의 실행을 포함한다. 마킹된 블록들의 실행은 두 부분들로 분리된다. 제1 부분, 즉 시브 계산(sieve computation)은 부작용들의 큐(queue)를 생성 및 저장하나, 부작용들의 적용을 제외시키고, 제2 부분, 즉 부작용 계산(side-effect computation)은 부작용 큐에 저장된 프로그램 상태를 순차적으로 수정한다. 이에 따라 시브 계산은 병렬 화될 수 있다.
다수의 메모리 공간들을 가진 시스템에서, 실행은 3개의 부분들로 분리될 수 있다. 이들 중 제1단계, 즉 데이터 로딩(data loading) 단계는 시브 계산을 수행하는데 필요한 데이터를 계산하여 이를 그 실행을 위해 선택된 메모리 공간에 전달한다. 제2 단계, 즉 데이터 처리 단계는 로딩된 데이터를 실행 유닛 상에서 처리하고 부작용들의 큐를 생성한다. 이들 부작용은 제3 단계, 즉 되기록(write back) 단계에서 페어런트 메모리(parent memory)에 되기록(write back)된다. 일부 아키텍처 상에서, 데이터 로딩 단계 및 데이터 처리 단계는 인터리빙(interleave)될 수 있다. 이는 메모리 로드가 완료되기를 기다리면서 데이터 처리 작업을 워크 큐(work queue)에 보류시키고 준비된 것으로 마킹된 이 워크 큐로부터 검색되는 다른 계산을 계속함으로써 달성될 수 있다. 보류된 작업에 필요한 데이터의 로딩은 백그라운드(background)에서 수행된다. 로딩이 완료된 때, 보류된 작업은 자유 실행 유닛(free execution unit)에 의해 재개될 준비를 한다.
동시성 영역에는, 일반적으로 로컬 변수들(local variables)과 외부 변수들(external variables)이 존재한다. 로컬 변수들은 동시성 영역 내에서 정의된다. 외부 변수들은 동시성 영역 외부에 정의된다. 동시성 영역 부작용들은 외부 변수 수정이다. 동시성 영역은 프로그램 제어가 동시성 영역을 벗어난 후까지 이들 부작용을 지연시킨다. 이들 지연된 부작용은 메모리 기록 및 기능 호출을 포함하는 큐잉된 부작용들과, 병합 동작과 같은 다른 부작용들로 분리될 수 있다.
동시성 영역들은 시브를 이용하여 프로그래머에 의해 정의된다. 이는 부작 용을 지연시킨 프로그래머에 의해 정의된 프로그램의 섹션이다. 시브는 모든 메모리 기록들 및 다른 부작용들이 시브의 끝(유효하게는 시브가 부작용들을 필터링할 때)까지 지연되어야 함을 의미하는 것으로 컴파일러에 의해 인식 가능하다. 시브의 의미는 작업이 행해지는 타이밍과 순서인 것으로 명확하게 정의되므로, 시브를 사용하는 프로그램들은 결정적이다. 시브는 어떤 적합한 신택스 형태(syntactic form), 예컨대, 시브 {...}를 취하여, 시브 블록을 정의할 수 있다. 이는 시브를 원시 코드로 기술하는 방식이다. 괄호 안의 코드는 단일 동시성 영역 내에 있다. 따라서, 각각의 시브 블록은 동시성 영역이다. 시브 블록 내의 부작용들을 지연시킴으로써, 시브는 내부의 변수들이 블록 외부의 변수들의 수정에 좌우될 수 없도록 보장한다. 시브 블록은 입력들이 이용가능한 메모리의 전체이고 출력들이 부작용들의 큐인 함수(function)로 볼 수 있다. 상술한 바와 같이, 시브 계산은 부작용들의 큐를 생성하나, 부작용들의 실행은 제외시킨다.
시브 블록들은 데이터 및 제어 흐름이 명확하게 정의되는 함수들 또는 절차들로 추출된다. 이들 추출된 함수들은 모든 다른 코드 블록들과는 독립적이며, 그러므로 별개로 컴파일될 수 있다. 독립적이고 결정적인 이들 코드 블록을 별개로 컴파일하는 능력은 각각의 시브 블록이 상이한 타겟 아키텍처에 컴파일되어, 최대 크로스 플랫폼 호환성(maximum cross platform compatibility)을 얻는 것을 의미한다.
상기한 간단한 시브의 변화시, 2개 또는 그 이상의 시브들이 내포될 수 있다. 이 경우에, 포함된 시브 내부에서 로컬 메모리에의 기록(및 다른 로컬 부작용 들)은 내포된 시브를 종료할 때 실행된다. 외부 기록 및 다른 부작용은 포함된 시브에 대한 적합한 큐에 추가된다. 시브들을 내포시킬 때, 비(non)-시브 코드로부터 아래쪽으로 측정된 특정 시브의 절대 내포 깊이를 시브 깊이(sieve depth)라고 한다. 특정 시브의 시브 레벨(sieve level), 또는 그 시브 내부에 선언된 구성(construct)은 현재 시브로부터 위쪽으로 측정된 상대 레벨이다.
특정 시브 외부에 있는 데이터를 가리키는 포인터들이 시브들 내부에 존재할 수 있기 때문에, 시브들 내부에서의 사용을 위해 여러 개의 상이한 포인터 타입들이 제공되어 있다. 즉시 포인터들(immediate pointers)은 현재 시브 블록 내의 데이터를 가리키는 포인터들이다. 즉시 포인터들은 즉시 포인터가 가리킨 데이터가 즉시 변경될 수 있다는 점에서 시브 외부의 보통의 포인터들과 동일한 의미를 갖는다. 글로벌 포인터들(global pointers)은 어떤 시브의 내부에 있지 않은 상위(top) 레벨에 있는 데이터를 가리키는 포인터들이다. 시브들 외부에서, 글로벌 포인터들은 보통의 포인터들이며, 시브 블록 내의 즉시 포인터들과 동일하게 작용한다. 시브 블록 내부에서, 글로벌 포인터에의 기록은 모든 현재 시브 블록들이 종료된 후까지 지연되어야 한다. 지연 포인터들(delay pointers)은 내포하는 시브의 외부 레벨을 가리키는 포인터들이다. 지연 포인터들은 자신들이 가리키는 시브의 레벨로 된 주석을 가지며, 이들 레벨은 현재 레벨에 대한 것으로, 새로운 시브 블록이 시작되면, 기존의 지연 포인터의 레벨이 1만큼 증가될 것이다. 지연 포인터에의 기록은 이들 포인터가 가리키는 시브 내포 레벨까지 지연된다. 즉시 기록, 글로벌 기록, 및 지연 기록은 프로그래머가 타입 불일치 에러를 쉽게 식별할 수 있 도록 해 주는 별개의 타입으로서 원시 코드로 마킹된다.
기본 개념의 다른 변형예에서, 시브들을 병렬로 조립함으로써 명백한(explicit) 동시성이 도입될 수 있다. 독립적인 시브 계산들을 동시에 실행하는 것이 항상 안전하다. 시브 계산들은 병렬로 실행되어, 부작용들의 큐를 발생한다. 이어서, 부작용들(side-effects)이 순차적으로 실행된다. 제1 시브 계산으로부터의 부작용들은 제2 시브 계산의 부작용들에 앞서 실행된다. 일반적으로, 제i 시브 병렬 구성 계산으로부터의 부작용들은 제(i+1) 시브 병렬 구성 계산의 부작용들에 앞서 실행된다. 통상, 부작용들은 관련 시브 블록을 종료할 때 적용될 것이다. 그러나, 프로그래머는 부작용 큐를 저장하여 추후에 적용하기를 원할 수 있다.
또한, 동시성은 분리가능 객체들(splittable objects)을 사용함으로써 시브 블록들 내부에서 얻어질 수 있다. 분리가능 객체들은 여러 개의 차일드 프로세서들(child processors)에 분리될 수 있고, 이어서 페어런트(parent) 또는 지정된 제어 프로세서상에서 단일 객체로 다시 병합된다. 이는 수정 전후의 분리가능 객체의 값들간의 종속성을 제거하는 것에 상당한다. 분리가능 객체들을 이용하기 위해, 프로그래머는 분리/병합 동작을 클래스(class)로 정의해야 한다. 일반적으로, 이는 특정 기능들, 예컨대 어레이의 내용들의 합산을 위해 제공되는 분리/병합 템플레이트(split/merge templates)를 이용하여 행해질 것이다.
분리/병합 동작을 구현하기 위해서, 프로그래머는 객체(object)에 대한 동작들을 여러 개의 프로세서상에서 동시에 수행한 다음에 시브 블록의 끝에서 하나의 결과로 병합하는 방법을 결정해야 한다. 프로그래머는 분리가능 객체의 각각의 카 피(copy) 상에서 호출되는 온스플릿 동작(onsplit operation)을 지정해야 한다. 온스플릿 동작은 선택적으로 제어 흐름에서 분리점에 앞서 일어나는 변화점들의 개수를 카운트할 수 있다. 변화점은 분리가능 객체가 수정되는 지점인 것으로 정의된다. 이에 따라, 예컨대, 루프들이 병렬화될 수 있다. 이 경우에, 변화점 개수는 루프 반복 회수이다. 분리 동작들을 위해, 프로그래머는 차일드 프로세스들이 종료된 후에 분리가능 객체의 여러 개의 카피들을 재조합하는 방법을 정의하는 병합(merge) 동작을 지정할 수 있다. 예컨대, 병합 동작은 단순히 각각의 차일드 프로세스의 모든 결과들을 합산하는 명령일 수 있다.
보다 우수한 동시성을 얻기 위해 분리가능 객체들을 가진 시브들을 사용하는 예는, 때때로 누산기(accumulator)를 갱신하고 또한 루프 내부에서 임의의 부작용들을 수행하는 루프를 분리하는 것이다. 여기서 누산기는 유일한 적용가능 연산이 가산인 객체이다. 루프 반복기(loop iterator) 및 누산기는 둘 다 분리가능 객체로 정의될 수 있다. 루프는 조각(fragment)들로 분리되며, 조각들은 병렬로 실행된다. 각각의 조각은 그 자체의 반복기 및 누산기 카피를 갖는다. 각각의 조각은 누산기의 초기값을 갖는다. 누산기 상에서의 유일한 동작이 초기값을 증가시키는 것이라면, 각각의 조각에 대한 시브 계산을 실행하여 얻어진 누산기들 결과는, 간단히 이들을 함께 가산함으로써, 병렬 계산이 종료된 후 안전하게 병합될 수 있다. 누산기들은 큐잉된 부작용들이 실행될 때 시브 블록 이후에 병합된다.
컴파일러는 병렬화를 결정하기 위해 시브 블록 내의 코드에 대해 종속성 분석을 수행할 수 있다. 종속성 분석을 행하는 기술은 알려져 있으며 따라서 상세하 게 설명하지 않는다. 부작용들은 지연되기 때문에, 시브 블록 외부에 정의된 데이터에 대한 판독 전 기록(write-before-read) 종속성은 있을 수 없다. 이는 종속성 분석을 간단화한다. 또한, 분리가능 객체 상에서 발견되는 종속성이 있으면, 종속성은 객체의 분리 및 병합 방법을 이용함으로써 제거될 수 있다. 그러므로 시브 블록을 분석하는 것 및 모든 종속성을 제거 가능한 지점을 찾는 것이 가능하다. 이들을 잠재적인 분리점들(potential split points)이라고 한다.
잠재적인 분리점들은 별개의 반복들이 병렬로 실행되도록 하는 루프들에서, 또는 코드의 상이한 섹션들이 병렬로 실행되도록 하는 루프들 외부에서 발생될 수 있다. 잠재적인 분리점들은 또한 조건부 분기들(conditional branches) 내부에서 발생될 수 있다. 이 경우에, 어느 분기(branch)를 실제로 취할지를 알기 전에 분리점이 일어날 수 있는 분기의 연속이 추론적으로(speculatively) 실행될 수 있다. 이는 실행 시스템이 코드 조각이 실행되어야 하는지에 대한 판단을 하기 전에 코드 조각을 실행하고, 일단 판단을 행하고 판단이 긍정적이면 부작용들을 적용함을 의미한다.
함수들/절차들은 시브 블록 내로부터 호출되나, 부작용들의 수집 필요성으로 인해 이들 절차는 코드로 마킹되고 보통의 함수와는 다르게 컴파일될 수 있다. 2개 상이한 타입의 함수들이 시브 블록 내부에서의 사용을 위해 마킹될 수 있다. 시브 함수들은, 부작용들로 인해, 시브 블록의 외부에서의 사용을 위해 컴파일되면 다른 의미를 갖는 함수이다. 시브 함수의 이용은 시브 블록 내로 제한되는데, 이는 발생된 부작용이 시브 블록의 외부와 무관하기 때문이다. 즉시 함수들은, 부작용 의 결핍으로 인해, 시브 블록 내부 또는 외부에서 동일한 의미를 가진 함수들이다. 즉시 함수의 정의는 포함된 시브 외부에 있을 수 있는 어떤 것에 기록하지 않도록 보장하기 위해 제한된다. 이는 부작용을 발생하지 않고 시브 블록 내부 또는 외부의 어느 곳에서의 사용을 위해 안전하게 컴파일될 수 있도록 보장한다.
일단 프로그래머가 소프트웨어를 작성하면 본 발명이 구현되는 컴파일러를 사용하여 병렬화될 수 있다. 이 컴파일러는 시브들 및 분리/병합 동작을 인식하고 종속성을 제거함으로써 결정적인 방식으로 코드를 재배열(re-order)하도록 동작 가능하다. 코드의 개별적인 섹션들은 별개의 프로세서들에 의한 처리를 위해 변환된다. 컴파일러는 또한 도 1에 도시된 실시예와 같이 이용가능한 메모리 공간들을 분리한다. 이는 메인 시스템 프로세서와 연관된 단일 글로벌 메모리(single global memory)를 갖는다. 이는 보통의 데이터를 저장하는데 사용된다. 별개의 메모리 공간들은 병렬화에 연루되는 로컬 또는 차일드 프로세서의 각각에 대해 정의된다. 이들은 시브들 내에 정의된 로컬 정보를 저장하기 위한 것이다. 시브가 차일드 프로세서들 중 하나 상에서 완료되면, 발생 및 저장된 지연 저장 데이터가 로컬 메모리로부터 카피되고, 메인 CPU에 의해 다른 시브들로부터의 대응 데이터와 병합된 다음에, 메인 CPU 메모리에 저장된다.
도 2는 본 발명에 따라 컴파일러가 취하는 단계들을 도시한다. 이는 마킹된 동시성 영역, 즉, 시브 블록 및 선택적으로 분리/병합 동작을 가진 컴퓨터 프로그램을 먼저 수신하는 것을 포함한다. 프로그램은 분석기에 전달되고, 분석기는 동시성 영역들을 처리하도록 확장된다. 분석기의 출력은 번역기에 전달되고, 번역기 는 원래 프로그램 언어를 컴파일에 적합한 포맷으로 변환한다. 특히, 번역기는 동시성 및 지연된 부작용을 관리하는 명령으로 확장되는 중간 표현(intermediate representation; IR)을 출력한다.
중간 표현에서, 즉시 변수(immediate variable) 및 지연 변수(delayed variable)와 메모리 위치 간을 구별한다. 변수 또는 메모리 위치는 현재 시브 내부에 선언되는 경우에는 즉시적(immediate)이다. 즉시 변수에의 기록은 변수가 선언되는 시브 내부에서 즉시 발생한다. 변수 또는 메모리 위치는 시브 외부에 선언되는 경우에는 지연된다. 지연 변수에의 기록은 시브가 종료될 때까지 지연된다. IR이 지연 변수로부터의 외부 판독과 즉시 변수로부터의 내부 판독간을 구별할 수 있더라도, 판독은 항상 즉시 일어난다. 변화점들 및 분리가능 객체들은 IR로 마킹된다. 분석기는 포인터들이 시브 블록 내 또는 시브 블록 외부의 메모리 위치를 참조하는지를 구별하는 시스템을 포함한다. 중간 표현은 병렬화 최적화기에 전달되고, 병렬화 최적화기는 부분들이 타겟 아키텍처 상에서 병렬로 실행될 수 있도록 프로그램을 가장 잘 분리하는 방법을 계산한다.
컴파일러는 프로그램 코드 내의 시브들을 식별하고 이들이 시브들의 사양(specification)에 따라 올바르게 실행되는 것을 보장하도록 동작 가능하다. 이는 도 3에 예시되어 있다. 상술한 바와 같이, 시브는 부작용 계산으로부터 시브 계산을 분리하는 동시성 영역이다. 시브 구성 내에서, 먼저 시브 계산이 실행되어 부작용들의 큐를 발생한다. 다음에, 부작용들의 큐가 순차적으로 실행된다. 도 3에서, 검은 실선은 제어 흐름을 나타내고, 점선은 데이터 흐름을 나타내고, 이점쇄 선은 병렬 계산 범위를 정한다. 실행 전에, 부작용들의 큐는, 속도 및 크기에 대해, 컴파일러 또는 실행 시스템에 의해 최적화될 수 있다. 이는, 예컨대, 동일한 주소에의 리던던트 기록을 제거하거나 독립적인 부작용을 재배열함으로써 행해질 수 있다.
시브 계산은 자동 병렬화를 따른다. 시브 계산을 부작용 계산으로부터 분리하면, 도 4에 도시된 바와 같이 함축적인 동시성이 도입된다. 이전과 같이, 검은 실선은 제어 흐름을 나타내고, 점선은 데이터 흐름을 나타내며, 이점쇄선은 병렬 계산 범위를 정한다. 시브 계산의 서브-계산들의 집합은 한 서브 계산이 다른 서브 계산의 결과에 좌우되지 않는다면 항상 병렬로 실행될 수 있다. 따라서, 최적화기는 시브 계산에 대해 자동 병렬화를 수행하고 잠재적인 분리점을 결정하기 위해 종속성 분석을 행하도록 동작할 수 있다. 지연 변수에의 기록들이 지연됨에 따라, 지연 변수에 대한 판독전 기록 종속성이 제거된다. 또한, 분리가능 객체에 대한 종속성들은 이런 종속성들이 분리 동작 및 병합 동작으로 대체될 수 있음에 따라 제거된다.
일단 잠재적인 분리점들이 구해지면, 중간 표현은 도 5에 도시된 바와 같이 병렬로 실행될 조각(fragment)들로 분리된다. 각각의 조각은 잠재적인 분리점이어야 하는 시작점(start point), 및 잠재적인 분리점이어야 하는 하나의 이상의 출구점(exit point)을 갖는다. 중간 표현을 조각들로 나누는 정확한 방법은 타겟 아키텍처의 특성에 의해 또는 타겟과 무관하게 중간 표현의 특성에만 기초하여 결정될 수 있다. 중간 표현은 도 6에 도시된 바와 같이 제어 흐름이 임의의 잠재적인 분 리점에서 들어오고 나가도록 변경될 수 있다.
도 6은 중간 표현의 개념 구조를 도시한다. 실제로, 셋업(setup) 단계 및 셋다운(setdown) 단계도 또한 모든 로컬 변수들이 올바른 값으로 초기화되고 올바르게 제거되도록 보장하기 위해 분리되어야 한다. 도 5는 어떻게 중간 표현이 완전히 별개의 조각들로 분리될 수 있는지를 도시하고, 도 6은 하나의 중간 표현이 상이한 지점들에서 들어가고 나감으로써 단일 조각 또는 다수의 순차 조각들에 대응하는 부분의 실행을 가능하게 하기 위해 사용되고 파라미터화될 수 있음을 도시한다.
조각들은 서로 독립적으로 컴파일된다. 각각의 조각은 분리가능 객체들의 변화 카운트를 입력으로 받아들인다. 온스플릿 동작은 차일드 프로세서가 조각의 본체(main body)를 실행하기 전에 각각의 분리가능 객체 상에서 각각의 차일드 프로세서에 의해 수행된다. 조각을 나갈 때, 출구점 및 변화 카운트는 조각을 관리 및 제어하는 페어런트 프로세서로 복귀된다. 조각들은 적합한 분리가능 객체 파라미터와 함께 차일드 프로세서로 전송된다.
조각에 대한 이들 파라미터는 실행 시스템에 내장된 추측 전략(guessing strategy)을 통해 얻어질 수 있다. 추측 전략은 조각의 시작점 및 끝점과, 조각에 들어갈 때 분리가능 객체들의 값들을 포함할 수 있다. 추측 전략은 그 구조 및 알고리즘에 따라 개별적인 시브 블록에 적응하도록 변경될 필요가 있다. 일반적인 추측 전략은 반복기에 대한 변화 카운트가 일정한 수 n만큼 증가될 때까지 조각을 실행하는 것이다. 이때, 각각의 별개의 프로세서 코어에는 각각의 새로운 프로세 서 코어에 대해 n만큼 증가하는 추측된 시작 반복기 값이 제공될 수 있다.
조각이 종료됨에 따라, 실행 경로를 따르고 있는지를 판단한다. 불확실한 실행(speculative execution) 또는 나쁜 추측(bad guessing)으로 인한 죽은 분기들(dead branches)은 폐기된다. 유효 경로가 시브를 통해 이어진 후, 분리가능 객체들은 도 7에 도시된 바와 같이 페어런트 프로세서상으로 다시 병합된다. 최종적으로 부작용들이 올바른 순서로 수행된다.
상술한 바와 같이, 시브들은 도 8에 도시된 바와 같이 내포(nest)될 수 있다. 이 경우에, 포함된 시브 내부에서 로컬 메모리에의 기록 및 다른 로컬 부작용들이 내포된 시브를 종료할 때 실행된다. 큐잉된 외부 부작용들 및 다른 부작용들이 포함된 시브에 적합한 큐로 첨부된다. 기본 개념의 다른 변형에서, 명백한 동시성(explicit concurrency)은 시브들을 병렬로 조립함으로써 도입될 수 있다. 이는 도 9에 도시되어 있다. 독립적인 시브 계산들을 동시에 실행하는 것은 항상 안전하다. 시브 계산들은 병렬로 실행되어 부작용들의 큐를 발생한다. 이어서, 부작용들이 순차적으로 실행된다. 제1 시브로부터의 부작용들은 제2 시브의 부작용들에 앞서 실행된다. 일반적으로, 제i 시브로부터의 부작용들은 제(i+l) 시브의 부작용들에 앞서 실행된다.
조각의 실행시 일부 지점에서, 조각의 전체 상태를 워크 큐에 저장하고 다른 조각의 실행으로 계속하는 것이 가능할 수 있다. 이는 여러 개의 상이한 병렬화 타입을 가능하게 한다. 예컨대, 조각의 상태를 하나의 프로세서에 저장하고 실행을 계속하기 위해 그 조각 상태를 다른 프로세서에 전송함으로써, 파이프라인이 생 성될 수 있다. 또는, 저속 동작이 요구될 때 조각의 상태, 예컨대 메모리 로드를 워크 큐에 저장한 다음에, 저속 동작이 완료될 때 그 조각을 계속함으로써, 저속 동작이 완료되기를 기다리는 때에도 병렬 실행을 달성하는 것이 가능하다. 하나의 조각이 하나의 이상의 이전 조각들로부터의 결과들에 따라 좌우될 때, 이전 조각들로부터의 결과를 워크 큐에 저장한 다음에, 결과들 모두가 이용 가능할 때 이들 결과를 필요로 하는 조각을 실행하는 것이 가능하다.
본 발명은 사용하기 쉬운 스케일러블 소프트웨어를 처리하는 병렬화 시스템 및 프로세스를 제공한다. 이는 종속성을 제거하기 위해 시브, 분리, 및 병합을 이용하여 행해진다. 시브들은 시브 계산을 외부 기록을 포함한 부작용 계산으로부터 분리하여 자동 병렬화 프로세스를 로컬 종속성 분석으로 감소시킨다. 이는 독립적인 계산들이 안전하게 병렬로 실행될 수 있음을 의미한다. 시브들과 함께 분리가능 객체는 변화점들 간의 종속성을 분리 동작 및 병합 동작으로 변환함으로써 종속성 분석의 결과들을 향상시킬 수 있다.
시스템을 이용하기 위해서, 프로그래머는 원시 소프트웨어 내에 병렬화될 수 있는 영역들, 분리가능한 객체들, 및 선택적으로 프로그램을 분리하기를 원하는 장소들을 마킹한다. 이는 프로그래머가 소프트웨어, 예컨대 종래의 비(non)-스케일러블 C/C++ 소프트웨어를 스케일러블 병렬 C/C++ 소프트웨어로 고속 변환할 수 있음을 의미한다. 본 발명은 광범위한 하드웨어에 적응 가능하며, 멀티-코어 프로세서, 및 FPGA와 같은 스케일러블/다이내믹 하드웨어에 이상적이다.
숙련된 사람들은 본 발명으로부터 벗어나지 않고 공개된 배열들의 변형이 가능함을 이해할 것이다. 예컨대, 본 발명은 소프트웨어 구현을 참조하여 설명하였지만 하드웨어로 구현될 수 있음을 이해할 것이다. 또한, 본 발명은 병렬화 기법을 참조하여 설명되었지만, 본 발명이 구현되는 컴파일러는 단일 프로세서상에서 프로그램을 구동하는데 사용될 수 있음을 이해할 것이다. 따라서, 특정 실시예에 관한 상기 설명은 단지 예로서 행해진 것이지 제한하기 위한 것이 아니다. 상기한 동작을 크게 변화시키지 않고 약간의 수정이 행해질 수 있음은 숙련된 사람에게 명백하다.

Claims (20)

  1. 프로그램 내에서 동시성 마커들 사이의 코드, 즉 동시성 영역이 지연된 부작용들과 함께 실행되어야 함을 나타내는 상기 동시성 마커들을 식별하는 컴파일러; 및
    부작용들의 큐를 발생하기 위해 상기 동시성 마커들에 의해 식별된 코드를 실행하고, 그 코드의 실행이 완료된 후 상기 부작용들의 큐를 순차적으로 실행하는 실행 시스템을 포함하는 컴퓨터 프로그램 병렬화 시스템.
  2. 제 1 항에 있어서, 상기 컴파일러는
    상기 동시성 마커들 내에서 한 변수가 동시 실행을 위한 로컬 변수들로 분리가능한 경우를 나타내는 하나의 이상의 마킹된 분리가능 객체들, 및 상기 로컬 변수들이 어떻게 단일 변수로 다시 병합될 수 있는지를 나타내는 병합 명령을 식별하도록 동작 가능한 컴퓨터 프로그램 병렬화 시스템.
  3. 제 1 항 또는 제 2 항에 있어서, 상기 컴파일러는
    상기 동시성 마커 내에서 상기 코드를 조각들로 분리하는 것이 가능한 지점들을 결정하도록 동작가능한 컴퓨터 프로그램 병렬화 시스템.
  4. 제 3 항에 있어서, 상기 실행 시스템은
    상기 코드 조각들을 상이한 프로세서들에 전송하도록 동작 가능하고,
    각각의 상기 프로세서는 공유 또는 로컬 메모리 공간들 또는 그 조합을 이용하는 컴퓨터 프로그램 병렬화 시스템.
  5. 제 3 또는 제 4 항에 있어서, 상기 시스템은
    하나의 프로세서상에서의 상기 코드 조각들의 상태를 워크 큐에 저장하고, 모든 입력 데이터가 준비될 때 상기 코드 조각들의 상태를 다른 프로세서에 다시 로딩하도록 배열된 컴퓨터 프로그램 병렬화 시스템.
  6. 제 3 항 내지 제 5 항 중 어느 한 항에 있어서, 상기 실행 시스템은
    하나의 이상의 추측 전략을 이용하여 상기 코드 조각들을 추론적으로 실행하도록 동작 가능한 컴퓨터 프로그램 병렬화 시스템.
  7. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서, 상기 시스템은
    2개 또는 그 이상의 동시성 영역들이 내포된 컴퓨터 프로그램 병렬화 시스템.
  8. 제 1 항 내지 제 7 항 중 어느 한 항에 있어서, 상기 시스템은
    복수의 독립적인 동시성 영역들이 정의되며, 이들은 병렬로 실행가능한 컴퓨터 프로그램 병렬화 시스템.
  9. 제 1 항 내지 제 8 항 중 어느 한 항의 시스템에 사용되는 컴파일러.
  10. 제 1 항 내지 제 8 항 중 어느 한 항의 시스템에 사용되도록 적응된 실행 시스템.
  11. 제 10 항에 있어서, 상기 실행 시스템은
    분리 동작 및 병합 동작을 실행하도록 동작 가능하고,
    상기 분리 동작은 한 변수가 동시 실행을 위한 변수들로 분리가능한 경우를 나타내고, 상기 병합 동작은 상기 변수들이 단일 변수로 다시 병합될 수 있는 경우를 나타내는 실행 시스템.
  12. 제 10 항 또는 제 11 항에 있어서, 상기 실행 시스템은
    하나의 프로세서상에서의 상기 코드 조각들의 상태를 워크 큐에 저장하고, 모든 입력 데이터가 준비될 때 상기 코드 조각들의 상태를 다른 프로세서에 다시 로딩하도록 동작 가능한 실행 시스템.
  13. 프로그램 내에서 동시성 마커들 사이의 코드가 지연된 부작용들과 함께 실행되어야 함을 나타내는 상기 동시성 마커들을 식별하고, 부작용들의 큐를 발생하기 위해 상기 동시성 마커들에 의해 식별된 코드를 실행하고 그 코드의 실행이 완료된 후 부작용들의 큐를 순차적으로 실행하도록 구성된 컴퓨터 프로그램 실행 시스템.
  14. 제 13 항에 있어서, 상기 시스템은
    상기 동시성 마커 내에서 한 변수가 동시 실행을 위한 로컬 변수들로 분리가능한 경우를 나타내는 하나의 이상의 분리가능 객체, 및 상기 로컬 변수들이 어떻게 단일 변수로 다시 병합될 수 있는지를 나타내는 병합 명령을 식별하도록 구성된 컴퓨터 프로그램 실행 시스템.
  15. 프로그램 내에서 동시성 마커들 사이의 코드가 지연된 부작용들과 함께 실행되어야 함을 나타내는 상기 동시성 마커들을 식별하는 단계; 및
    부작용들의 큐를 발생하기 위해 상기 동시성 마커들에 의해 식별된 코드를 실행하고, 그 코드의 실행이 완료된 후, 부작용들의 큐를 순차적으로 실행하는 단계을 포함하는 것을 특징으로 하는 컴퓨터 프로그램 실행 방법.
  16. 데이터 캐리어 또는 컴퓨터 판독가능 매체 상의 컴퓨터 프로그램에 있어서,
    상기 프로그램은 동시성 마커들 사이의 코드 또는 명령, 즉 동시성 영역들이 지연된 부작용들과 함께 실행되어야 함을 나타내는 동시성 마커들을 갖는 컴퓨터 프로그램.
  17. 제 16 항에 있어서,
    상기 동시성 마커들 내에 한 변수가 동시 실행을 위한 로컬 변수들로 분리가능한 경우를 나타내는 하나의 이상의 분리가능 객체들, 및 상기 로컬 변수들이 어떻게 단일 변수로 다시 병합될 수 있는지를 나타내는 병합 명령을 포함하는 컴퓨터 프로그램.
  18. 제 16 항 또는 제 17 항에 있어서,
    다수의 동시성 영역들이 정의되는 컴퓨터 프로그램.
  19. 제 18 항에 있어서,
    하나의 이상의 동시성 영역들은 외부의 이러한 동시성 영역 내에 내포된 컴퓨터 프로그램.
  20. 제 19 항에 있어서,
    상기 동시성 영역들은 독립적이어서 병렬로 실행가능한 컴퓨터 프로그램.
KR1020087018262A 2006-01-26 2007-01-26 프로그램 병렬 실행 시스템 및 방법 KR20080093108A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0601566.3 2006-01-26
GBGB0601566.3A GB0601566D0 (en) 2006-01-26 2006-01-26 A parallelization system and compiler for use in such a system

Publications (1)

Publication Number Publication Date
KR20080093108A true KR20080093108A (ko) 2008-10-20

Family

ID=36060893

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087018262A KR20080093108A (ko) 2006-01-26 2007-01-26 프로그램 병렬 실행 시스템 및 방법

Country Status (6)

Country Link
US (1) US8336038B2 (ko)
EP (1) EP1977316A1 (ko)
JP (1) JP2009524866A (ko)
KR (1) KR20080093108A (ko)
GB (1) GB0601566D0 (ko)
WO (1) WO2007085855A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011139722A3 (en) * 2010-04-27 2012-02-16 Microsoft Corporation Resumable methods
WO2019164205A1 (ko) * 2018-02-23 2019-08-29 삼성전자 주식회사 전자 장치 및 그의 동작 방법

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8405662B2 (en) 2006-07-04 2013-03-26 Iti Scotland Limited Generation of video
US20090125813A1 (en) * 2007-11-09 2009-05-14 Zhongnan Shen Method and system for processing multiple dialog sessions in parallel
EP2071453A1 (en) * 2007-12-14 2009-06-17 ITI Scotland Limited Dynamic code update
GB0911099D0 (en) 2009-06-26 2009-08-12 Codeplay Software Ltd Processing method
US9424010B2 (en) * 2010-08-30 2016-08-23 International Business Machines Corporation Extraction of functional semantics and isolated dataflow from imperative object oriented languages
US20120151187A1 (en) * 2010-12-13 2012-06-14 Microsoft Corporation Instruction optimization
US9069893B2 (en) * 2011-03-23 2015-06-30 International Business Machines Corporation Automatic verification of determinism for parallel programs
US8381224B2 (en) 2011-06-16 2013-02-19 uCIRRUS Software virtual machine for data ingestion
EP2767904B1 (en) * 2013-02-18 2018-07-04 Hybridserver Tec IP GmbH Method, processing modules and system for executing an executable code
US9104432B2 (en) 2013-06-24 2015-08-11 International Business Machines Corporation Extracting stream graph structure in a computer language by pre-executing a deterministic subset
US9971760B2 (en) * 2014-12-22 2018-05-15 International Business Machines Corporation Parallelizing semantically split documents for processing
CN106845631B (zh) * 2016-12-26 2020-05-29 上海寒武纪信息科技有限公司 一种流执行方法及装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2634144B2 (ja) 1994-07-06 1997-07-23 インターナショナル・ビジネス・マシーンズ・コーポレイション プログラムの並列化実行方法及び並列化実行コンパイラ
US5812852A (en) * 1996-11-14 1998-09-22 Kuck & Associates, Inc. Software implemented method for thread-privatizing user-specified global storage objects in parallel computer programs via program transformation
US5857105A (en) * 1997-02-05 1999-01-05 Hewlett-Packard Company Compiler for reducing number of indirect calls in an executable code
US6442751B1 (en) * 1998-12-14 2002-08-27 International Business Machines Corporation Determination of local variable type and precision in the presence of subroutines
US6549959B1 (en) * 1999-08-30 2003-04-15 Ati International Srl Detecting modification to computer memory by a DMA device
US7346902B2 (en) * 2002-10-22 2008-03-18 Sun Microsystems, Inc. System and method for block-based concurrentization of software code
US7222218B2 (en) * 2002-10-22 2007-05-22 Sun Microsystems, Inc. System and method for goal-based scheduling of blocks of code for concurrent execution
US7765532B2 (en) * 2002-10-22 2010-07-27 Oracle America, Inc. Inducing concurrency in software code
US7603664B2 (en) * 2002-10-22 2009-10-13 Sun Microsystems, Inc. System and method for marking software code

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011139722A3 (en) * 2010-04-27 2012-02-16 Microsoft Corporation Resumable methods
US8549506B2 (en) 2010-04-27 2013-10-01 Microsoft Corporation Resumable methods
WO2019164205A1 (ko) * 2018-02-23 2019-08-29 삼성전자 주식회사 전자 장치 및 그의 동작 방법
US11435985B2 (en) 2018-02-23 2022-09-06 Samsung Electronics Co., Ltd. Electronic device and operation method thereof

Also Published As

Publication number Publication date
GB0601566D0 (en) 2006-03-08
US20100153937A1 (en) 2010-06-17
EP1977316A1 (en) 2008-10-08
JP2009524866A (ja) 2009-07-02
WO2007085855A1 (en) 2007-08-02
US8336038B2 (en) 2012-12-18

Similar Documents

Publication Publication Date Title
KR20080093108A (ko) 프로그램 병렬 실행 시스템 및 방법
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
KR101702651B1 (ko) 하드웨어 포인터를 이용한 simd 코어 내 분기 해법
WO2010013370A1 (ja) プログラム変換装置及びプログラム変換方法
JP3707727B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
Inverso et al. Parallel and distributed bounded model checking of multi-threaded programs
JP6141365B2 (ja) 逐次コンピュータプログラムコードを並列処理する方法及びシステム
JP2001282549A (ja) プログラム変換装置及び方法並びに記録媒体
US10430191B2 (en) Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption
Li et al. Practical symbolic race checking of GPU programs
KR101787653B1 (ko) 병렬 파이프라인에서의 분기에 대한 하드웨어 및 소프트웨어 해법
JP3651774B2 (ja) コンパイラ及びそのレジスタ割付方法
US20100250564A1 (en) Translating a comprehension into code for execution on a single instruction, multiple data (simd) execution
US9921838B2 (en) System and method for managing static divergence in a SIMD computing architecture
JP6500626B2 (ja) 計算機、コンパイラプログラム、リンクプログラムおよびコンパイル方法
JP6427053B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
KR102161055B1 (ko) 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
US10761820B2 (en) Assisting parallelization of a computer program
US20100077384A1 (en) Parallel processing of an expression
Pikus The Art of Writing Efficient Programs: An advanced programmer's guide to efficient hardware utilization and compiler optimizations using C++ examples
JP2007108838A (ja) コンパイル方法及びコンパイル装置
RAS Implementing an instruction scheduler for GCC: progress, caveats, and evaluation
JP2009140451A (ja) コンパイラ装置、コンパイル方法およびそのプログラム
Ying Scaling sequential code with hardware-software co-design for fine-grain speculative parallelization
Donaldson et al. Formal analysis techniques for reliable GPU programming: Current solutions and call to action

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid