ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ISPC
    Parallel Programming 2023. 10. 3. 16:05
    반응형

    본 포스팅은 Stanford Univ. 의 CS149 2022 fall 수업을 정리한 내용임을 밝힙니다.

    From smart phones, to multi-core CPUs and GPUs, to the world's largest supercomputers and web sites, parallel processing is ubiquitous in modern computing. The goal of this course is to provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems as well as to teach parallel programming techniques necessary to effectively utilize these machines. Because writing good parallel programs requires an understanding of key machine performance characteristics, this course will cover both parallel hardware and software design.
    https://gfxcourses.stanford.edu/cs149/fall22/courseinfo

    What is ISPC?

    ISPC: Intel SPMD Program Compiler (ISPC)

    SPMD: Sinle Program Multiple Data

    Example code

    ISPC 함수를 호출하면 ISPC의 “program instances”의 “gang”이 생성된다. 모든 instances들은 ISPC code를 동시에 수행한다.

    각 instance는 복사된 local variables (오른쪽 코드의 파란색 변수들) 를 갖는다. 이를 나중에는 “uniform”이라고 명명한다. return 시에는 모든 instances 가 종료된다.

    ISPC Language Keyworks

    programCount: gang 안에서 한 번에 동시에 수행될 수 있는 instances의 수 (uniform value)

    programIndex: 어떤 instance 에서의 id (non-uniform value: “각 instance마다 달라질 수있음”)

    uniform: modifier의 type. 모든 instances들은 같은 값이 uniform variable을 갖는다.

    ISPC가 어떤 순서로 task를 수행하는지에 대한 예시 (Abstraction)

    ISPC는 실제로는 SIMD instructions를 사용하여 병렬 처리한다. (Implementation)

    하나의 gang에 생성되는 instances의 수는 사실 hardware가 지원하는 SIMD width이다. ISPC compiler는 보통 SIMD instructions로 구성된 C++ 함수 바이너리 (.o) 를 생성하고, C++ code 는 이렇게 생성된 object file을 링크한다.

    Scheduling: interleaved assignment

    각각의 instances들이 붙어 있는 데이터 (contiguous in memory)를 로드 하는 것이 더 효율적이기 때문에 아래와 같이 스케쥴링 하는 것이 더 효율적이다.

    굳이 이렇게 하지 말라는 뜻이다.

    이렇게 될 경우 내부적으로 붙어 있지 않은 (not contiguous in memory) 데이터들을 하나의 벡터로 모아야하기 때문에 다른 instruction을 추가로 수행해야하고 locality도 충족하지 않는다.

    foreach 문으로 ISPC의 코드를 더 abstraction 해보자. (Raising level of abstraction with foreach)

    foreach 문은 해당 반복문이 parallel 하게 수행되어도 좋다는 것을 알려준다. 즉, ISPC의 gang에게 아래 반복문을 알잘딱 parallel 하라는 의미.

    ISPC: Abstraction vs. Implementation

    Abstraction: Single Program, Multiple Data programming perspectiv (SPMD)

    프로그래머는 하나의 program에 병렬처리가 가능한 부분에 대하여 하나의 gang을 생성하고, 이 안에서 programCount 만큼의 logical instruction streams (instances) 가 각각의 programIndex를 가지고 수행된다고 생각하여 코드를 작성해야함.

    Implementation: Single Instruction, Multiple data (SIMD)

    ISPC 컴파일러는 gang에 의해 수행되는 logic들을 처리할 vector instructions을 호출한다.

    ISPC 컴파일러는 conditional control flow (e.g. if, else 문) 를 vector instructions에 알잘딱 맵핑한다. (와우..)

    ISPC는 abstraction과 implementation 둘 중 하나에 집중해보기 어려움. 둘 다를 고려하여 ISPC 프로그램을 작성하기를 바람.

    SPMD summary

    단, x86 system에 속한 하나의 코어에서 동작함. (ARM은..) 따라서 앞서 예제로 주어진 코드는 만약에 4개의 코어가 있는 x86 system에서는 하나의 코어에서만 동작함.

    ISPC는 다른 abstraction도 있는데, 바로 “task” 이다. 이는 multi-core 수행을 위해 사용된다. (나중에 등장)


    Uploaded by N2T

    반응형
Designed by Tistory.