트레이딩에서 OpenCL - 페이지 5

 

6. 수퍼스칼라 및 VLIW



6. 수퍼스칼라 및 VLIW

이 비디오는 프로세서가 수퍼 스칼라 실행을 사용하여 성능을 향상시키기 위해 이진 명령 간의 병렬성을 감지 및 추출하는 방법을 살펴봅니다. 명령 간의 종속성 부족과 같이 명령이 동시에 실행될 수 있는 인스턴스를 식별하는 제어 논리의 중요성에 대해 설명합니다. 이 비디오는 또한 프로세서 설계의 두 가지 예인 수퍼 스칼라와 VLIW를 소개합니다. 후자는 종속성을 감지하는 책임을 컴파일러로 옮기고 병렬로 실행될 긴 명령어를 생성합니다. VLIW는 런타임 검사를 줄여주지만 긴 명령어의 사용되지 않은 부분은 여전히 실행 단위에서 낭비를 유발할 수 있습니다.

  • 00:00:00 이 섹션에서 비디오는 프로세서가 수퍼 스칼라 실행을 활용하여 이진 명령이 있는 프로그램의 전반적인 성능을 향상시키는 방법을 설명합니다. 프로그래머는 프로그램을 올바르게 실행하기 위해 잘 설계된 프로세서에 의존하므로 성능을 향상시키기 위해 명령에서 병렬성을 식별하고 추출하는 책임은 프로세서에 있습니다. 비디오는 명령 간의 종속성 그래프의 예를 제공하며 특정 명령 간에 종속성이 있지만 프로세서는 명령 간의 종속성 부족으로 인해 다른 명령을 동시에 실행할 수 있습니다. 이러한 인스턴스를 식별하고 성능을 최대화할 수 있는 가장 효율적인 방법으로 명령을 실행하는 것은 프로세서 내의 제어 논리의 역할입니다.

  • 00:05:00 이 섹션에서 비디오는 프로세서의 두 가지 아키텍처 설계 예인 수퍼스칼라 및 VLIW에 대해 설명합니다. 첫 번째 예는 프로세서가 명령 간의 종속성을 감지하고 그에 따라 스케줄하여 시간을 절약하는 방법을 보여줍니다. 비디오는 또한 분기 명령에 대한 예측 실행 가능성을 강조합니다. 두 번째 예에서는 VLIW 설계에 대해 설명합니다. 이는 종속성 검색 책임을 컴파일러로 이전합니다. 컴파일러는 병렬로 실행될 수 있는 여러 명령으로 구성된 긴 명령 단어를 생성하므로 프로세서 설계가 더 간단해집니다.

  • 00:10:00 이 섹션에서는 VLIW(Very Long Instruction Word)의 개념을 설명합니다. 이를 통해 여러 명령어를 하나의 긴 명령어로 압축할 수 있으며 함께 가져와서 디코딩할 수 있습니다. VLIW는 프로그램이 실행되기 전에 명령을 동시에 실행할 수 있는 기회를 발견하기 위해 컴파일러에게 책임을 전가하고 런타임 검사의 필요성을 줄입니다. 그러나 긴 명령어에 빈 공간이 있는 경우 실행 단위에서 약간의 낭비가 발생할 수 있습니다.
Superscalar and VLIW
Superscalar and VLIW
  • 2020.05.22
  • www.youtube.com
This video introduces two types of processor architecture: Superscalar and Very Long Instruction Word (VLIW)
 

7. SIMD 및 하드웨어 멀티스레딩



7. SIMD 및 하드웨어 멀티스레딩

이 비디오는 병렬 처리 문제를 해결하는 두 가지 방법인 SIMD(Single Instruction, Multiple Data) 및 SMT(하드웨어 다중 스레딩)를 설명합니다. SIMD를 사용하면 하드웨어 명령이 여러 데이터 요소에서 병렬로 실행되어 스케줄링 및 디코딩 논리가 단순화됩니다. SMT는 독립적인 명령 스트림을 동시에 실행하여 추가 레지스터 파일과 신중한 캐시 공유를 요구함으로써 스레드 수준 병렬성을 이용합니다. 비디오는 또한 스레드가 라운드 로빈 방식으로 프로세서의 데이터 경로를 번갈아 점유하여 대기 시간을 줄이고 여러 스레드가 동시에 컴퓨팅 장치와 메모리 시스템에 액세스할 수 있도록 하는 타임 슬라이스 스레드 스케줄링 구현에 대해 설명합니다. 궁극적으로 프로세서는 필요한 만큼의 스레드를 수용할 수 있지만 단일 스레드 프로세서에서는 성능 향상이 그다지 중요하지 않을 수 있습니다.

  • 00:00:00 이 섹션에서는 SIMD(Single Instruction Multiple Data)의 개념에 대해 설명합니다. 여기에서 하드웨어 명령은 여러 데이터 요소에 대한 작업의 병렬 실행에 사용될 수 있습니다. SIMD는 데이터의 모든 요소에 동일한 작업을 적용하기 위해 하나의 명령만 예약하면 되므로 예약 및 디코딩 논리를 단순화합니다. SIMD를 사용하는 것은 해결하려는 문제에 상당한 데이터 병렬 처리가 포함된 경우 유용하지만 그렇지 않은 경우 효율적인 솔루션이 아닐 수 있습니다. 또한 SIMD와 벡터 계산의 유사성에 대해 설명합니다. 여기서 벡터 명령은 가상 작업을 수행하기 위해 메모리의 여러 부분에 흩어져 있는 데이터에 사용될 수 있습니다.

  • 00:05:00 이 섹션에서는 비디오에서 하드웨어 멀티스레딩 또는 동시 멀티스레딩(SMT)을 사용하여 스레드 수준 병렬성을 활용하는 방법을 설명합니다. 동일한 프로세서에 여러 프로그램 또는 스레드를 배치하면 서로 독립적인 경우 서로 다른 명령 스트림이 동시에 실행될 수 있습니다. 하드웨어 멀티스레딩은 두 개의 독립적인 스레드에서 명령을 쉽게 추출할 수 있으므로 대형 컴퓨터와 단일 CPU에 유용할 수 있습니다. 그러나 이렇게 하려면 추가 레지스터 파일이 필요하고 다른 스레드 간에 캐시를 공유하는 방법을 신중하게 고려해야 합니다.

  • 00:10:00 비디오의 이 섹션에서 발표자는 타임 슬라이스 스레드 스케줄링을 구현하여 ALU(산술 논리 장치)를 계속 사용하는 방법에 대해 설명합니다. 이 방법을 사용하면 스레드가 라운드 로빈 방식으로 프로세서의 데이터 경로를 차례로 점유할 수 있으므로 더 많은 스레드를 예약하여 대기 시간을 크게 줄일 수 있습니다. 정지된 스레드를 기다리는 동안 다음 명령을 실행함으로써 이 방법을 사용하면 컴퓨팅 장치와 메모리 시스템을 여러 스레드에서 동시에 사용할 수 있습니다. 궁극적으로 결과는 시간 낭비가 없고 프로세서가 필요한 만큼 많은 스레드를 수용할 수 있다는 것입니다. 그러나 단일 스레드 프로세서에서 단일 스레드의 성능은 다중 스레드 프로세서만큼 향상되지 않을 수 있습니다.
SIMD and Hardware Multithreading
SIMD and Hardware Multithreading
  • 2020.05.23
  • www.youtube.com
This video introduces SIMD, Vector Processing and Hardware Multithreading
 

8. 멀티코어 프로세서 아키텍처



8. 멀티코어 프로세서 아키텍처

이 비디오는 다중 코어가 독립적으로 작동하고 일부 구성 요소를 공유하는 반면 각 코어에는 자체 파이프라인 및 데이터 캐시가 있는 것과 같은 다중 코어 프로세서의 아키텍처 및 이점에 대해 설명합니다. 마이크로프로세서와 메모리 액세스 사이의 속도 격차를 해소하는 캐시 계층 구조의 중요성은 시간적 및 공간적 지역성을 활용하는 여러 수준의 캐시를 사용하여 강조됩니다. 비디오는 또한 다양한 기능 장치와 인터페이스를 단일 칩에 결합하여 비용과 폼 팩터를 줄이는 시스템 온 칩 설계에 대해서도 다룹니다. 전반적으로 이 비디오는 멀티코어 프로세서 설계와 관련된 복잡성과 장단점에 대한 유용한 소개를 제공합니다.

  • 00:00:00 이 섹션에서는 멀티코어 프로세서와 단일 코어 프로세서에 비해 이점에 대해 알아봅니다. 멀티코어 프로세서에는 독립적으로 작동하고 명령 가져오기, 디코딩 및 부동 소수점 스케줄러와 같은 일부 구성 요소를 공유하는 다중 코어가 있습니다. 그러나 각 코어에는 자체 파이프라인과 자체 레벨 1 데이터 캐시가 있습니다. 멀티코어 프로세서에는 각 캐시에 저장된 데이터가 주 메모리의 데이터와 일치하도록 캐시 일관성 프로토콜이 필요합니다. 시스템 온 칩은 여러 요소가 동일한 칩의 단일 장치로 결합되어 비용과 폼 팩터를 줄이는 또 다른 설계 옵션입니다. 그것은 unship 상호 연결을 통해 칩의 나머지 부분에 연결된 다양한 전용 기능 장치와 인터페이스를 가지고 있습니다.

  • 00:05:00 이 섹션에서 발표자는 멀티코어 프로세서 아키텍처의 캐시 계층 구조 개념을 설명합니다. 캐시를 사용하는 주된 이유는 서로 다른 주파수에서 실행되고 저장 용량이 다른 마이크로프로세서와 메모리 액세스 사이의 속도 격차를 해소하기 위해서입니다. 레벨 1, 레벨 2, 레벨 3 캐시는 간극을 메우는 데 사용되며 각각 짧은 시간에 적은 수의 명령이나 데이터에 액세스하거나 근처 위치에 액세스하는 시간적 및 공간적 지역성을 활용합니다. 캐시는 메모리 레벨 사이를 이동하는 블록을 사용하여 구성되므로 프로세서가 시간 및 공간 지역성을 활용할 수 있습니다.
Multicore Processor Architecture
Multicore Processor Architecture
  • 2020.05.23
  • www.youtube.com
A brief introduction of multicore processor architecture
 

9. GPU 아키텍처



9. GPU 아키텍처

APU(가속 처리 장치)는 저전력 코어와 GPU 장치가 모두 동일한 칩에 있는 이기종 프로세서입니다. GPU에는 명령으로 예약할 수 있는 많은 수의 셰이더 코어가 있으며 캐시는 일반적으로 일관성이 없기 때문에 설계가 더 단순해지고 많은 코어가 동시에 작동할 때 훨씬 더 높은 성능을 허용합니다. AMD와 Nvidia는 작은 연산 장치를 활용하여 동시에 여러 데이터 조각에 대한 작업을 지원하고 빠른 컨텍스트 전환을 지원하기 위해 큰 레지스터 파일을 가지고 있습니다. 연사는 또한 GPU 아키텍처에서 제어 흐름을 관리하는 방법, 특히 유효하지 않은 결과를 생성할 수 있는 분기 명령을 처리하는 방법을 설명하지만 프로세서 공급업체가 이미 하드웨어에 제어 논리를 제공했기 때문에 프로그래머는 이러한 문제에 대해 크게 걱정할 필요가 없습니다. 전반적으로 GPU는 현대 시장, 특히 AI 및 기계 학습 분야에서 복잡한 워크로드에 널리 사용되는 프로세서입니다.

  • 00:00:00 이 섹션에서는 시스템의 범용 컴퓨팅, 관리 및 구성에 사용되는 저전력 코어와 GPU 장치로 구성된 전형적인 이기종 프로세서인 가속 처리 장치(APU)에 대해 알아봅니다. 모두 같은 칩에 있습니다. APU에는 두 가지 수준의 캐시가 있는 일반적인 x86 코어가 있는 반면 GPU 코어는 x86이 아닌 다른 것으로 개인 메모리로 간주되는 로컬 데이터 스토리지가 더 낮습니다. 메모리 소유권은 다이어그램에서 볼 수 있으며 메모리의 위치, 액세스 가능성 및 크기를 보여줍니다. 전용 메모리는 로컬 메모리보다 작고 전역 메모리보다 훨씬 작습니다. Intel 또는 AMD의 현재 랩탑 프로세서에는 일반적으로 적은 수의 범용 코어, 통합 메모리 및 온칩 그래픽 처리 장치가 있습니다.

  • 00:05:00 이 섹션에서는 GPU 아키텍처와 AI 및 기계 학습 분야에서 GPU 아키텍처가 어떻게 사용되는지 알아봅니다. GPU에는 명령으로 예약할 수 있는 셰이더 코어라고 하는 많은 수의 프로세서가 있습니다. 범용 프로세서의 메모리 하위 시스템과 다른 고속 GPU 메모리에 액세스할 수 있으며 캐시는 일반적으로 일관성이 없습니다. GPU는 일관성을 보장하기 위해 캐시 일관성 프로토콜을 사용하지 않으므로 설계가 더 단순해지고 많은 코어가 동시에 작동할 때 훨씬 더 높은 성능이 가능합니다. 전반적으로 GPU는 현대 시장에서 복잡한 워크로드에 널리 사용되는 프로세서입니다.

  • 00:10:00 이 섹션에서는 AMD와 Nvidia가 동시에 여러 데이터 작업을 지원하기 위해 cmd 하드웨어가 있는 소형 컴퓨팅 장치를 활용하는 방법에 대해 알아봅니다. 두 공급업체 모두 16개의 넓은 cmd를 가지고 있으며 작업 항목을 더 큰 그룹으로 그룹화하고 칩 및 구성 매개변수에 따라 다른 배치에 매핑할 수 있습니다. 또한 빠른 컨텍스트 전환을 지원하기 위해 큰 레지스터 파일을 가지고 있으며 두 벤더 모두 자동 레벨 1 캐시와 사용자 관리 스크래치 패드의 조합을 가지고 있습니다. 마지막으로 제어 흐름과 하나의 명령으로 여러 데이터를 실행하는 개념, 분기 명령이 실행 경로에서 약간의 편차를 유발하여 유효하지 않은 데이터에 대해 수행되는 계산량을 최소화하는 방법을 간략하게 설명합니다.

  • 00:15:00 이 섹션에서 발표자는 GPU 아키텍처에서 제어 흐름을 관리하는 방법, 특히 유효하지 않은 결과를 생성할 수 있는 분기 명령을 처리하는 방법을 설명합니다. 이 문제를 처리하기 위해 cmd 레인을 마스킹하여 일부 계산을 폐기할 수 있지만 성능이 저하될 수 있습니다. SIMT(Single Instruction Multiple Threads) 기술을 사용할 때 해결해야 할 또 다른 문제는 소프트웨어 스레드 간의 차이로, 제대로 관리하지 않으면 계산 주기를 낭비할 수 있습니다. 다행스럽게도 OpenCL 프로그래머는 프로세서 벤더가 이미 하드웨어에 제어 논리를 제공했기 때문에 이러한 문제에 대해 크게 걱정할 필요가 없습니다.
GPU Architecture
GPU Architecture
  • 2020.05.23
  • www.youtube.com
This video introduces the internals of a Graphics Processing Unit (GPU), which can be an accelerator for general purpose computing, in addition to graphics p...
 

10. FPGA 내부


10. FPGA 내부

이 비디오에서는 FPGA(Field Programmable Gate Array)의 아키텍처와 기능에 대해 설명합니다. FPGA에는 프로그래밍 가능한 논리가 있어 새로운 기능을 수용하도록 재프로그래밍할 수 있으며 대량의 입력 및 출력(I/O)을 통해 데이터에 직접 액세스할 수 있습니다. FPGA의 조회 테이블 구조는 논리 기능을 정의하도록 프로그래밍할 수 있는 여러 수준의 멀티플렉서로 구성됩니다. FPGA는 카운터, 시프트 레지스터, 상태 머신 및 DSP 기능에 사용할 수 있는 프로그래밍 가능한 레지스터를 사용합니다. 칩의 각 직사각형 블록은 LAB(Logic Array Block)을 나타내며 각 LAB에는 10개의 ALM(Adaptive Logic Module)이 포함되어 있습니다. FPGA는 소비자 기기, 자동차, 의료 기기, 통신 및 방송과 같은 산업에서 사용됩니다.

  • 00:00:00 이 섹션에서는 새로운 기능을 수용하도록 재프로그래밍할 수 있는 프로그래밍 가능 로직과 막대한 양의 I/O를 통한 데이터 직접 액세스를 포함하여 FPGA의 기본 사항을 소개합니다. FPGA의 장점은 메모리 구성 요소 및 보조 프로세서에 대한 편리한 연결, 하드웨어를 교체할 필요 없이 교체 가능한 기능, 소비자 장치, 자동차, 의료 기기, 통신 및 방송과 같은 산업에서의 편재성입니다. FPGA의 아키텍처에는 논리 기능을 정의하도록 프로그래밍할 수 있는 조회 테이블과 다음 섹션에서 설명할 캐리 인 레지스터 및 적응형 논리 모듈과 같은 기타 중요한 부분이 포함됩니다.

  • 00:05:00 비디오의 이 섹션에서 발표자는 선택 가능한 입력이 있는 여러 레벨의 멀티플렉서로 구성된 FPGA의 조회 테이블 구조를 설명합니다. 룩업 테이블에 대한 입력은 임의의 조합 논리 함수를 구축하는 데 사용할 수 있습니다. 그런 다음 비디오에서는 카운터, 시프트 레지스터, 상태 머신 및 DSP 기능에 사용되는 FPGA의 저장 요소인 프로그래밍 가능 레지스터에 대해 설명합니다. 이러한 레지스터에는 일반적으로 글로벌 클록에 의해 구동되는 클록 신호가 있으며 룩업 테이블로 피드백할 수 있습니다. 또한 비디오는 논리 요소와 적응형 논리 모듈이 체인 신호를 통해 연결되는 방법을 설명합니다.
    캐리 비트, 레지스터에 대한 입력이 이전 논리 요소에서 오는 방법.

  • 00:10:00 이 섹션에서는 FPGA 칩 내부의 논리 요소를 구성하는 방법을 배웁니다. 칩의 각 직사각형 블록은 LAB(Logic Array Block)을 나타내며 각 LAB에는 10개의 ALM(Adaptive Logic Module)이 포함되어 있습니다. 각 ALM은 산술 단위, 로컬 상호 연결 및 등록 연결뿐만 아니라 입력 및 특정 출력 생성의 유연한 구성을 위한 전용 리소스 및 적응형 조회 테이블로 구성됩니다. 또한 특정 LAB를 연결할 수 있는 행 및 열 상호 연결이 있으며 라우팅은 장치 밀도에 따라 선형으로 확장됩니다. 마지막으로 단일 또는 이중 포트 RAM, 읽기 전용 메모리 또는 eMLAB라고 하는 메모리 구조의 작은 조각과 같은 다양한 유형의 메모리 구조를 지원하는 임베디드 메모리 블록이 있습니다.

  • 00:15:00 이 섹션에서는 디지털 신호 처리(DSP) 블록 및 입력/출력(IO) 구성 요소를 포함하여 FPGA의 다양한 기능에 대해 알아봅니다. DSP 블록은 FFT 변환 및 고성능 곱셈 및 누적 연산과 같은 신호 처리 기능을 구현하는 데 유용합니다. FPGA는 또한 다양한 IO 구성 요소와 통신할 수 있으므로 출력 활성화, 제어 및 종료가 가능합니다. IO 소자 로직은 양방향 핀과 출력 인에이블 신호 제어를 포함하고 출력 경로는 클록 신호를 통해 값 A와 B를 생성합니다. 반면에 출력 제어가 비활성화된 경우 입력 신호는 입력 레지스터를 통과합니다.

  • 00:20:00 FPGA 내부에 대한 이 섹션에서는 FPGA 작업을 지원하기 위한 전용 입력 클록 핀의 사용과 함께 클록 신호의 중요성을 강조합니다. 복잡한 신호 컨디셔닝 및 처리 없이 FPGA에서 보다 복잡한 신호 프로토콜을 구현하는 데 유용한 고속 트랜시버에 대해서도 설명합니다. PLL을 사용하여 스큐를 최소화하면서 장치 전체에서 사용할 수 있는 서로 다른 클록 신호를 생성하는 방법과 SRAM 셀 기술 및 룩업 테이블을 사용하여 입력 및 출력 신호의 연결을 제어하는 프로그램 가능 비트를 구성하는 방법도 설명합니다. 이 비디오는 또한 프로그래밍 시퀀스를 제어하기 위해 외부 W prom, Cpl D 또는 CPU를 사용하여 FPGA를 프로그래밍하는 데 사용되는 방법과 추가 진단 및 디버깅을 위한 특수 하드웨어 JTAG 연결 사용을 다룹니다.

  • 00:25:00 이 섹션에서는 FPGA(Field-Programmable Gate Array)의 설계 및 기능에 대해 설명합니다. FPGA 영역의 대부분은 행 및 열 상호 연결을 통해 연결할 수 있는 논리 배열 블록입니다. 다른 블록에는 PR, 송수신기 및 다른 메모리 구성 요소에 연결할 수 있는 메모리 컨트롤러가 포함됩니다. PJ 영역 10g X FPGA는 100만 개의 논리 요소, 170만 개의 레지스터, 각각 22비트가 있는 54,000개의 메모리 블록, 1,518개의 DSP 블록, 초당 367.4기가비트 트랜시버, 2개의 하드 PCIe 블록, 492개의 일반 IO 핀 및 12개의 메모리 컨트롤러. FPGA의 장점은 복잡한 기능을 생성하기 위한 고밀도, 여러 기능의 통합, 다양한 IO 표준 및 기능에 대한 액세스, 하나의 칩에서 데이터에 대한 직접 액세스입니다.
FPGA Internals
FPGA Internals
  • 2020.04.18
  • www.youtube.com
The internal architecture of FPGA
 

11. GPU 시스템의 OpenCL 메모리



11. GPU 시스템의 OpenCL 메모리

강사는 OpenCL 메모리와 AMD GPU의 매핑 및 GPU 시스템의 다양한 메모리 계층에 대해 설명합니다. 컴퓨팅 장치에는 여러 SIMD 레인, 개인 레지스터 파일 및 개인 메모리가 있는 코어로 작동하는 컴퓨팅 장치에 대한 지시문을 관리하는 명령 프로세서가 있습니다. 커널 프로그램은 사용 가능한 모든 코어를 활용하고 메모리 액세스 대기 시간을 줄이는 자율 작업을 제공하기 위한 것입니다. 발표자는 또한 계산과 메모리 축 이동 사이의 비율을 나타내는 산술 강도의 개념과 GPU의 메모리 대역폭이 제한 요인이 되는 것을 피하기 위해 얼마나 높아야 하는지에 대해 언급합니다.

  • 00:00:00 이 섹션에서 발표자는 특히 AMD GPU에 중점을 둔 다양한 프로세서의 하드웨어 아키텍처와 관련하여 OpenCL에 대해 논의합니다. 다이어그램은 데이터 병렬 프로그램을 설계할 때 사용되는 OpenCL 커널을 나타내는 왼쪽의 커널과 함께 글로벌 메모리, 상수 메모리 및 로컬 메모리를 보여줍니다. 각 작업 그룹은 데이터를 기반으로 계산의 하위 집합을 수행하며 로컬 메모리는 작업 그룹에 로컬이고 프로세서 내의 실행 장치와 공유됩니다. 작업 그룹 내의 작업 항목은 각각 고유한 데이터 세트를 가지고 수행되는 실제 계산입니다.

  • 00:05:00 이 섹션에서 강사는 OpenCL 메모리가 AMD GPU에 매핑되는 방식과 GPU 시스템의 다양한 메모리 수준에 대해 설명합니다. 컴퓨팅 장치에는 레벨 1 캐시가 있고 일부 레벨 2 캐시를 공유하고 글로벌 메모리에 연결된 컴퓨팅 장치에 명령을 예약하는 명령 프로세서가 있습니다. 컴퓨터 장치는 다중 SIMD 레인과 개인 메모리를 구성하는 GPR이라고 하는 개인 레지스터 파일과 함께 코어 역할을 합니다. 커널 프로그램은 사용 가능한 모든 코어를 사용하도록 가능한 한 많은 독립적인 작업을 제공해야 하며 이러한 작업은 메모리 액세스 대기 시간을 최소화하기 위해 하드웨어 컨텍스트 전환을 허용해야 합니다. 커널은 또한 하드웨어를 효율적으로 사용하기 위해 산술 강도가 높아야 합니다.

  • 00:10:00 이 섹션에서 화자는 본질적으로 계산과 메모리 축 이동 사이의 비율인 로맨틱 강도의 개념에 대해 논의합니다. 목표는 메모리 대역폭에 의해 제한되지 않도록 가능한 한 높은 메모리 액세스에 대한 수학 연산을 수행하는 것입니다.
OpenCL Memory on a GPU System
OpenCL Memory on a GPU System
  • 2020.05.23
  • www.youtube.com
This lecture introduces how OpenCL memory model is mapped to a GPU based system.
 

12. OpenCL 예제: 행렬 곱셈



12. OpenCL 예제: 행렬 곱셈

