KR101108431B1 - OpenMP프로그램에서 자료 경합을 탐지하기 위한 시스템, 방법, 및 방법을 저장하는 저장 매체 - Google Patents

OpenMP프로그램에서 자료 경합을 탐지하기 위한 시스템, 방법, 및 방법을 저장하는 저장 매체 Download PDF

Info

Publication number
KR101108431B1
KR101108431B1 KR1020090099063A KR20090099063A KR101108431B1 KR 101108431 B1 KR101108431 B1 KR 101108431B1 KR 1020090099063 A KR1020090099063 A KR 1020090099063A KR 20090099063 A KR20090099063 A KR 20090099063A KR 101108431 B1 KR101108431 B1 KR 101108431B1
Authority
KR
South Korea
Prior art keywords
contention
program
threads
thread
access
Prior art date
Application number
KR1020090099063A
Other languages
English (en)
Other versions
KR20110042404A (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 KR1020090099063A priority Critical patent/KR101108431B1/ko
Publication of KR20110042404A publication Critical patent/KR20110042404A/ko
Application granted granted Critical
Publication of KR101108431B1 publication Critical patent/KR101108431B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/10Geometric CAD
    • G06F30/18Network design, e.g. design based on topological or interconnect aspects of utility systems, piping, heating ventilation air conditioning [HVAC] or cabling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1858Parallel file systems, i.e. file systems supporting multiple processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/904Browsing; Visualisation therefor
    • 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
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Geometry (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Evolutionary Computation (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Debugging And Monitoring (AREA)

Abstract

OpenMP 프로그램에서 자료 경합을 탐지하기 위한 방법, 시스템, 및 기록 매체가 개시된다. 본 발명에 따른 경합 탐지 시스템은 사용자로부터 경합 탐지 대상인 프로그램의 원시 코드 및 경합 탐지를 수행할 분석 속성을 수신하고, 소정의 네트워크를 통하여 서버로부터 수신된 경합 탐지 결과를 출력하는 클라이언트 및 네트워크에 접근 가능하며, 분석 속성에 따라서 프로그램의 수행중에 경합을 탐지하여 경합 탐지 결과를 생성하는 서버를 포함한다. 서버는 분석 속성에 따른 경합 탐지를 위하여 원시 코드를 변형시켜 변형된 목적 코드를 생성하는 전처리부와 변형된 목적 코드의 실행중 생성되는 복수 개의 병행 스레드에 대한 접근 사건들을 동기화 명령어 포함 여부를 기준으로 분류하고, 공유 변수에 대한 각 접근 사건들 중 접근 역사에 저장된 이전의 접근 사건과 병행성 관계에 있는 접근 사건을 경합으로 탐지하여 경합 탐지 결과를 생성하기 위한 수행중 분석부(on-the-fly analyzer)를 포함한다. 본 발명에 의하여 병렬 프로그램의 자료 경합을 효과적으로 탐지하고, 탐지 결과를 직관적으로 이해되도록 시각화할 수 있다.
OpenMP 병렬 프로그램, 경합 검증, 3차원 확장적 시각화, 병행성 관계, 레이블링, 프로토콜, 합성 프로그램

Description

OpenMP프로그램에서 자료 경합을 탐지하기 위한 시스템, 방법, 및 방법을 저장하는 저장 매체{System and method of detecting data races in OpenMP program, and recording medium storing the method thereon}
본 발명은 내포 병렬성을 가지는 병렬 프로그램의 디버깅 기법에 관한 것으로서, 특히, 병렬 프로그램에서의 공유 변수에 대한 접근을 사용자의 요구 사항을 기반으로 최적의 성능으로 분석하여 공유 변수에 대한 경합을 효율적으로 분석하고, 분석된 결과를 사용자가 직관적으로 이해할 수 있도록 3차원 원추 상에 시각화하기 위한 방법, 장치, 및 저장 매체에 관한 것이다.
산업 표준화를 위한 병렬 프로그램 모델인 OpenMP(Open Multi-Processing)는 공유 메모리를 사용하고 표준 C/C++와 Fortran 77/90을 확장하는 디렉티브와 라이브러리들의 집합이다. OpenMP는 디렉티브를 이용하여 순차적 프로그램을 쉽게 병렬화 할 수 있고, coarse-grain parallelism을 구현할 수 있는 orphan 디렉티브 개념을 제공하여 병렬 프로그램의 확장성을 높여준다. OpenMP에서 제공하는 디렉티브는 병렬화 디렉티브와 동기화 디렉티브가 있다. 병렬화 디렉티브는 새로운 스레드의 생성과 합류를 하는 "#pragma omp parallel for"와 "#pragma omp parallel sections" 등이 있고, 동기화 디렉티브는 스레드간의 수행 순서를 제어하는 "#pragma omp atomic", "#pragma omp barrier", "#pragma omp critical" 등이 있다. 또한 OpenMP는 런타임 수행 환경을 제어할 수 있는 라이브러리와 환경 변수들을 제공한다.
도 1a는 병렬 프로그램의 스레드의 경합을 설명하기 위한 소스 코드이다. 도 1a의 11번 줄에서 "#pragma omp parallel" 디렉티브에 의해서 스레드가 생성된다. 여기서는 2개의 스레드가 생성된다고 가정한다. 생성된 스레드들은 12번 줄의 "#pragma omp for private(i,y,z)" 디렉티브에 의해서 13번 줄의 for 문장부터 19번 줄의 "}" 까지의 반복문 몸체에서 명시된 작업을 할당받는다. 반복문 내에서 첨자 변수인 i, y, z 는 각 스레드에서 사용하는 private 변수이고, 정수형 변수인 x는 두 스레드에서 공유하는 공유 변수이다. x, y, 그리고 z 변수의 초기값은 0으로 한다.
생성된 두 개의 스레드 중에서 첫 번째 스레드가 수행하는 15번 문장과 두 번째 스레드가 수행하는 18번 문장은 스레드가 병행성 관계에 있지만 "#pragrma omp critical(L1)" 디렉티브로 임계구역이 설정되므로 x에 대한 경합이 존재하지 않아야 한다. 그렇지만 도 1b에서 보는 것처럼 첫 번째 스레드가 수행하는 14번 문장에서 공유 변수 x에 대해 읽기 사건을 수행하고, 두 번째 스레드는 18번 문장에서 공유 변수 x에 대해 쓰기 접근 사건을 수행하면 두 접근 사건간에 경합이 발생한다. 왜냐하면, 14번 문장에 있는 공유 변수 x에 대해서 임계구역으로 보호되지 않았기 때문이다. 두 스레드는 병행적 수행으로 인해 접근 사건들의 수행순서가 변 경될 수 있다. 따라서 20번 문장에서 x의 변수 값은 100, 104, 그리고 204 중에서 임의의 값 하나가 출력된다. 이들 값 중에서 104의 값은 공유 변수 x가 임계구역으로 보호되지 않았기 때문에 발생하는 것이다. 따라서 프로그래머가 의도하지 않은 값일 수 있다. 왜냐하면 두 스레드 사이에 적절한 동기화 없이 병렬 스레드들이 적어도 하나의 쓰기 접근 사건들로 공유 변수인 x에 접근하기 때문이다. 따라서 공유 변수 x에 발생한 경합으로 인해서 비결정적 수행결과(nondeterministic output)를 초래할 수 있다. 비결정적 수행결과가 발생한다는 것은 프로그램이 안정적으로 동작하지 않는다는 것을 나타내는 것으로서 반드시 해결하여야 한다. 또한, 공유 메모리 병렬 프로그램이 수행되는 동안, 하나 이상의 병행 스레드들은 동일한 공유 변수를 이용한다. 따라서, 여러 개의 병행 스레드가 동시에 하나의 공유 변수에 접근하는 경우 적절한 동기화가 수행되지 않으면 자료 경합(data race) 혹은 경합이라는 접근 오류가 발생한다. 병렬 프로그램에서 경합이 발생하면 프로그래머가 설계한 것과 다른 비결정적 수행결과를 야기할 수 있다.
Figure 112009063676652-pat00001
Figure 112009063676652-pat00002
도 1b는 도 1a에 도시된 의사 코드가 실행될 때의 POEG를 예시하는 도면이다. 여기서 POEG (Partial Order Execution Graph)는 병렬 프로그램의 논리적 순서관계를 그래프로 나타낸 것이다. 도 1b에서 기호와 기호로 지정된 영역은 록 변수인 L1의 임계구역을 의미한다. 도 1b에서 T1 스레드에 r1과 T2 스레드에 w4는 병행관계에 있고 r1이 임계구역으로 보호되어 있지 않기 때문에 w4와 경합이라는 것을 알 수 있다.
이런 경합을 탐지하기 위해서 사용되는 전통적인 디버깅 기법인 브레이크 포 인트는 수행 시간을 간섭하여 잘못된 행위들이 사라질 수도 있기 때문에 비효율적이다. 그러므로 대부분의 병렬 프로그램의 디버거들은 경합을 효과적으로 탐지하는 것이 아니라 프로그래머의 능력에 의존한다. 이러한 경합을 효과적으로 탐지하기 위한 방법으로 수행중 경합 탐지 기법이 있다. 이 기법은 프로그램 수행에서 나타날 수 있는 실제 경합들만을 탐지하고, 프로그램의 수행과 분석을 동시에 진행하므로 불필요한 수행 정보들은 삭제를 할 수 있기 때문에 기억공간에 있어서 효율성을 가진다. 현재 OpenMP 프로그램에서 발생하는 경합을 프로그램의 수행 중에 탐지하는 도구로는 Intel사의 Thread Checker가 있다.
Thread Checker를 이용하기 위해서는 Intel사의 Threading Tools가 필요하다. Threading Tools는 Intel C/C++ Compiler, VTune Performance Analyzer, 그리고 Intel Thread Checker로 구성되어 있다. Intel C/C++ Compiler는 C/C++로 작성된 프로그램들을 컴파일 할 수 있고 OpenMP 2.0을 지원하며 순차적 프로그램을 자동적으로 병렬화 하므로 멀티스레드 기반의 병렬프로그램을 개발하거나 최적화할 수 있다. VTune Performance Analyzer는 Intel 프로세서 상에서 최적의 성능으로 프로그램 튜닝을 할 수 있도록 도와주고, 수행중인 프로그램의 탐지된 오류들이나 성능 정보를 수집하거나 분석하여 텍스트 및 시각적으로 요약된 목록들을 사용자에게 보여준다. 그리고 Intel Thread Checker는 Threading Tools의 핵심 구성요소로써 병렬 프로그램에서 발생할 수 있는 오류를 원시프로그램에서 탐지할 수 있다. 여기서 탐지되는 오류들은 교착상태, 경합, 논리적 오류 등이다.
OpenMP 프로그램에서 발생하는 경합을 수행중에 탐지하는 대표적 기법인 Thread Checker의 프로젝션(projection) 기법은 병렬 프로그램의 순차적 수행 정보를 이용하여 데이터 의존성 여부를 수행중에 검사한 후에 경합을 탐지한다. 이 기법은 OpenMP 디렉티브들로 구성된 이완 순차(relaxed sequential) OpenMP 프로그램에만 적용될 수 있다.
Thread Checker가 경합을 탐지하는 동작순서는 다음과 같다. OpenMP 2.0 명세서에 정의되어 있는 병행 영역 구조(parallel region constructs), 작업-공유 구조(work-sharing constructs), 동기화 구조(synchronization constructs) 등에 해당하는 OpenMP 디렉티브로 작성된 프로그램이 Intel C/C++ 컴파일러에 의해 컴파일될 때 OpenMP 디렉티브와 공유 변수에 대한 접근 사건들을 전용 데이터베이스에 기록한다. 그리고 프로그램의 수행 시에 OpenMP 디렉티브들을 무시하고 순차적으로 프로그램을 수행하면서 OpenMP 디렉티브들을 만나면 전용 데이터베이스에 기록된 정보를 참조하여 공유 변수에 대한 접근 사건들의 데이터 종속성을 검사한 후에 input 데이터 의존성(data dependency)을 제외한 anti, flow, 그리고 out 데이터 의존성을 경합으로 보고한다.
그런데, Thread Checker는 기능과 성능적인 측면에서 문제점을 가지고 있다. 우선, 기능적인 측면에서, Thread Checker는 동기화가 없고 내포 병렬성이 존재하지 않는 프로그램에 대해서만 경합 존재에 대한 검증이 가능하고 다른 프로그램 모델에서는 경합 검증이 불가능하다. 예를 들어, 도 1b와 같이 동기화가 있고 내포 병렬성이 존재하지 않는 프로그램 수행의 경우에 r1과 w4는 경합이지만 Thread Checker는 경합으로 보고하지 못한다. 그 이유는, 순차적 수행으로 T1 스레드에서 r2 사건이 발생하면 r1 사건과 순서화 관계에 있다고 r2사건에 의해 r1에 대한 정보를 삭제하기 때문이다. T2 스레드에서 w4 사건이 발생하면 병행성 관계에 있는 접근 사건은 T1 스레드에 있는 r2 사건과 w3 사건이지만 동일한 록 변수 L1으로 임계구역이 설정되어 있어서 경합으로 보고하지 못한다. 따라서 경합이 존재하고 있지만 경합을 보고하지 못하므로 Thread Checker는 경합의 존재를 검증하지 못한다.
또한, 번째 성능적인 측면에서, 프로젝션 기법은 경합 탐지 시에 소요되는 시간과 공간적 비용이 크다고 알려져 있다. 예를 들어, 동기화가 없고 내포 병렬성이 존재하지 않는 프로그램에서 최대 병렬성이 32이고 하나의 공유 변수에 대해서 총 접근 사건수를 1000개와 4000개를 가진 프로그램 A와 프로그램 B를 작성하여 Thread Checker를 이용하여 경합 시에 소요되는 시간과 공간을 측정하였다. 실험 환경은 리눅스 계열의 운영체제가 탑재되어 있는 64비트 Xeon 프로세서 4개 1GB의 메모리를 가진 컴퓨터에서 경합 탐지시에 소요되는 시간과 메모리를 측정하였다. 측정 결과, 소요 시간은 프로그램 A에서는 50초, 프로그램 B에서는 671초가 걸리고 증가비율은 13.4배나 된다. 소요 메모리는 프로그램 A에서는 20MB, 프로그램 B에서는 33MB가 소요되고 증가비율은 1.7배이다. 소요 파일은 프로그램 A에서는 0.7MB, 프로그램 B에서는 1.4MB가 소요되고 증가 비율은 2배가 된다. 여기서 소요메모리의 측정결과는 모두 Thread Checker 자체에서 소요된 메모리라고 보기는 어렵다. 그러나 경합 탐지 시에 소요된 시간은 비효율적인 성능을 보인다는 것을 알 수 있다.
그러므로, OpenMP 프로그램의 특성 및 사용자 요구사항을 분석한 결과를 이용하여 최적의 기능과 성능을 가진 경합탐지 엔진을 선택하고, 선택된 최적의 엔진 을 이용하여 경합의 존재를 검증하는 웹기반의 도구가 절실히 요구된다.
본 발명의 목적은 OpenMP 프로그램의 특성 및 사용자 요구사항을 분석한 결과를 이용하여 최적 경합탐지 엔진을 이용하여 자료 경합을 검증하는 웹기반의 도구를 제공하는 것이다.
또한, 본 발명의 목적은 프로그램 수행중에 기록된 스레드 정보, 공유 변수에 대한 접근 사건 정보, 그리고 탐지된 경합 정보를 사용자가 감각적으로 이해하도록 하기 위한 3차원 원추 시각화 기술을 제공하는 것이다.
상기와 같은 목적들을 달성하기 위한 본 발명의 일면은, OpenMP 프로그램에서 자료 경합을 탐지하기 위한 시스템에 관한 것으로서, 이 시스템은 사용자로부터 경합 탐지 대상인 프로그램의 원시 코드 및 경합 탐지를 수행할 분석 속성을 수신하고, 소정의 네트워크를 통하여 서버로부터 수신된 경합 탐지 결과를 출력하는 클라이언트 및 네트워크에 접근 가능하며, 분석 속성에 따라서 프로그램의 수행중에 경합을 탐지하여 경합 탐지 결과를 생성하는 서버를 포함한다. 특히, 서버는 분석 속성에 따른 경합 탐지를 위하여 원시 코드를 변형시켜 변형된 목적 코드를 생성하는 전처리부와 변형된 목적 코드의 실행중에 생성되는 복수 개의 병행 스레드에 대한 접근 사건들을 동기화 명령어 포함 여부를 기준으로 분류하고, 공유 변수에 대한 각 접근 사건들 중 접근 역사에 저장된 이전의 접근 사건과 병행성 관계에 있는 접근 사건을 경합으로 탐지하여 경합 탐지 결과를 생성하기 위한 수행중 분석 부(on-the-fly analyzer)를 포함한다. 더 나아가, 수행중 분석부는, 접근 사건들을 읽기/쓰기 사건인지 여부를 기준으로 더욱 분류하고, 동기화 명령어를 포함하지 않는 쓰기 접근 사건에서 경합이 발생하면, 접근 역사의 내용을 초기화하고 현재 접근 사건을 접근 역사에 기록하는 경합 검출 엔진을 포함한다. 또는, 수행중 분석부는 프로그램의 수행중에 생성된 스레드에 고유한 식별자를 부여하는 레이블링 엔진, 및 복수 개의 스레드들에 의하여 공유되는 접근 역사로부터 경합에 참여할 가능성이 없는 접근 사건들을 제거하는 사건 선택 엔진을 더 포함한다. 특히, 레이블링 엔진은, English-Hebrew 기법 및 Nest Region 기법 중 적어도 하나를 이용한다. 또한, 본 발명에 의한 시스템에 포함되는 전처리부는, 프로그램의 내포 병렬성 유무 및 동기화 명령 포함 여부에 따라 프로그램이 속하는 프로그램 모델을 결정하는 프로그램 스캐닝부(program scanner), 프로그램 모델 및 분석 속성에 따라 프로그램의 경합 탐지에 이용될 최적의 경합 탐지 엔진을 선택하는 엔진 선택부(engine selector), 선택된 경합 탐지 엔진을 이용하여 원시 코드를 변형시켜 변형된 원시 코드를 생성하는 소스 변형부(source instrumentor), 및 변형된 원시 코드를 컴파일하여 실행가능한 변형된 목적 코드를 생성하는 컴파일러(compiler)를 포함한다. 바람직하게는, 프로그램 스캐닝부는 경합 탐지 엔진이 원시 코드에 삽입될 위치에 의사 코드(pseudo-code)를 삽입하고, 소스 변형부는 의사 코드를 경합 탐지 엔진에 상응하는 라이브러리로 대체하여 변형된 원시 코드를 생성한다. 또한, 엔진 선택부는, 분석 속성에 따라 룩업 테이블로부터 최적의 경합 탐지 엔진을 선택한다. 본 발명에 의한 시스템에 포함되는 클라이언트는, 경합 탐지 결과를 분석하여 프로그 램의 내포 깊이를 획득하고, 3차원 원추를 시각화한 뒤 내포 깊이에 상응하도록 3차원 원추의 높이를 등분하는 원추 시각화 모듈, 프로그램의 실행 중 생성되는 복수 개의 병행 스레드 중 동일한 내포 수준의 스레드를 원추의 동일한 높이에 위치한 원주 상에 시각화하는 스레드 시각화 모듈, 및 경합 탐지 결과를 분석하여 스레드들 중 공유 변수에 대한 접근 사건들이 발생한 스레드들을 읽기 및 쓰기 접근 사건의 발생 유무 및 발생 선후에 따라 분류하고, 분류된 스레드들을 서로 구별되도록 시각화하는 접근 사건 시각화 모듈을 포함한다.
상기와 같은 목적들을 달성하기 위한 본 발명의 다른 면은 OpenMP 프로그램에서 자료 경합을 탐지하기 위한 방법에 관한 것으로서, 이 방법은 사용자로부터 경합 탐지 대상인 프로그램의 원시 코드 및 경합 탐지를 수행할 분석 속성을 수신하고 수신된 분석 속성을 서버로 전송하는 단계, 분석 속성에 따라서 프로그램의 수행중 경합을 탐지하여 경합 탐지 결과를 생성하는 경합 탐지 결과 생성 단계, 및 소정의 네트워크를 통하여 경합 탐지 결과를 수신하여 출력하는 출력 단계를 포함한다. 경합 탐지 결과 생성 단계는, 분석 속성에 따른 경합 탐지를 위하여 원시 코드를 변형시켜 변형된 목적 코드를 생성하는 전처리 단계, 및 변형된 목적 코드의 실행중에 생성되는 복수 개의 병행 스레드에 대한 접근 사건들을 동기화 명령어 포함 여부를 기준으로 분류하고, 공유 변수에 대한 각 접근 사건들 중 접근 역사에 저장된 이전의 접근 사건과 병행성 관계에 있는 접근 사건을 경합으로 탐지하여 경합 탐지 결과를 생성하기 위한 수행중 분석 단계를 포함한다. 특히, 수행중 분석 단계는, 접근 사건들을 읽기/쓰기 사건인지 여부를 기준으로 더욱 분류하는 단계, 및 동기화 명령어를 포함하지 않는 쓰기 접근 사건에서 경합이 발생하면, 접근 역사의 내용을 초기화하고 현재 접근 사건을 접근 역사에 기록하는 단계를 포함한다. 더 나아가, 경합 탐지 결과 생성 단계는, 경합 탐지 결과를 분석하여 프로그램의 내포 깊이를 획득하고, 3차원 원추를 시각화한 뒤 내포 깊이에 상응하도록 3차원 원추의 높이를 등분하는 원추 시각화 단계, 프로그램의 실행 중 생성되는 복수 개의 병행 스레드 중 동일한 내포 수준의 스레드를 원추의 동일한 높이에 위치한 원주 상에 시각화하는 스레드 시각화 단계, 및 경합 탐지 결과를 분석하여 스레드들 중 공유 변수에 대한 접근 사건들이 발생한 스레드들을 읽기 및 쓰기 접근 사건의 발생 유무 및 발생 선후에 따라 분류하고, 분류된 스레드들을 서로 구별되도록 시각화하는 접근 사건 시각화 단계를 포함한다. 특히, 원추 시각화 단계는 각 내포 수준 내에 다중 루프(multi-way loop)가 존재하는지 판단하고, 다중 루프가 존재하는지 여부를 해당 내포 수준에 표시하는 단계를 더 포함한다. 스레드 시각화 단계는 스레드들 중 임계 구역(critical section)을 포함하는 스레드를 결정하고, 임계 구역을 포함하는 스레드를 록 변수에 따라 상이한 색깔로 구별되도록 표시하는 단계를 더 포함한다. 또는, 스레드 시각화 단계는, 병행 스레드들 간의 병행성에 기반하여 스레드들 간의 거리를 결정하고, 원추 상에 스레드들을 결정된 거리만큼 이격되게 각각 표시하며, 스레드들 중 자식 스레드를 포함하는 부모 스레드를 자식 스레드와 구별되도록 표시하는 수직적 추상화 단계를 더 포함한다. 더 나아가, 스레드 시각화 단계는, 원추 상의 동일한 원추 상에 위치된 스레드들 중 소정 개수의 스레드들을 하나의 스레드로 표시하는 수평적 추상화 단계를 더 포함한다. 뿐만 아 니라, 접근 사건 시각화 단계는, 스레드들을 접근 사건이 발생되지 않은 스레드, 읽기 접근 사건이 쓰기 접근 사건보다 먼저 발생한 스레드, 쓰기 접근 사건이 읽기 접근 사건보다 먼저 발생한 스레드로 각각 분류하고, 분류된 스레드들을 서로 구별되도록 표시하는 단계를 더 포함한다.
상기와 같은 목적들을 달성하기 위한 본 발명의 또다른 면은, 본 발명의 다른 면에 의한 방법을 구현하기 위한 명령어들을 포함하는 컴퓨터 프로그램을 기록하는 기록 매체에 관한 것이다.
본 발명에 의하여, 각 스레드마다 논리적인 고유한 정보를 생성하기 때문에 접근 사건간의 병행성 여부를 정확하게 파악할 수 있고, 병렬적으로 수행하면서 경합을 탐지할 수 있다.
또한, 본 발명에 의하여 병렬 컴퓨팅에서 발생하는 오류들을 탐지하고 디버깅하기 위해 많은 시간과 노력이 드는 것을 방지할 수 있으므로, 표준화되어 있는 OpenMP 프로그램을 위한 디버깅 도구의 산업 표준화를 적극적으로 지원할 수 있다.
본 발명과 본 발명의 동작상의 이점 및 본 발명의 실시에 의하여 달성되는 목적을 충분히 이해하기 위해서는 본 발명의 바람직한 실시예를 예시하는 첨부 도면 및 첨부 도면에 기재된 내용을 참조하여야만 한다.
이하, 첨부한 도면을 참조하여 본 발명의 바람직한 실시예를 설명함으로서, 본 발명을 상세히 설명한다. 그러나, 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며, 설명하는 실시예에 한정되는 것이 아니다. 그리고, 본 발명을 명확하게 설명하기 위하여 설명과 관계없는 부분은 생략되며, 도면의 동일한 참조부호는 동일한 부재임을 나타낸다.
명세서 전체에서, 어떤 부분이 어떤 구성요소를 “포함”한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라, 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 “...부”, “...기”, “모듈”, “블록” 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어나 소프트웨어 또는 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다.
도 2는 OpenMP 프로그램에서 자료 경합을 탐지하기 위한 본 발명의 일면에 따른 방법을 나타내는 흐름도이다.
우선, 사용자로부터 경합 탐지 대상인 프로그램의 원시 코드 및 경합 탐지를 수행할 분석 속성을 수신한다(S210). 본 발명에 따른 방법은, 웹 환경에서 동작하는 서버 및 클라이언트에서 각각 동작할 수 있다. 따라서, 사용자는 클라이언트의 인터페이스를 통하여 원시 코드 및 분석 속성을 입력할 수 있으며, 입력된 정보는 네트워크를 통하여 서버로 전달될 수 있다.
그러면, 서버는 수신된 분석 속성에 따른 경합 탐지를 위하여 원시 코드를 변형시켜 변형된 목적 코드를 생성한다(S220). 목적 코드가 생성되면, 컴파일된 목적 코드를 실행하면서 실행중 생성되는 복수 개의 병행 스레드에 대한 접근 사건들을 동기화 명령어 포함 여부를 기준으로 분류하고, 공유 변수에 대한 각 접근 사건 들 중 접근 역사에 저장된 이전의 접근 사건과 병행성 관계에 있는 접근 사건을 경합으로 탐지하여 경합 탐지 결과를 생성한다(S230).
생성된 경합 탐지 결과는 다시 네트워크를 통하여 클라이언트로 전송된다. 클라이언트는 경합 탐지 결과를 수신한 후(S240), 수신된 경합 탐지 결과를 분석한다(S250). 클라이언트가 경합 탐지 결과를 분석하는 이유는 경합 탐지 결과를 사용자가 직관적으로 이해할 수 있도록 3차원 원추 상에 도시하기 위함이다. 이를 위하여, 우선 프로그램의 내포 깊이가 경합 탐지 결과로부터 획득되고, 이에 따라 3차원 원추의 높이를 등분한다(S260). 원추가 등분되면, 프로그램의 실행 중 생성되는 복수 개의 병행 스레드 중 동일한 내포 수준의 스레드를 원추의 동일한 높이에 위치한 원주 상에 시각화한다(S270). 또한, 스레드들 중 공유 변수에 대한 접근 사건들이 발생한 스레드들을 읽기 및 쓰기 접근 사건의 발생 유무 및 발생 선후에 따라 분류한다. 그러면, 분류된 스레드에 따라서 상이한 심벌을 이용하여 시각화함으로써 이들 스레드를 서로 구별한다(S280). 도 2에 도시된 각 단계들에 대해서는 명세서의 해당 부분에서 상세히 후술되므로 명세서의 간략화를 위하여 중복된 설명이 생략된다.
도 3은 본 OpenMP 프로그램에서 자료 경합을 탐지하기 위한 본 발명의 다른 면에 따른 시스템을 개념적으로 나타내는 블록도이다.
도 3에서, 클라이언트(110) 및 서버(120)는 인터넷과 같은 네트워크를 통하여 서로 연결된다. 클라이언트(110)는 웹 인터페이스(10) 및 경합 시각화부(40)를 포함하고, 서버(120)는 전처리부(20) 및 수행중 분석부(30)를 포함한다.
사용자 인터페이스에 해당하는 웹 인터페이스(10)는 최적의 기능과 성능으로 경합을 탐지하기 위한 탐지 환경을 제공한다. 또한, 경합 시각화부(40)는 프로그램의 수행 양상이나 탐지된 경합에 대해서 직관적인 경합 탐지 환경을 제공한다. 전처리부(20)는 사용자 요구 사항을 반영하여 소스 프로그램을 변형하여 변형된 목적 코드가 실행될 수 있도록 한다. 즉, 전처리부(20)는 병렬 프로그램을 수행중에 경합을 탐지하기 위해서 감시할 수 있도록 프로그램 코드를 변형하는 과정을 거친다. 수행중 분석부(30)는 전처리부(20)로부터 수신되는 목적 코드를 수행하면서 수행도중의 경합을 분석하여 경합 탐지 결과를 생성한다.
도 4는 도 1에 도시된 경합 탐지 시스템에 포함되는 전처리부(20)의 동작을 개념적으로 설명하기 위한 블록도이다.
전처리부(20)는 웹기반으로 동작하기 때문에, 사용자 인터페이스(10)는 모두 웹브라우저를 이용해 이루어진다. 이를 위해서 JSP(Java Server Pages) 웹 프로그래밍 언어를 이용하며, 내부적으로 동작하는 서버측 프로그램의 경우 Java와 C를 이용할 수 있다. 웹 인터페이스(10)에서 입력되는 값들은 원시 코드, 경합 탐지 분석모드, 분석 속성, 및 경합 탐지 엔진 코드이다. 입력받은 원시 코드는 프로그램 스캐닝부(210)에 전달된다. 그러면, 프로그램 스캐닝부(210)는 원시 코드를 분석하여 프로그램 모델을 결정하고, PS-Code(240)라 불리는 의사 코드를 삽입한 변형된 프로그램을 생성한다. 의사 코드는 실제로 경합 탐지 엔진을 삽입할 위치와 엔진에 전달할 정보를 삽입한 코드로서, 원시 코드 변형 과정에서 원시 코드를 다시 분석하는 중복 작업을 회피하기 위하여 삽입된다. 프로그램 모델은 내포 병렬성과 동기 화 모델로 분류된다. 내포 병렬성의 기준은 내포된 fork/join의 유무이며, 동기화의 기준은 barrier, critical section, ordered, event 등이지만 OpenMP에서는 ordered와 event 동기화를 현재 제공하지 않으므로 동기화 대상에서 제외한다. 일반적으로 프로그램 모델에 따른 경합 디버깅 기법은 내포 병렬성만을 고려한 기법과 동기화만을 고려한 기법이 내포 병렬성과 동기화를 모두 고려한 기법에 비해서 기능 및 성능이 우수하다.
프로그램 모델은 엔진 선택부(220)에 전달되고, 엔진 선택부(220)는 사용자가 요구하는 탐지 성능인 분석 속성을 웹 인터페이스(10)로부터 입력받아 조합된 코드를 생성하여 최적 엔진을 선택한다. 이 때, 엔진 선택부(220)는 현재의 분석 속성을 고려하여 최적의 엔진을 룩업 테이블로부터 선택할 수 있다.
도 7은 도 2에 도시된 전처리부(20)에 포함되는 엔진 선택부(220)에서 최적의 경합 탐지 엔진을 선택하기 위해 참조하는 엔진 코드표인 ECP(Engine Code Properties) 표를 예시하는 도면이다.
도 7을 참조하면, 각각의 엔진의 속성은 동기화 명령어 여부(No-Sync), 경계(barrier), 순서화(Ordered), 임계 구역(critical section), 접근 사건(Event), 내포성 여부(Nested), 효과성(Effectiveness), 확장성(scalability), 시간(Time), 공간(Space), 엔진 타입(Engine type) 등과 같은 인자를 고려하여 선택될 수 있다. 도 7에서, ‘DiSc91’이란 Dinning, A., 및 E. Schonberg 저, "Detecting Access Anomalies in Programs with Critical Sections," The 2nd Workshop on Parallel and Distributed Debugging, pp. 85-96, ACM, May 1991.이라는 문헌에 기재된 엔진 을 나타내고, ‘Mell91’이란 Mellor-Crummey, J. 저, "On-the-fly Detection of Data Races for Programs with Nested Fork-Join Parallelism," Supercomputing, pp24-33, ACM/IEEE, Nov. 1991.이란 문헌에 기재된 엔진을 나타낸다. 또한, ‘JuMc00’은 Jun, Y. 및 C. E. McDowell 저, "Scalable Monitoring Technique for Detecting Races in Parallel Programs," 5-th Int'l Workshop on High-Level Parallel Programming Models and Supportive Environments, pp. 340-347, IEEE, Cancun, Mexico, May 2000. 이란 문헌에 기재된 엔진이고, ‘NuRu88’은 Nudler, I., 및 L. Rudolph 저, "Tools for the Efficient Development of Efficient Parallel Programs," The 1st Israeli Conf. on Computer System Engineering, May 1988.이란 문헌에 기재된 엔진을 나타낸다. 마지막으로, ‘JuKo93’이란 Jun, Y. 및 K. Koh 저, "On-the-fly Detection of Access Anomalies in Nested Parallel Loops," The ACM/ONR Workshop on Parallel and Distributed Debugging, pp. 107-117, ACM, May 1993.에 기재된 엔진을 나타낸다. 이러한 문헌들은 본 발명의 출원 전에 반포된 간행물에 기재된 것으로서 본 명세서에 참조되어 통합된다.
다시 도 4를 참조하면, 엔진 선택부(220)는 도 7에 도시된 ECP Table(250)을 참조하여 선택된 경합 탐지 엔진에 상응하는 엔진 코드를 소스 변형부(230)로 전달한다. 그러면, 소스 변형부(230)는 프로그램 스캐닝부(210)에 의하여 삽입된 의사 코드를 선택된 엔진으로 대체한다. 삽입되는 라이브러리로는 스레드의 시작 전 경합에 필요한 자료 구조 생성이나 자료 초기화를 위한 라이브러리 함수인 bdstart1(), bdinit1(), initf()이 있다. 또한, 스레드의 분기점인 C$OMP PARALLEL DO 다음에는 스레드의 분기 시작을 알리는 라이브러리 함수인 ddinit1(), arraycopy(), bdfork1()가 필요하다. 그리고 경합의 가능성 있는 사건들의 선택과 경합을 탐지하는 라이브러리 함수인 checkread(), checkwrite()가 필요하다. 스레드의 종료를 알리는 C$OMP END PARALLEL DO 다음에는 모든 알고리즘의 수행 끝을 알리고 모든 파일 포인트나 자료 구조를 마무리하는 라이브러리 함수인 bdjoin1(), bdend1()가 필요하다. 또한, 임계 구역을 표시하는 lock(), unlock() 함수도 필요하다.
이렇게 만들어진 변형된 원시코드는 웹 인터페이스를 통하여 사용자에게 반환한다. 그런데, 실제로 경합을 탐지하려면 수행 가능한 목적 코드가 필요하다. 그러므로, 변형된 원시 코드를 컴파일하기 위해 컴파일러(240)가 필요하다. 예를 들어, 컴파일 과정은 OpenMP 전용 컴파일러 Omni C/C++ 컴파일러를 이용하여 수행될 수 있다.
도 5는 도 1에 도시된 경합 탐지 시스템에 포함되는 수행중 분석부(30)의 동작을 개념적으로 설명하기 위한 블록도이다.
수행중 경합 탐지 기법은 프로그램 수행동안에 정보를 수집하기 위하여 프로그램을 변형한다. 즉 스레드가 생성되는 지점 및 합류되는 지점, 공유 변수에 대한 읽기 및 쓰기 접근 사건 지점, 동기화 지점들을 감시하는 코드를 원시 코드에 삽입해야 한다. 수행중 경합 탐지 기법은 이렇게 변형된 프로그램의 수행과 분석을 동시에 진행하는 기법이다. 수행중 접근이상 탐지 기법은 접근이상이 존재하면 적어도 하나는 탐지할 수 있는 장점을 가지고 있다. 레이블링 엔진(310)은 프로그램의 수행중에 생성된 스레드에 논리적 병행성 정보를 생성하여 스레드마다 고유한 식별자를 부여한다. 본 발명에 의한 레이블링 엔진(310)은 English-Hebrew기법과 Nest Region 기법을 사용할 수 있다. 수행중 탐지 기법인 English-Hebrew 기법은 동기화 명령을 가지는 내포 병렬 루프 프로그램에서 적용될 수 있는 레이블링 기법이다. NR(Nest Region) 레이블링 기법은 동기화가 없는 내포 병렬 루프프로그램을 대상으로 하며, 각 스레드는 이전에 발생한 스레드들의 반복지수열인 지수 역사(index history)에 의해 스레드의 종류와 수를 인식할 수 있다. 여기서 지수 역사는 각 스레드에서 지수 역사의 마지막 요소에 첨가 또는 삭제에 의해 구성되는 것으로, 두 개의 숫자에 의해서 지수 역사의 사전적인 순서를 표시할 수 있다. NR 레이블링은 이 특성에 기반하여 내포구역(nested region)을 정의한다. 이 기법의 레이블 구조는 TID와 OH로 구성되는데, 여기서 TID는 스레드 식별자(thread identifier)이고 OH는 다중 방향 내포 루프가 공유하는 내포 구역을 가지는 합류 스레드의 리스트이다. 두 스레드들의 논리적인 병행성을 결정하기 위한 비교에서는, 두 스레드의 내포 구역의 중복여부를 검사하는 과정을 수행한다. NR 레이블링에서 스레드들의 병행성을 결정하는 과정에서 두 스레드의 합류 계수가 다르면, 현재 스레드의 OH에 있는 TID 중 한 항목을 이전 스레드의 TID와 비교한다. 따라서 OH의 크기는 최악의 경우에는 그 프로그램의 수행에서 가지는 내포 깊이로 한정된다. OH를 사용함으로써 합류 스레드가 임의의 내포 수준에서 현재 스레드에 직접적인 발생 후 관계를 알 수 있다.
사건 선택 엔진(320)은 경합 탐지시 시간적/공간적 효율성을 높이기 위해 개 발된 엔진으로서, 공유 자료 구조인 접근 역사에 발생하는 병목 현상을 줄인다. 종래 기술에 따르면, 병렬 프로그램에서 발생하는 모든 공유 변수에 대한 접근 사건들을 감시하기 위해서 접근 역사(Access History)를 유지한다. 이와 반대로, 사건 선택 엔진(320)은 경합에 참여할 가능성 있는 접근 사건들만 접근 역사에 유지한다. 사건 선택 엔진(320)은 임계 구역을 가진 병렬 프로그램에서 사용 가능한 JuMc00 등을 사용할 수 있으며, 경합 탐지에 필요한 접근 사건인 경우에만 접근 역사에 접근하므로 병목 현상을 최소화한다.
경합 검출 엔진(330)은 각 접근 사건들에 대한 병행성 정보를 저장하는 형태를 네 가지의 접근 역사로 분류하여 접근 사건들을 저장 및 삭제한다. 이렇게 분류된 형태는 동기화 명령어를 포함하고 있는 읽기 접근 사건과 쓰기 접근 사건을 위한 접근 역사들과, 동기화 명령어를 포함하고 있지 않은 읽기 접근 사건과 쓰기 접근 사건을 위한 접근 역사들로 구성되어 있다. 이런 접근역사를 기반으로 프로그램 수행동안 공유 변수에 대한 매 접근 사건들을 감시하여 접근 역사에 저장되어 있는 이전의 접근 사건들과 병행성 관계를 검사한 후에 병행성 관계에 있는 것을 경합으로 보고 해당되는 접근 역사에 유지한다. 또한 경합 검출 엔진(330)은 접근 역사의 기억 공간을 줄이기 위해서 동기화 명령어를 포함하지 있지 않은 쓰기 접근 사건에서 경합이 발생하면 경합을 보고하고, 네 가지 종류의 접근 역사에 있는 모든 내용을 삭제하고 현재의 접근 사건을 해당 접근 역사에 유지한다.
도 6은 도 1에 도시된 경합 탐지 시스템에 포함되는 경합 시각화부(40)의 동작을 개념적으로 설명하기 위한 블록도이다. 경합 시각화부(40)는 원추 시각화 부(410), 스레드 시각화부(420), 및 접근 사건 시각화부(430)를 포함한다.
원추 시각화부(410)는 경합 탐지 결과를 분석하여 얻은 내포 깊이(nesting depth) 값에 따라 (1/ nesting depth * each level number)의 비율로 3차원 원추를 도시한다. 원추 시각화 모듈(910)에서 수행하는 동작의 의사 코드는 다음과 같다.
for(a=0;a<levelstore;a++){ // each level number
:
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); // 광원 함수
glRotatef(90.0, 1.0, 0.0, 0.0); // 위치 함수
gluCylinder(PencilObj, 0.0, 1.0-(1.0/levelstore*a), 1.0-1.0/levelstore*a,20, 2);
// 원뿔그리기 - 지름 0, 반지름/높이 1.0-(1.0/levelstore*a), 옆면 20각
}
※ nesting depth = levelstore, each level number = a
도 8은 도 3에 도시된 경합 시각화부(40)에서 원추 시각화 동작이 수행된 결과를 예시하는 도면이다.
도 8에는 내포 수준이 3인 병렬 프로그램을 도시한다. 내포 수준이 3이기 때문에 도시된 원추의 높이는 3등분된다. 이 때, 각 내포 수준 내에 다중 루프(multi-way loop)가 존재할 경우, 다중 루프가 존재함을 콤보 박스로 표시한다. 범례에 설명된 바와 같이, 다중 루프인 경우 아랫방향 화살표로 표시하고, 원웨이 루프일 경우에는 굵은 점으로 표시한다. 이와 같이 다중 루프와 원웨이 루프를 상 이한 심벌을 이용하여 도시함으로써, 사용자가 직관적으로 다중 루프의 존재 여부를 파악할 수 있다.
원추 추상화 단계가 수행되면, 동일한 내포 수준에 속하는 스레드를 동일한 높이에 위치한 원주 상에 시각화한다.
도 9는 도 3에 도시된 경합 시각화부(40)에서 스레드 시각화 단계가 수행된 결과를 예시하는 도면이다.
이때, 스레드는 범례에 나타난 바와 같이 확장가능한 스레드(scalable thread)인지 여부, 비-접근 스레드인지, 및 임계 구역을 포함하는지 여부에 따라 각각 상이한 심벌을 이용하여 도시된다. 따라서, 사용자는 도시된 스레드의 심벌만 보고서 용이하게 각 심벌의 속성을 파악할 수 있다. 여기서, 높이는 high[level] = (1.0 / levelmax) * (each level number) * (main cone high)을 이용하여 계산되고, 각도는 degree[level] = (360 / (each level thread total number) )을 이용하여 계산될 수 있다. 그러면, 도시되는 각 심벌의 위치 좌표는 X: high[level] * cos(degree[level] * thread number), Y: high[level] * sin(degree[level] * thread number), 및 Z: high[level]로 계산될 수 있다.
스레드 시각화부(420)에서 수행되는 동작의 의사 코드는 다음과 같다.
if(lev[1][0] != 0) {
degree[1] = (3.141592) / 180 * (360/lev[1][0]); // 각도 (Level 1)
high[1] = (1.0 / levelstore); // 높이 (Level 1)
:
glBegin(GL_LINES); // 스레드 그림 시작
glVertex3f(0,0,0); // 스레드 시작점
glVertex3f(high[1]*cos(degree[1]*b)+0.01,high[1]*sin(degree[1]*b)+0.01,high[1]-0.01);
glEnd(); // 스레드 끝점 및 그림 마침
:
glutSolidSphere(0.043,20,20); // Non-Access 심벌인 원구 표현
그런데, 동일한 내포 수준에 포함되는 스레드의 개수는 매우 많을 수 있으며, 이 경우 한정된 원주 상에 모든 스레드를 도시하는 것이 불가능할 수 있다. 또는, 모든 스레드를 한정된 원주 상에 도시하는 것이 가능하더라도, 이 경우 각 스레드의 속성을 파악하기에 너무 복잡할 수 있다. 그러므로, 필요할 경우, 하나 이상의 스레드를 각각 수직 및 수평 방향으로 접고 펼칠 수 있는 수직 및 수평 추상화 단계(S260)가 수행된다.
도 10은 도 3에 도시된 경합 시각화부(40)에서 수직적 추상화 단계가 수행된 결과를 예시하는 도면이며, 도 11은 수평적 추상화 단계가 수행된 결과를 예시하는 도면이다.
수직적 추상화 기법은 스레드간의 각도를 이용하여 3차원 원뿔 상에 하나의 스레드는 하나의 원형 심벌로 추상화하는 기법이다. 이 경우, 추상화된 스레드인지 여부를 포함하기 위하여
Figure 112009063676652-pat00003
Figure 112009063676652-pat00004
자식 스레드의 포함여부에 따라서 부모 스레드가 자식 스레드를 포함하고 있지만 부모 스레드가 표시하지 않았다면 추상화된 부모 스레드 의 원형 심벌 내에 +를 추가하여 모양으로 하고 부모 스레드가 단말 스레드이거나 부모 스레드가 포함하고 있는 자식 스레드들을 표현하고 있다면 추상화 된 부모 스레드의 원형 심벌 내에 -를 추가하여 모양으로 추상화한다. 전술된 바와 같이 원형 심벌의 둘레가 굵은 선이며 색이 입혀진 심벌은 추상화 된 스레드 내에 임계구역(critical section)을 포함하고 있다는 의미한다.
수평적 추상화 기법은 동일한 원뿔 상에 표현되는 스레드들의 시각적 공간 복잡도를 줄이기 위한 것이다. 원뿔 상에 스레드가 수직적으로 추상화되었다 하더라도 여전히 시각적 공간 복잡도가 크기 때문에 수평적 추상화 기법을 이용하여 여러 개의 스레드를 하나의 스레드로 표현함으로써 스레드 복잡성을 줄이는 것도 가능하다. 즉 복잡성의 비율 조절을 통해 전체 스레드가 아닌 수평적으로 추상화된 스레드가 원뿔 상에 표시된다. 도 11을 참조하면, 내포수준 2에서는 4:1 비율로 추상화 된 것이고 내포수준 3에서는 2:1로 추상화 된 것이다.
도 10 및 도 11로부터 알 수 있는 바와 같이, 본 발명은 OpenMP 프로그램의 수행구조를 3차원 원추 상에 확장적으로 시각화하여 직관적으로 경합을 탐지할 수 있는 환경을 제공한다. 3차원 추상상의 시각화는 시각화의 한계를 위해서 스레드간의 병행성 관계를 효과적으로 표현할 수 있는 POEG(Partial Order Execution Graph)의 개념을 이용한다. 그리고 확장적 시각화는 시각적 복잡성을 줄이기 위해서 추상화 기법을 이용한다. 이 기법은 복잡성의 원인이 되는 스레드, 접근 사건, 동기화 등에 대해서 상징적인 의미를 부여한 심벌로 대체함으로써 시각적 복잡성을 해결한다. POEG에서 정점(vertex)은 병렬 스레드의 생성/합류 명령 및 임의의 공유 변수에 대한 접근 사건을 나타내고, 간선(arc)은 스레드를 나타낸다. r과 w는 각각 해당 스레드에서의 읽기 및 쓰기 사건을 나타낸다. 임의의 두 사건 ei 및 ej 사이에 경로가 없으면 ei 및 ej는 병행(concurrent)하다고 한다. 동일한 공유 변수에 대한 두 사건들 중에서 하나가 쓰기 사건이면 두 사건은 대립하는 사건이라고 한다. ei 및 ej 가 대립 사건이고 병행한 경우 두 사건이 경합한다고 한다.
스레드가 시각화되면, 접근 사건 시각화부(430)가 각 스레드들 중 공유 변수에 대한 접근 사건들이 발생한 스레드들을 읽기 및 쓰기 접근 사건의 발생 유무 및 발생 선후에 따라 분류하고 시각화한다.
도 12는 도 3에 도시된 경합 시각화부(40)에서 접근 사건 시각화 단계가 수행된 결과를 예시하는 도면이다.
도 13은 접근 사건 추상화 기법에서 이용되는 심벌들을 예시하는 도면이다.
도 13에 예시된 심벌을 참조하여 도 12를 설명하면,
Figure 112009063676652-pat00005
Figure 112009063676652-pat00006
도 12의 내포수준 1에서 오른쪽에 있는 심벌은 스레드에 공유 변수에 대한 접근 사건이 발생하지 않은 스레드이며 자식 스레드들을 포함하고 있다. 내포수준 2에서 앞쪽에 있는 심벌은 스레드에서 공유 변수에 대해서 쓰기접근 사건이 먼저 발생한 것이고 둘레가 굵은 선이고 색이 입혀져 있기 때문에 임계구역 내에 추상화 된 쓰기 접근 사건임을 알 수 있다. 그리고 색은 록 변수마다 다르다. 그리고 수평적 추상화 기법은 Thread 추상화에서 지원하는 수평적 추상화 기법과 동작원리는 동일하다.
접근 사건 시각화 과정은 스레드 시각화 과정과 유사하지만 시각화하는 대상 이 공유 변수에 대한 접근 사건들이라는 점이 다르다. 접근 사건의 종류는 읽기와 쓰기 접근 사건이 발생되지 않은 스레드 심벌인 non-access thread, 읽기 접근 사건이 먼저 발생한 스레드 심벌인 read-first thread, 그리고 쓰기 접근 사건이 먼저 발생한 스레드 심벌인 write-first thread 등이 있다. 접근 사건 시각화 기법에도 스레드 시각화 과정에서와 동일하게 수직적 추상화 기법과 수평적 추상화 기법이 적용될 수 있다. 수직적 추상화 기법은 스레드 추상화에서 제공하는 기능과 동일하게 +와 -를 심벌을 이용한다.
접근 사건 시각화부(430)에서 수행하는 동작을 나타내는 의사 코드는 다음과 같다.
if(lev[1][0] != 0) {
degree[1] = (3.141592) / 180 * (360/lev[1][0]); // 각도 (Level 1)
high[1] = (1.0 / levelstore); } // 높이 (Level 1)
:
glBegin(GL_LINES); // 스레드 그림 시작
glVertex3f(0,0,0); // 스레드 시작점
glVertex3f(high[1]*cos(degree[1]*b)+0.01,high[1]*sin(degree[1]*b)+0.01,high[1]-0.01);
glEnd(); // 스레드 끝점 및 그림 마침
:
redraw( ); // Non-Access 대신 Read-first, Write-first 심벌 표현
도 12에서 알 수 있는 바와 같이, 본 발명에 의하면 OpenMP 프로그램의 수행구조를 3차원 원추상에 확장적으로 시각화하여 직관적으로 경합을 탐지할 수 있는 환경이 제공된다.
Thread Checker는 프로그램을 순차적으로 수행하면서 접근 사건들의 패턴들을 검사하여 경합을 탐지하는 방법인 프로젝션 기법을 사용하지만 본 발명은 프로그램을 병렬적으로 수행하면서 각 스레드마다 논리적 병행성 관계를 알 수 있는 고유한 정보를 생성하여 접근 사건간의 병행성 관계를 검사하여 경합을 탐지하는 방법인 기법을 사용한다. 본 발명은 프로젝션 기법보다 기능과 성능적인 측면에서 우수한데, 그 이유는 각 스레드마다 논리적인 고유한 정보를 생성하기 때문에 접근 사건간의 병행성 여부를 정확하게 파악할 수 있고, 병렬적으로 수행하면서 경합을 탐지하기 때문이다.
또한, 본 발명은 병렬 컴퓨팅 환경에서의 성능을 향상시키거나 시각적 결과를 요하는 분야에서 사용될 수 있다. 본 발명을 이용하면, 프로그램의 특성에 따른 최적의 경합 탐지 엔진들이 분류되어 있기 때문에 경합 탐지 엔진의 특성들을 쉽게 이해할 수 있을 뿐만 아니라 향후에 연구해야 될 경합 탐지 엔진들로 쉽게 파악할 수 있다. 또한, 두 번째, 본 발명에 의하면 병렬 프로그램에 대해 경합 존재 여부를 검증할 수 있으므로 프로그램 유지보수 및 시험을 위한 비용의 절감효과를 볼 수 있다. 더 나아가, 본 발명에 의하면 웹 기반을 제공하는 도구를 이용하기 때문에, 경합 탐지를 위한 모든 프로그램을 사용자 컴퓨터에 설치하지 않더라도 원격지에서 손쉽게 병렬 프로그램을 실행시키거나 디버깅할 수 있으므로 병렬 프로그래밍 가상 실험실과 같은 환경을 제공할 수 있다.
종래 기술에 의한 Thread Checker에 대한 본 발명의 효과를 비교 분석하기 위해서 합성 프로그램(synthetic programs)을 작성하여 실험한다. 그 실험 결과로써, 기능적인 측면에서 Thread Checker는 경합의 존재를 검증하지 못하지만 제안된 도구는 경합의 존재를 검증할 수 있다. 그리고 성능적인 측면에서 Thread Checker는 싱글 프로세서 상에서 경합 탐지 시에 소요되는 시간의 증가 비율은 O(n2)이고 제안된 도구는 O(n)이다. 그리고 멀티 프로세서 상에서 기존의 도구보다 경합 탐지 시에 소요되는 시간의 증가비율은 최대 병렬성의 증가에 따라서 총 접근 사건수 n에 대해서 O(n)씩 비례적으로 증가됨을 실험적으로 알 수 있었다. 여기서 n은 총 접근 사건수를 의미한다. 또한 경합 탐지 시에 소요되는 메모리와 파일공간에 대해서는 변화율이 거의 없다는 것을 실험적으로 알 수 있었다. 그리고 합성 프로그램의 경합 탐지를 위한 수행시에 기록된 정보를 이용하여 3차원 원뿔상에 확장적 시각화를 한 결과 사용자는 직관적으로 경합을 디버깅할 수 있는 환경이 제공된다.
본 발명은 도면에 도시된 실시예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 예를 들면, 본 명세서에서, 대상 프로그램은 C 언어를 기반으로 SISE(single input single execution) 속성을 만족하는 OpenMP 프로그램일 수 있다. OpenMP 프로그램의 내포 병렬성을 분석하기 위하여, OpenMP 디렉티브 중에서 "#pragma omp parallel for"를 고려하고, 동기화를 위해서는 "#pragma omp critical"을 고려한다. 그리고 사용자 요구사항은 경합 탐 지의 효율성을 시간과 공간적인 측면을 고려한다. 대상 프로그램의 특성과 사용자 요구사항을 기반으로 최적의 성능으로 경합 존재를 검증할 수 있는 엔진을 구성한다. 여기서 경합 검증을 위한 엔진은 논리적 병행성 정보를 생성하는 레이블링 기법과 경합에 참여할 가능성이 있는 접근 사건들만을 저장하는 공유 자료 구조인 접근역사(access history)를 이용하는 경합 탐지 프로토콜 기법일 수 있다. 이러한 엔진은 사용자 컴퓨터에서 수행되지 않고 서버 컴퓨터에서 수행되며 사용자는 웹으로 탐지된 경합을 볼 수 있다. 또한 프로그램 수행중에 기록된 스레드 정보, 공유 변수에 대한 접근 사건 정보, 그리고 탐지된 경합 정보를 사용자가 효과적으로 이해할 수 있도록 원뿔 형태의 3차원 시각화를 제공한다. 경합 탐지에 관련된 엔진들은 서버 컴퓨터에서 동작되며 시각화에 관련된 엔진은 클라이언트 컴퓨터에서 동작한다. 사용자는 OpenMP 프로그램에서 발생하는 경합을 탐지하기 위해서는 네트워크로 연결된 컴퓨터에서 웹 브라우저를 이용할 수 있다.
따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 등록청구범위의 기술적 사상에 의해 정해져야 할 것이다.
도 1a는 병렬 프로그램의 스레드의 경합을 설명하기 위한 의사 코드이다.
도 1b는 도 1a에 도시된 의사 코드가 실행될 때의 POEG를 예시하는 도면이다.
도 2는 OpenMP 프로그램에서 자료 경합을 탐지하기 위한 본 발명의 일면에 따른 방법을 나타내는 흐름도이다.
도 3은 본 OpenMP 프로그램에서 자료 경합을 탐지하기 위한 본 발명의 다른 면에 따른 시스템을 개념적으로 나타내는 블록도이다.
도 4는 도 1에 도시된 경합 탐지 시스템에 포함되는 전처리부(20)의 동작을 개념적으로 설명하기 위한 블록도이다.
도 5는 도 1에 도시된 경합 탐지 시스템에 포함되는 수행중 분석부(30)의 동작을 개념적으로 설명하기 위한 블록도이다.
도 6은 도 1에 도시된 경합 탐지 시스템에 포함되는 경합 시각화부(40)의 동작을 개념적으로 설명하기 위한 블록도이다.
도 7은 도 2에 도시된 전처리부에 포함되는 엔진 선택부에서 최적의 경합 탐지 엔진을 선택하기 위해 참조하는 엔진 코드표인 ECP(Engine Code Properties) 표를 예시하는 도면이다.
도 8은 도 3에 도시된 경합 시각화부(40)에서 원추 시각화 동작이 수행된 결과를 예시하는 도면이다.
도 9는 도 3에 도시된 경합 시각화부(40)에서 스레드 시각화 단계가 수행된 결과를 예시하는 도면이다.
도 10은 도 3에 도시된 경합 시각화부(40)에서 수직적 추상화 단계가 수행된 결과를 예시하는 도면이다.
도 11은 도 3에 도시된 경합 시각화부(40)에서 수평적 추상화 단계가 수행된 결과를 예시하는 도면이다.
도 12는 도 3에 도시된 경합 시각화부(40)에서 접근 사건 시각화 단계가 수행된 결과를 예시하는 도면이다.
도 13은 접근 사건 추상화 기법에서 이용되는 심벌들을 예시하는 도면이다.

Claims (25)

  1. OpenMP 프로그램에서 자료 경합을 탐지하기 위한 시스템에 있어서,
    사용자로부터 경합 탐지 대상인 프로그램의 원시 코드 및 경합 탐지를 수행할 분석 속성을 수신하고, 소정의 네트워크를 통하여 서버로부터 수신된 경합 탐지 결과를 출력하는 클라이언트; 및
    상기 네트워크에 접근 가능하며, 상기 분석 속성에 따라서 상기 프로그램의 수행중에 경합을 탐지하여 상기 경합 탐지 결과를 생성하는 상기 서버를 포함하며, 상기 서버는,
    상기 분석 속성에 따른 경합 탐지를 위하여 상기 원시 코드를 변형시켜 변형된 목적 코드를 생성하는 전처리부; 및
    상기 변형된 목적 코드의 실행 중 생성되는 복수 개의 병행 스레드에 대한 접근 사건들을 동기화 명령어 포함 여부를 기준으로 분류하고, 공유 변수에 대한 각 접근 사건들 중 접근 역사에 저장된 이전의 접근 사건과 병행성 관계에 있는 접근 사건을 경합으로 탐지하여 상기 경합 탐지 결과를 생성하기 위한 수행중 분석부(on-the-fly analyzer)를 포함하고,
    상기 수행중 분석부는, 상기 접근 사건들을 읽기/쓰기 사건인지 여부를 기준으로 더욱 분류하고, 동기화 명령어를 포함하지 않는 쓰기 접근 사건에서 경합이 발생하면, 상기 접근 역사의 내용을 초기화하고 현재 접근 사건을 상기 접근 역사에 기록하는 경합 검출 엔진; 상기 프로그램의 수행중에 생성된 스레드에 고유한 식별자를 부여하는 레이블링 엔진; 및 복수 개의 스레드들에 의하여 공유되는 접근 역사로부터 경합에 참여할 가능성이 없는 접근 사건들을 제거하는 사건 선택 엔진을 포함하고,
    상기 클라이언트는, 상기 경합 탐지 결과를 분석하여 상기 프로그램의 내포 깊이를 획득하고, 3차원 원추를 시각화한 뒤 상기 내포 깊이에 상응하도록 상기 3차원 원추의 높이를 등분하는 원추 시각화 모듈; 상기 프로그램의 실행 중 생성되는 복수 개의 병행 스레드 중 동일한 내포 수준의 스레드를 상기 원추의 동일한 높이에 위치한 원주 상에 시각화하는 스레드 시각화 모듈; 및 상기 경합 탐지 결과를 분석하여 상기 스레드들 중 공유 변수에 대한 접근 사건들이 발생한 스레드들을 읽기 및 쓰기 접근 사건의 발생 유무 및 발생 선후에 따라 분류하고, 분류된 스레드들을 서로 구별되도록 시각화하는 접근 사건 시각화 모듈을 포함하며,
    상기 스레드 시각화 모듈은, 상기 스레드들 중 임계 구역(critical section)을 포함하는 스레드를 결정하고, 임계 구역을 포함하는 스레드를 록 변수에 따라 상이한 색깔로 구별되도록 더욱 표시하는 것을 특징으로 하는 시스템.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서, 상기 레이블링 엔진은,
    English-Hebrew 기법 및 Nest Region 기법 중 적어도 하나를 이용하는 것을 특징으로 하는 시스템.
  5. 제1항 및 제4항 중 어느 한 항에 있어서, 상기 전처리부는,
    상기 프로그램의 내포 병렬성 유무 및 동기화 명령 포함 여부에 따라 상기 프로그램이 속하는 프로그램 모델을 결정하는 프로그램 스캐닝부(program scanner);
    상기 프로그램 모델 및 상기 분석 속성에 따라 상기 프로그램의 경합 탐지에 이용될 최적의 경합 탐지 엔진을 선택하는 엔진 선택부(engine selector);
    선택된 경합 탐지 엔진을 이용하여 상기 원시 코드를 변형시켜 변형된 원시 코드를 생성하는 소스 변형부(source instrumentor); 및
    상기 변형된 원시 코드를 컴파일하여 실행가능한 변형된 목적 코드를 생성하는 컴파일러(compiler)를 포함하는 것을 특징으로 하는 시스템.
  6. 제5항에 있어서,
    상기 프로그램 스캐닝부는 상기 경합 탐지 엔진이 상기 원시 코드에 삽입될 위치에 의사 코드(pseudo-code)를 삽입하고,
    상기 소스 변형부는 상기 의사 코드를 상기 경합 탐지 엔진에 상응하는 라이브러리로 대체하여 상기 변형된 원시 코드를 생성하는 것을 특징으로 하는 시스템.
  7. 제5항에 있어서,
    상기 엔진 선택부는, 상기 분석 속성에 따라 룩업 테이블로부터 최적의 경합 탐지 엔진을 선택하는 것을 특징으로 하는 시스템.
  8. 삭제
  9. 제1항에 있어서, 상기 원추 시각화 모듈은,
    각 내포 수준 내에 다중 루프(multi-way loop)가 존재하는지 판단하고, 상기 다중 루프가 존재하는지 여부를 해당 내포 수준에 더욱 표시하는 것을 특징으로 하는 시스템.
  10. 삭제
  11. 제1항에 있어서, 상기 스레드 시각화 모듈은,
    병행 스레드들 간의 병행성에 기반하여 상기 스레드들 간의 거리를 결정하고, 상기 원추 상에 상기 스레드들을 결정된 거리만큼 이격되게 각각 표시하며, 상기 스레드들 중 자식 스레드를 포함하는 부모 스레드를 자식 스레드와 구별되도록 표시하는 수직적 추상화 모듈을 더 포함하는 것을 특징으로 하는 시스템.
  12. 제1항에 있어서, 상기 스레드 시각화 모듈은,
    상기 원추 상의 동일한 원추 상에 위치된 스레드들 중 소정 개수의 스레드들을 하나의 스레드로 표시하는 수평적 추상화 모듈을 더 포함하는 것을 특징으로 하는 시스템.
  13. 제1항에 있어서, 상기 접근 사건 시각화 모듈은,
    상기 스레드들을 접근 사건이 발생되지 않은 스레드, 읽기 접근 사건이 쓰기 접근 사건보다 먼저 발생한 스레드, 쓰기 접근 사건이 읽기 접근 사건보다 먼저 발생한 스레드로 각각 분류하고, 분류된 상기 스레드들을 서로 구별되도록 더욱 표시하는 것을 특징으로 하는 시스템.
  14. 제1항에 있어서,
    상기 서버 및 상기 클라이언트는 웹 기반 환경에서 동작하는 것을 특징으로 하는 시스템.
  15. OpenMP 프로그램에서 자료 경합을 탐지하기 위한 방법에 있어서,
    사용자로부터 경합 탐지 대상인 프로그램의 원시 코드 및 경합 탐지를 수행할 분석 속성을 수신하고 수신된 분석 속성을 서버로 전송하는 단계;
    상기 분석 속성에 따라서 상기 프로그램의 수행중 경합을 탐지하여 상기 경합 탐지 결과를 생성하는 경합 탐지 결과 생성 단계; 및
    소정의 네트워크를 통하여 상기 경합 탐지 결과를 수신하여 출력하는 출력 단계를 포함하며,
    상기 경합 탐지 결과 생성 단계는, 상기 분석 속성에 따른 경합 탐지를 위하여 상기 원시 코드를 변형시켜 변형된 목적 코드를 생성하는 전처리 단계; 및 상기 변형된 목적 코드의 실행중 생성되는 복수 개의 병행 스레드에 대한 접근 사건들을 동기화 명령어 포함 여부를 기준으로 분류하고, 공유 변수에 대한 각 접근 사건들 중 접근 역사에 저장된 이전의 접근 사건과 병행성 관계에 있는 접근 사건을 경합으로 탐지하여 상기 경합 탐지 결과를 생성하기 위한 수행중 분석 단계를 포함하고,
    상기 수행중 분석 단계는, 상기 접근 사건들을 읽기/쓰기 사건인지 여부를 기준으로 더욱 분류하는 단계; 및 동기화 명령어를 포함하지 않는 쓰기 접근 사건에서 경합이 발생하면, 상기 접근 역사의 내용을 초기화하고 현재 접근 사건을 상기 접근 역사에 기록하는 단계; 상기 프로그램의 수행중에 생성된 스레드에 고유한 식별자를 부여하는 단계; 및 복수 개의 스레드들에 의하여 공유되는 접근 역사로부터 경합에 참여할 가능성이 없는 접근 사건들을 제거하는 단계를 포함하며,
    상기 경합 탐지 결과 생성 단계는, 상기 경합 탐지 결과를 분석하여 상기 프로그램의 내포 깊이를 획득하고, 3차원 원추를 시각화한 뒤 상기 내포 깊이에 상응하도록 상기 3차원 원추의 높이를 등분하는 원추 시각화 단계; 상기 프로그램의 실행 중 생성되는 복수 개의 병행 스레드 중 동일한 내포 수준의 스레드를 상기 원추의 동일한 높이에 위치한 원주 상에 시각화하는 스레드 시각화 단계; 및 상기 경합 탐지 결과를 분석하여 상기 스레드들 중 공유 변수에 대한 접근 사건들이 발생한 스레드들을 읽기 및 쓰기 접근 사건의 발생 유무 및 발생 선후에 따라 분류하고, 분류된 스레드들을 서로 구별되도록 시각화하는 접근 사건 시각화 단계를 포함하며,
    상기 스레드 시각화 단계는, 상기 스레드들 중 임계 구역(critical section)을 포함하는 스레드를 결정하고, 임계 구역을 포함하는 스레드를 록 변수에 따라 상이한 색깔로 구별되도록 표시하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  16. 삭제
  17. 삭제
  18. 제15항에 있어서, 상기 전처리 단계는,
    상기 프로그램의 내포 병렬성 유무 및 동기화 명령 포함 여부에 따라 상기 프로그램이 속하는 프로그램 모델을 결정하고, 상기 경합 탐지 엔진이 상기 원시 코드에 삽입될 위치에 의사 코드(pseudo-code)를 삽입하는 단계;
    상기 프로그램 모델 및 상기 분석 속성에 따라 룩업 테이블로부터 상기 프로그램의 경합 탐지에 이용될 최적의 경합 탐지 엔진을 선택하는 단계;
    상기 의사 코드를 상기 경합 탐지 엔진에 상응하는 라이브러리로 대체하여 변형된 원시 코드를 생성하는 단계; 및
    상기 변형된 원시 코드를 컴파일하여 실행가능한 변형된 목적 코드를 생성하는 단계를 포함하는 것을 특징으로 하는 방법.
  19. 삭제
  20. 제15항에 있어서, 상기 원추 시각화 단계는,
    각 내포 수준 내에 다중 루프(multi-way loop)가 존재하는지 판단하고, 상기 다중 루프가 존재하는지 여부를 해당 내포 수준에 표시하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  21. 삭제
  22. 제15항에 있어서, 상기 스레드 시각화 단계는,
    병행 스레드들 간의 병행성에 기반하여 상기 스레드들 간의 거리를 결정하고, 상기 원추 상에 상기 스레드들을 결정된 거리만큼 이격되게 각각 표시하며, 상기 스레드들 중 자식 스레드를 포함하는 부모 스레드를 자식 스레드와 구별되도록 표시하는 수직적 추상화 단계를 더 포함하는 것을 특징으로 하는 방법.
  23. 제15항에 있어서, 상기 스레드 시각화 단계는,
    상기 원추 상의 동일한 원추 상에 위치된 스레드들 중 소정 개수의 스레드들을 하나의 스레드로 표시하는 수평적 추상화 단계를 더 포함하는 것을 특징으로 하는 방법.
  24. 제15항에 있어서, 상기 접근 사건 시각화 단계는,
    상기 스레드들을 접근 사건이 발생되지 않은 스레드, 읽기 접근 사건이 쓰기 접근 사건보다 먼저 발생한 스레드, 쓰기 접근 사건이 읽기 접근 사건보다 먼저 발생한 스레드로 각각 분류하고, 분류된 상기 스레드들을 서로 구별되도록 표시하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  25. 제15항 및 제18항, 제20항, 제22항 내지 제24항 중 어느 한 항에 따른 방법을 구현하기 위한 명령어들을 포함하는 컴퓨터 프로그램을 기록하는 기록 매체.
KR1020090099063A 2009-10-19 2009-10-19 OpenMP프로그램에서 자료 경합을 탐지하기 위한 시스템, 방법, 및 방법을 저장하는 저장 매체 KR101108431B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020090099063A KR101108431B1 (ko) 2009-10-19 2009-10-19 OpenMP프로그램에서 자료 경합을 탐지하기 위한 시스템, 방법, 및 방법을 저장하는 저장 매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020090099063A KR101108431B1 (ko) 2009-10-19 2009-10-19 OpenMP프로그램에서 자료 경합을 탐지하기 위한 시스템, 방법, 및 방법을 저장하는 저장 매체

Publications (2)

Publication Number Publication Date
KR20110042404A KR20110042404A (ko) 2011-04-27
KR101108431B1 true KR101108431B1 (ko) 2012-01-31

Family

ID=44047818

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090099063A KR101108431B1 (ko) 2009-10-19 2009-10-19 OpenMP프로그램에서 자료 경합을 탐지하기 위한 시스템, 방법, 및 방법을 저장하는 저장 매체

Country Status (1)

Country Link
KR (1) KR101108431B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101569919B1 (ko) * 2013-10-30 2015-11-17 인하대학교 산학협력단 차량의 위치 추정 장치 및 방법

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101258236B1 (ko) * 2011-10-11 2013-04-30 경상대학교산학협력단 데이터 경합 탐지를 위한 스레드 레이블링 방법 및 이를 이용한 데이터 경합탐지 장치.
KR101671372B1 (ko) 2014-01-16 2016-11-16 한국전자통신연구원 멀티코어 기반 병렬 프로그램의 경합 탐지를 위한 확장적 감시 장치 및 방법
CN114580016B (zh) * 2022-02-22 2024-04-26 中国人民解放军战略支援部队信息工程大学 使用Android共享存储时潜在的竞争状态检测方法和系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080105345A (ko) * 2007-05-30 2008-12-04 삼성전자주식회사 병렬 처리 장치 및 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080105345A (ko) * 2007-05-30 2008-12-04 삼성전자주식회사 병렬 처리 장치 및 방법

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
김영주 외 1명, "OpenMP 디렉티브 프로그램을 위한 자료경합 검증도구", 정보과학회논문지 제34권 제9호, 2007년 9월*
임재선, "OpenMP Program의 경합 탐지를 위한 3차원 원추상의 확장적 사건 시각화", 경상대학교정보과학대학원 석사학위논문, 2006년 8월*

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101569919B1 (ko) * 2013-10-30 2015-11-17 인하대학교 산학협력단 차량의 위치 추정 장치 및 방법

Also Published As

Publication number Publication date
KR20110042404A (ko) 2011-04-27

Similar Documents

Publication Publication Date Title
Abdulla et al. Stateless model checking for TSO and PSO
Norris et al. CDSchecker: checking concurrent data structures written with C/C++ atomics
US9411559B2 (en) Resolution of textual code in a graphical hierarchical model of a technical computing environment
US9208057B2 (en) Efficient model checking technique for finding software defects
US8121824B2 (en) Predicate checking for distributed systems
Kähkönen et al. Using unfoldings in automated testing of multithreaded programs
KR101108431B1 (ko) OpenMP프로그램에서 자료 경합을 탐지하기 위한 시스템, 방법, 및 방법을 저장하는 저장 매체
Petersen et al. OpenMP support in the Intel® thread checker
Shahin et al. Applying declarative analysis to software product line models: an industrial study
Bauch et al. LTL model checking of LLVM bitcode with symbolic data
Kusano et al. Dynamic generation of likely invariants for multithreaded programs
Liew et al. Provable GPU data-races in static race detection
Ročkai et al. A simulator for llvm bitcode
Sotiropolos et al. Detection of intermittent faults in software programs through identification of suspicious shared variable access patterns
Ouabdesselam et al. Testing Techniques for Data-Flow Synchronous Programs.
KR101068669B1 (ko) OpenMP프로그램의 접근을 확장형 3차원 원추 상에 시각화하기 위한 방법, 장치, 및 방법을 저장하는 저장 매체
Faqrizal et al. Clusters of Faulty States for Debugging Behavioural Models
Jahić et al. FERA: a framework for critical assessment of execution monitoring based approaches for finding concurrency bugs
Zhao et al. Semantics of RxJS
Xing et al. Differencing labeled transition systems
Longfield et al. Removing concurrency for rapid functional verification
Pruscha Infrastructure for the generation of functional data-flow views for automotive embedded systems
ZAHID FAULT MANAGEMENT OF BUSINESS PROCESSES IN THE SERVICES CLOUD
CN105320597B (zh) 用于中断电子控制器的总程序的执行的方法
Kroening Verification of Concurrent Software.

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160325

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee