• 제목/요약/키워드: 하스켈

검색결과 10건 처리시간 0.021초

Deterministic Parallelism for Symbolic Execution Programs based on a Name-Freshness Monad Library

  • Ahn, Ki Yung
    • 한국컴퓨터정보학회논문지
    • /
    • 제26권2호
    • /
    • pp.1-9
    • /
    • 2021
  • 본문에서는 순수 함수형 언어인 하스켈로 작성된 심볼릭 실행의 병렬화를 위한 상태 모나드 기반의 라이브러리에 결정적 병렬화를 적용하기 편리한 API를 설계/구현하고 멀티코어 컴퓨터에서 벤치마크를 통해 실제 성능을 향상을 확인해 본다. 일반적으로 순수 함수형 프로그램은 병렬화가 쉽다고 알려져 있으나 실제 구현에서 핵심 알고리듬 외적인 부분에서 의도치 않은 순차적 데이터 의존성의 발생으로 병렬화가 어려워질 수 있다. 심볼릭 실행 구현에서는 지금껏 사용했던 변수와 겹치지 않는 새 이름을 생성함으로써 서로 다른 범위의 이름이 같은 변수끼리 혼동하는 착오를 피하는 방식을 종종 활용한다. 그런데 이를 순차적 상태 관리로 구현한 경우가 많아 병렬화에 걸림돌이 된다. 이 논문에서는 하스켈의 범용적 이름 관리 라이브러리인 unbound-generics의 새 이름 생성 기능에 순차적 의존성을 회피할 수 있는 확장 기능을 제공함으로써 병렬적 심볼릭 실행 구현을 간소화하는 데 기여하였다. 우리가 구현한 병렬화 확장의 특징은 기존 unbound-generics 라이브러리의 내부 구현을 그대로 유지한 상태의 확장이라는 점으로, 기존에 unbound-generics로 작성된 순차적 심볼릭 실행기의 성능 저하 우려가 전혀 없다는 점이다. 따라서 병렬화가 필요한 부분에만 확장 기능을 적용하는 방식으로 활용하여 성능을 개선할 수 있다.

모나드를 이용한 어셈블리 언어 인터프리터 개발 (Development of an Assembly Language Interpreter Using Monad)

  • 변석우
    • 한국정보과학회논문지:소프트웨어및응용
    • /
    • 제37권5호
    • /
    • pp.403-410
    • /
    • 2010
  • 하스켈의 모나드는 순수 함수형 프로그래밍뿐만 아니라 명령형 형태의 프로그래밍도 가능케 하고 있다. 본 연구에서는 순수 함수형 프로그래밍 방식으로 코딩된 어셈블리 언어 인터프리터 구현을 모나드 방식으로 재 구성함으로써 모나드 추상화와 프로그래밍 기법의 특성을 부각시킨다. 모나드 프로그래밍은 스택과 심볼 테이블에 상태 모나드를 적용하는 것과, 이 모나드들을 상태 모나드 트랜스포머를 이용하여 통합 구성하는 두 단계로 이루어진다. 결과적으로, 모나드 프로그래밍에 의한 코드는 순수 함수형 스타일의 코드보다 훨씬 더 간결하고 직관적임을 볼 수 있다.

Feasibility Study Of Functional Programming In Scala Language By Implementing An Interpreter

  • Sugwoo, Byun
    • 한국컴퓨터정보학회논문지
    • /
    • 제28권2호
    • /
    • pp.111-119
    • /
    • 2023
  • 본 논문에서는 스칼라 언어의 함수형 프로그래밍 기능의 타당성에 대해서 검토한다. 주된 관심사는 스칼라가 어느 정도까지 람다 식, 고차 함수, 제너릭 타입, 대수적 타입, 모나드 등 함수형 프로그래밍의 주요 특성을 표현할 수 있는 가에 있다. 이 목적을 위하여 명령형 프로그래밍 언어의 인터프리터를 구현한다. 동일한 함수형 프로그래밍 기법을 적용하여 인터프리터를 하스켈과 스칼라로 구현한 다음, 이 두 버전의 구현을 비교 분석한다. 명령형 프로그래밍 언어의 추상 구문트리는 스칼라의 제너릭스를 갖는 대수적 타입과 enum 클래스로서 표현되고, 명령형 프로그래밍의 상태 변환은 상태 모나드를 이용하여 구현된다. 또한 스칼라의 새로운 기능인 extension과 given도 사용된다.

임베디드 시스템을 위한 실시간 함수형 반응적 프로그램 변환기 (Real-Time Functional Reactive Program Translator for Embedded Systems)

  • 이동주;우균
    • 정보처리학회논문지A
    • /
    • 제13A권6호
    • /
    • pp.481-488
    • /
    • 2006
  • 함수형 반응적 프로그래밍(FRP: Functional Reactive Programming)은 하스켈(Haskell)에 내장된 언어로서 두 핵심 고차 타입인 행위(Behavior)와 이벤트(Event)를 기반으로 반응적 시스템을 선언적으로 프로그래밍 한다. 이 논문은 다양한 제약사항을 가진 임비디드 시스템에 FRP를 이용하기 위해 실시간 함수형 반응적 프로그래밍(RT-FRP: Real-time Functional Reactive Programming) 변환기를 설계하고 구현한다. RT-FRP 변환기는 RT-FRP 언어의 기능적 의미론을 기반으로 RT-FRP 프로그램에서 C 프로그램을 생성한다. RT-FRP 변환기의 효과적인 변환을 입증하기 위해, 변환기에서 생성된 테스트 프로그램을 실제 임베디드 시스템, 레고 마인드스톰(LEGO Mindstorm)에 탑재하고 수행하였다. 실험 결과, RT-FRP를 이용할 경우 목적파일의 크기가 조금 증가하였으나 명령형 언어를 이용한 프로그램 보다 간결하게 반응적 시스템 소프트웨어를 프로그래밍 할 수 있었다.

프로그램 합성 관점에서 지연 함수형 언어의 예외처리 기법 (Exception Handling Technique in Lazy Functional Language from the Viewpoint of Program Synthesis)

  • 이동주;우균
    • 한국정보과학회:학술대회논문집
    • /
    • 한국정보과학회 2006년도 가을 학술발표논문집 Vol.33 No.2 (B)
    • /
    • pp.586-589
    • /
    • 2006
  • 순수 함수형 언어에서 예외처리를 구현하는 것은 매우 까다로운 문제이다. 지연계산, 참조투명성과 같은 주요 특징은 예외 처리와 상반된 성질을 가지는 때문이다. 예외의 처리순서는 계산순서와 관계가 있고, 예외의 발생순서는 참조투명성과 밀접한 관계가 있다. 본 논문은 현재 하스켈(Haskell)에서 구현된 예외처리 방법의 분석을 통해, 프로그램 수행 시 효율적인 예외처리 방법에 대해서 제시한다. 합성된 프로그램에서 예외 발생할 때 예외가 전달되는 것을 사전에 차단하는 방법을 이용한다. 실제 예외가 발생한 프로그램을 작성하고, 프로파일링을 통하여 이 방법의 효율성을 점검한다.

  • PDF

모나드를 이용한 비결정적 컴파일러 구현 (Implementation of Nondeterministic Compiler Using Monad)

  • 변석우
    • 한국컴퓨터정보학회논문지
    • /
    • 제19권2호
    • /
    • pp.151-159
    • /
    • 2014
  • 본 연구에서는 Haskell의 모나드 기법을 이용한 명령형 언어의 컴파일러 구현에 대해 논의한다. 이 컴파일러는 한 생성 룰이 입력 스트링의 파싱을 실패할 때 다른 생성 룰로써 파싱하는 backtracking 기능의 비 결정적 Recursive Descent Parser를 포함한다. Haskell은 파싱에 필요한 우수한 기능들을 가지고 있다. Haskell의 대수적 타입은 추상구문트리를 자연스럽게 표현할 수 있으며, 모나드 파싱을 적용한 프로그램 코드는 매우 간결하여 가독성이 좋고, 타 언어에 의해 구현된 것에 비해 코드의 양이 획기적으로 감소된다. 이 컴파일러의 목적 코드는 스택 머신을 기반으로 한 Stack-Assembly 언어로서 이것을 위한 코드 생성과 어셈블러 실행 환경에 대해서도 논의한다.

Parallelization of a Purely Functional Bisimulation Algorithm

  • Ahn, Ki Yung
    • 한국컴퓨터정보학회논문지
    • /
    • 제26권1호
    • /
    • pp.11-17
    • /
    • 2021
  • 본 논문에서는 순수 함수형 언어로 작성된 쌍방시뮬레이션 알고리듬의 성능을 멀티코어 프로세서 컴퓨터에서 병렬화로 향상시키는 방법을 연구한다. 이 병렬화에 있어 핵심 아이디어는 순수 함수형 프로그램의 참조 투명성을 십분 활용하면 병렬화가 전혀 고려되지 않고 작성된 초기 구현으로부터 최소한의 수정만으로 성능 개선 효과를 기대할 수 있다는 것이다. 초기 구현과 병렬화 구현 둘 다 순수 함수형 언어인 하스켈로 작성되었다. 초기 구현을 병렬화할 때 변화는 아주 적어서 병렬화된 구현에서도 초기 구현의 프로그램 구조가 거의 그대로 유지되었다. 벤치마크를 통해 제시된 간단한 병렬화만으로도 초기 구현과 비교해 두 배 이상의 성능 개선을 확인했다. 또한, 병렬화와는 별개의 최적화 기법인 메모이제이션이 적용된 버전의 쌍방시뮬레이션 구현에도 같은 방식의 병렬화를 적용함으로써 마찬가지로 성능을 개선할 수 있음을 확인하였다.

Lock-free unique identifier allocation for parallel macro expansion

  • Son, Bum-Jun;Ahn, Ki Yung
    • 한국컴퓨터정보학회논문지
    • /
    • 제27권4호
    • /
    • pp.1-8
    • /
    • 2022
  • 이 논문에서는 싱글 프로세스 멀티코어 환경의 매크로 확장에서 Lock이 필요하지 않은 더 효과적인 고유식별자 할당 방식을 제안한다. 이 할당 방식의 핵심 아이디어는 나머지 연산을 이용해 순차적 의존성을 제거하는 것이다. 우리가 고안한 방식이 멀티코어 병렬 환경에서 매크로 확장의 성능 개선에 적합함을 확인하기 위해, 기존에 순차적 방식의 고유식별자 생성으로 구현된 라이브러리를 우리가 고안한 방식으로 변경하여 변경 전의 버전과 후의 버전의 라이브러리로 작성된 같은 프로그램의 성능을 비교하는 벤치마크를 수행하였다.

Haskell Eval 모나드와 Cloud Haskell 간의 성능 비교 (Performance Comparison between Haskell Eval Monad and Cloud Haskell)

  • 김연어;안형준;변석우;우균
    • 정보과학회 논문지
    • /
    • 제44권8호
    • /
    • pp.791-802
    • /
    • 2017
  • 최근 CPU 시장은 단일 코어의 속도 상승에서 코어의 수를 늘려가는 방향으로 변하고 있다. 이러한 상황에서 매니코어 프로세서의 자원을 최대한 사용할 수 있는 병렬 프로그래밍에 관한 관심이 높아지고 있다. 이 논문에서는 병렬 프로그래밍에 적합한 Haskell을 이용하여 매니코어 환경에 적합한 병렬 프로그래밍 모델을 확인하고자 한다. 이를 위해 이 논문에서는 Eval 모나드와 Cloud Haskell을 이용하여 표절 검사 병렬 프로그램과 K-평균 병렬 프로그램을 개발하였다. 그리고 개발된 프로그램을 대상으로 32코어 환경, 120코어 환경에서 성능을 측정하였다. 측정 결과 적은 코어 수에서는 Eval 모나드가 유리한 것으로 나타났다. 하지만 코어 수가 늘어남에 따라 Cloud Haskell이 실행 시간 기준으로 37%, 확장성 기준으로 134% 더 우수한 것으로 나타났다.

GC-Tune을 이용한 Haskell 병렬 프로그램의 성능 조정 (Tuning the Performance of Haskell Parallel Programs Using GC-Tune)

  • 김화목;안형준;변석우;우균
    • 정보과학회 컴퓨팅의 실제 논문지
    • /
    • 제23권8호
    • /
    • pp.459-465
    • /
    • 2017
  • 매니코어 기술에 힘입어 컴퓨터 하드웨어의 성능이 향상되고 있지만 그에 비례한 소프트웨어 성능 증가는 다소 미미한 실정이다. 함수형 언어는 병렬 프로그램의 성능을 향상시키는 대안 중 하나이다. 이러한 언어는 부수효과가 없는 순수한 수식을 통해 내재된 병렬성을 지원하기 때문이다. 함수형 언어인 Haskell은 모나드를 기반으로 하는 다양하고 쉬운 병렬 구조를 제공하기 때문에 병렬 프로그래밍에서 널리 사용된다. 하지만 Haskell로 작성된 병렬 프로그램의 성능 확장성은 코어 수가 증가함에 따라 변동이 큰 경향이 있다. 이는 프로그램 실행에 있어 가비지 컬렉션이 공간과 시간에 모두 영향을 미치는데 Haskell은 이러한 가비지 컬렉션을 사용하는 가상머신 위에서 실행되기 때문이라고 추정된다. 따라서 본 논문에서는 GC-Tune이라는 메모리 튜닝 도구를 사용하여 이 추정이 맞는지 검증하고 Haskell 병렬 프로그램의 성능 확장성을 높이는 방법을 모색한다. 병렬 Haskell 표절 검사 프로그램을 대상으로 실험한 결과 성능 확장성이 향상되었다. 특히 메모리 튜닝을 하지 않은 프로그램에 비해 속도 향상의 변동 범위가 39% 감소하였다.