이 비디오는 OpenCL 프로그래밍의 예로 행렬 곱셈을 소개합니다. 발표자는 행렬 행과 열을 통과할 수 있는 독립적인 루프를 만들기 위해 C 코드를 작성하는 방법을 보여줍니다. 작업 항목과 OpenCL의 행렬 요소에 작업 항목을 매핑하는 방법에 대해 설명합니다. 커널 함수 인수, 호출 방법 및 본문을 다루는 커널 구현이 설명됩니다. 발표자는 인덱스를 계산하기 위해 행 및 인덱스 번호를 사용하여 입력 행렬이 1차원 배열에 어떻게 저장되는지 보여줍니다. 궁극적으로 커널 함수는 내적을 계산하여 출력 행렬의 요소를 생성합니다. 물리적 메모리에 행렬을 저장하는 선형 접근 방식이 강조됩니다.

  • 00:00:00 이 섹션에서는 OpenCL 프로그래밍의 예로 행렬 곱셈에 대해 배웁니다. 행렬 곱셈은 다양한 응용 프로그램에서 사용된 고전적인 전력 컴퓨팅 예제입니다. 구현에는 행렬 A의 열 수가 행렬 B의 행 수와 같아야 한다는 요구 사항과 함께 중첩 루프가 필요합니다. 이는 행렬 C의 각 결과 요소가 A의 행 벡터의 내적이기 때문입니다. B의 열 벡터를 사용합니다. 연산을 구현하기 위해 C 코드가 작성되는 방법과 루프가 독립적으로 작동하여 결과 행렬 C의 모든 행 또는 열을 임의 방식으로 통과할 수 있는 방법을 확인합니다.

  • 00:05:00 이 섹션에서는 작업 항목의 개념을 소개하고 OpenCL에서 작업 항목을 행렬 요소에 매핑하는 방법에 대해 설명합니다. 독립적으로 계산할 행렬의 각 출력 요소에 대해 작업 항목을 생성할 수 있으므로 2차원 범위 작업 항목에 매핑할 수 있습니다. OpenCL의 행렬 곱셈에 대한 커널 구현에 대해서도 설명합니다. 여기서 커널 함수의 인수와 기본 함수에서 이를 호출하는 방법을 설명하고 커널 함수의 본문을 제시합니다. 커널 함수는 행 벡터와 열 벡터의 내적을 계산하여 출력 행렬의 각 요소를 계산합니다.

  • 00:10:00 이 섹션에서 연사는 OpenCL 프로그래밍 언어를 사용하여 행렬을 곱하는 과정을 설명합니다. 주요 아이디어는 내적 연산을 수행할 올바른 요소를 찾기 위해 올바른 인덱스를 계산하기 위해 행 번호와 인덱스 번호를 사용하여 2차원 입력 행렬을 1차원 배열로 저장하는 것입니다. 커널 함수는 합계 변수를 0으로 초기화하고 A의 행 벡터와 B의 열 벡터를 반복하여 내적을 계산하고 결과를 C의 해당 요소에 할당합니다. 이러한 단계는 행 및 열 번호를 사용하여 다음을 수행하는 방법을 보여줍니다. 물리적 메모리에 매트릭스를 저장하는 데 필수적인 선형 방식으로 인덱스를 계산합니다.
OpenCL Example: Matrix Multiplication
OpenCL Example: Matrix Multiplication
  • 2020.06.05
  • www.youtube.com
This video explains how to do matrix multiplication in OpenCL. Note the thinking process to break a large problem into smaller partitions, and compute the sm...
 

13. OpenCL 프로그램의 구조(part1)



13. OpenCL 프로그램의 구조(part1)

비디오 "OpenCL 프로그램의 구조(1부)"에서 OpenCL 응용 프로그램을 구축하는 과정을 설명합니다. 프로그램은 리소스를 이해하고 OpenCL 컨텍스트 및 명령 대기열을 생성하기 위해 먼저 OpenCL 플랫폼을 쿼리해야 합니다. 그런 다음 호스트와 장치 메모리 간의 데이터 교환을 위해 버퍼가 생성되고 커널 프로그램은 장치에서 실행하기 위해 바이너리로 컴파일됩니다. 비디오는 계속해서 읽기 전용 및 쓰기 전용 버퍼를 생성하고, 출력 매트릭스를 위한 공간을 할당하고, 결과를 다시 호스트에 복사하는 방법을 설명합니다. 성공적인 실행을 위해 API 호출을 확인하는 것의 중요성이 강조됩니다.

  • 00:00:00 이 섹션에서 발표자는 OpenCL 응용 프로그램을 구축하는 단계를 설명합니다. 먼저 프로그램은 플랫폼에서 사용 가능한 리소스를 이해하기 위해 OpenCL 플랫폼을 쿼리한 다음 버퍼 작업 및 커널 시작에 필수적인 OpenCL 컨텍스트 및 명령 대기열을 생성해야 합니다. 그런 다음 호스트와 장치 메모리 간에 데이터를 교환하기 위해 버퍼가 생성됩니다. 그런 다음 커널 프로그램을 FPGA 또는 GPU의 가속기 장치에서 실행할 수 있는 바이너리로 컴파일해야 합니다. 컴파일 과정은 장치에 따라 다릅니다.

  • 00:05:00 이 섹션에서 비디오는 플랫폼 및 장치를 생성하고 컨텍스트를 생성하고 OpenCL 프로그래밍을 위한 명령 대기열을 생성하기 위한 환경을 설정하는 방법에 대해 설명합니다. 여기에는 프로그래머가 사용 가능한 플랫폼 수를 결정하고 스토리지 공간을 할당할 수 있도록 플랫폼 ID를 가져오는 작업이 포함됩니다. 비디오는 계속해서 플랫폼 내에서 장치를 선택하고, 선택한 장치에 대한 정보를 얻고, 적절한 인수를 설정하고, 이러한 인수 값을 커널 함수에 전달하여 커널을 인스턴스화하는 방법을 설명합니다. 마지막으로 커널이 완료되면 장치에서 호스트의 메모리로 결과를 다시 복사하는 방법을 보여줍니다.

  • 00:10:00 이 섹션에서 비디오는 OpenCL 컨텍스트를 만드는 방법과 명령 대기열 및 버퍼와 같은 OpenCL 작업에 필요한 모든 리소스를 함께 묶는 컨텍스트 개체의 중요성을 설명합니다. 기록은 읽기 전용 및 쓰기 전용 버퍼를 만드는 방법과 Q 쓰기 버퍼 명령에서 CL 잉크 및 CL을 사용하여 호스트와 장치 간에 데이터를 복사하는 방법을 설명합니다. 사용된 예는 행렬 곱셈인데, 여기서 행렬 A와 B는 입력이고 행렬 C는 출력입니다. 동영상은 성공적인 API 호출 확인의 중요성을 강조합니다.

  • 00:15:00 이 섹션에서 발표자는 출력 매트릭스인 매트릭스 C에 대한 공간 할당 방법을 설명합니다. 그들은 버퍼 C가 CL 메모리로 선언되어 장치가 결과를 쓸 수 있다고 말합니다. 그러나 이것은 장치에서 결과를 검색하고 결과 매트릭스를 호스트의 어딘가에 복사하는 데 필요한 호스트 측에서 이 버퍼를 읽는 것을 금지하지 않습니다. 발표자는 컨텍스트, 플래그, 크기, 호스트 포인터 및 반환 값의 다섯 가지 인수를 사용하는 버퍼 API의 전체 정의를 보여줍니다.
Structure of an OpenCL Program (part1)
Structure of an OpenCL Program (part1)
  • 2020.06.05
  • www.youtube.com
This video describes the basic structure of an OpenCL program. (this is part1, a second part follows)
 

14. OpenCL 프로그램의 구조(part2)



14. OpenCL 프로그램의 구조(part2)

OpenCL 프로그래밍의 세 번째 단계는 오프라인에서 수행되기 때문에 FPGA 장치와 다른 커널 컴파일을 포함합니다. 소스 및 C TX가 포함된 CL 생성 프로그램은 프로그램을 생성하는 데 사용되고 CL 빌드 프로그램은 프로그램을 바이너리로 빌드하는 데 사용됩니다. 올바른 커널 함수는 적절한 진입점을 사용하여 선택되며 커널 인수는 올바른 포인터와 함께 CL 설정 커널 인수를 사용하여 초기화되어야 합니다. 연사는 행렬 곱셈에서 인수를 올바르게 설정하는 방법에 대해 자세히 설명합니다. 그런 다음 로컬 및 글로벌 작업 그룹 크기 설정, 커널 실행 및 대기열 버퍼 API에서 CL을 사용하여 결과 얻기에 대해 논의합니다. 마지막으로 발표자는 OpenCL 프로그래밍의 이벤트를 간략하게 언급합니다.

  • 00:00:00 이 섹션에서는 커널 컴파일과 관련된 OpenCL 프로그램의 세 번째 단계에 대해 설명합니다. 이 프로세스는 컴파일이 오프라인으로 수행되기 때문에 FPGA 장치의 경우 약간 다릅니다. 프로그램 소스 코드가 문자 버퍼에 저장되어 있다고 가정하면 소스와 C TX를 포함하는 CL 생성 프로그램을 사용하여 프로그램을 생성하고 CL 빌드 프로그램을 사용하여 프로그램을 바이너리로 빌드합니다. 다음으로 선택한 특정 커널 함수에 대한 적절한 진입점을 사용하여 커널을 생성하여 소스 코드에서 올바른 커널 함수를 선택합니다. 커널이 생성되면 실제 값을 가리키는 포인터와 함께 CL 설정 커널 인수를 사용하여 커널 인수를 적절하게 초기화해야 합니다. 예를 들어, 행렬 곱셈에서 대상 버퍼, 행렬 크기 및 두 개의 입력 행렬을 포함하여 7개의 인수를 올바르게 설정해야 합니다.

  • 00:05:00 이 섹션에서 발표자는 여러 커널 인수 초기화에 대해 이야기하고 오류를 방지하기 위해 이러한 인수의 인덱스를 올바르게 설정하는 것의 중요성을 강조합니다. 그런 다음 그룹의 작업 항목 수와 작업 그룹 수를 지정하여 로컬 및 글로벌 작업 그룹 크기를 설정하는 방법을 설명합니다. 마지막으로 OpenCL API를 호출하고 큐 버퍼 API에서 CL을 사용하여 장치에서 호스트 메모리로 결과를 가져오는 것을 포함하여 커널을 실행하는 단계를 설명합니다. 연사는 이벤트와 이벤트가 OpenCL 프로그래밍에서 어떻게 사용될 수 있는지에 대해서도 간략하게 언급하지만 이후 강의에서 더 자세히 논의할 것입니다.
Structure of an OpenCL Program (part2)
Structure of an OpenCL Program (part2)
  • 2020.06.05
  • www.youtube.com
This video describe the basic structure of an OpenCL program. (continued from part 1)
 

15. OpenCL 행렬 곱셈 데모



15. OpenCL 행렬 곱셈 데모

"OpenCL 행렬 곱셈 데모" 비디오는 OpenCL 프레임워크를 사용하여 행렬 곱셈 예제를 실행하는 과정을 설명합니다. 여기에는 호스트 측의 기본 C 프로그램, 커널 프로그램 및 makefile과 같은 여러 소스 코드 파일이 포함됩니다. 비디오는 OpenCL 프레임워크의 다양한 측면, 플랫폼 및 장치 ID 얻기, OpenCL 컨텍스트 생성, 프로그램 및 커널 개체, 호스트에 대한 버퍼 관리, 장치에서 버퍼 생성 및 초기화를 다룹니다. 발표자는 내적 연산을 수행하는 샘플 커널과 AMD Radeon pro 575 컴퓨팅 엔진의 최종 결과 데모도 보여줍니다.

  • 00:00:00 이 섹션에서는 발표자가 OpenCL을 통해 행렬 곱셈 예제를 실행하는 방법을 설명합니다. 이 예제는 호스트 측 프로그램인 기본 C 프로그램, my kernel CL이라는 커널 프로그램, 프로젝트 컴파일을 돕는 makefile을 포함하여 여러 소스 코드 파일로 구성됩니다. 기본 프로그램에는 표준 라이브러리, OpenCL 프레임워크용 매크로 정의, 입력 행렬(행렬 A 및 행렬 B)에 대한 선언, 장치 이름, 플랫폼 식별자 및 장치 수가 포함됩니다. 발표자는 또한 컨텍스트, 프로그램, 커널, 소스 코드 읽기 및 컴파일과 같은 OpenCL 프레임워크의 다양한 측면에 대해 설명합니다. 또한 연사는 플랫폼 및 장치 ID와 코드의 매트릭스 차원의 중요성을 설명합니다.

  • 00:05:00 이 섹션에서 발표자는 플랫폼 및 장치 ID를 얻고 행렬 곱셈 데모를 위한 OpenCL 컨텍스트를 만드는 프로세스에 대해 설명합니다. 플랫폼 수를 반환하고 플랫폼 ID를 저장하기 위해 배열을 할당하는 방법을 설명합니다. 또한 선택한 특정 유형의 장치 ID를 가져오고 해당 이름을 쿼리하는 방법도 보여줍니다. 비디오는 각 장치에 대한 명령 대기열을 생성하는 방법과 OpenCL 프로그램을 컴파일하는 방법을 보여줍니다. 앱 열기를 사용하여 커널 소스 코드 파일을 열고 프로그램을 컴파일하는 방법에 대해 자세히 설명합니다.

  • 00:10:00 이 섹션에서는 OpenCL 커널 소스 코드에서 프로그램 개체를 만드는 방법을 비디오에서 설명합니다. 이 프로세스는 플랫폼마다 다릅니다. 네이티브 OpenCL을 지원하는 Mac OS에서는 소스 코드를 사용하여 프로그램 개체를 만들 수 있습니다. 그러나 Altera FPGA OpenCL SDK에서 프로그램 개체를 생성하려면 커널을 컴파일하고 Altera의 특정 API를 사용하여 해당 컴파일의 바이너리 결과에서 커널을 생성해야 합니다. 프로그램 개체가 생성되면 비디오는 커널 프로그램을 빌드하고 커널 개체를 만드는 방법을 보여줍니다. 마지막으로 비디오는 결과 행렬 C를 저장하기 위해 버퍼가 할당되는 호스트 측의 버퍼 관리로 이동합니다.

  • 00:15:00 이 섹션에서는 발표자가 OpenCL을 사용하여 행렬 곱셈을 위해 장치 측에서 버퍼를 만들고 초기화하는 방법을 설명합니다. 계속해서 글로벌 및 로컬 작업 그룹 크기 설정을 포함하여 커널 인수를 올바르게 설정하는 방법을 보여줍니다. CL의 반환 값을 확인하는 것의 중요성도 강조됩니다. 그런 다음 발표자는 결과를 호스트 메모리로 읽는 방법을 시연한 다음 호스트와 OpenCL에 할당된 리소스를 해제합니다. 마지막으로 전역 ID 가져오기를 사용하여 행렬의 너비를 반복하고 내적 연산을 수행하고 결과를 행렬 C의 해당 요소에 저장하는 샘플 커널을 보여줍니다.

  • 00:20:00 이 섹션에서 발표자는 메인 C 프로그램과 Mike Rinder CL 프로그램 구축에 대해 논의합니다. 호스트 측 프로그램을 구축하려면 사용자는 단일 C 프로그램 파일을 컴파일해야 하며 커널의 경우 GPU 컴파일러를 사용하여 Micra Know CL을 GPU 바이너리로 컴파일할 수 있습니다. 호스트와 장치 측 모두에서 프로그램을 빌드한 후 사용자는 "main"이라는 실행 파일과 다양한 GPU 버전에 사용할 수 있는 다양한 바이너리를 갖게 됩니다. 이 파일을 실행하면 화자는 AMD Radeon pro 575 컴퓨팅 엔진이 있는 OpenCL 플랫폼을 보여줍니다. 이 플랫폼은 모든 요소가 8포인트를 포함하는 C 매트릭스의 초기 값을 가집니다.
OpenCL Matrix Multiplication Demo
OpenCL Matrix Multiplication Demo
  • 2020.06.05
  • www.youtube.com
This video walks through the code of Matrix Multiplication.
사유: