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

 

36. CPU 데이터 경로에서 명령 실행



36. CPU 데이터 경로에서 명령 실행

이 비디오는 누적 작업을 수행하는 예를 사용하여 CPU 데이터 경로에서 계산이 실행되는 방법을 설명합니다. 데이터 경로에는 주소를 사용하여 메모리에 데이터를 로드하고 저장하는 로드 및 저장 장치와 작업을 수행하는 ALU와 같은 기능 장치가 포함됩니다. 비디오는 메모리에서 데이터 로드, 작업 수행 및 결과를 다시 메모리에 저장하는 과정을 단계별로 보여줍니다. 발표자는 또한 동일한 기능을 구현하기 위해 FPGA를 활용하여 하드웨어에서 사용 가능한 리소스를 최대한 활용하는 방법을 설명합니다.

  • 00:00:00 이 섹션에서 비디오는 누적 연산을 수행하는 예를 사용하여 계산이 PGA에 어떻게 매핑되는지 설명합니다. 먼저 CPU 명령을 사용하여 고급 코드를 어셈블리 언어로 변환하고 중간 값을 레지스터에 저장합니다. CPU는 주소를 사용하여 데이터를 메모리에 로드하고 저장하는 로드 및 저장 단위를 포함하여 데이터 경로에 기능 단위가 있는 파이프라인 CPU입니다. 데이터 경로는 고정된 데이터 폭과 연산 횟수 내에서 모든 종류의 명령을 실행할 수 있도록 충분히 일반적으로 설계되었으며 ALU를 통해 상수 값을 레지스터에 로드할 수 있습니다. 비디오는 또한 프로세스를 단계별로 설명하면서 CPU에서 6개의 명령이 실행되는 방법의 예를 제공합니다.

  • 00:05:00 이 섹션에서 발표자는 몇 가지 명령어를 살펴보고 CPU 데이터 경로에서 실행되는 방법을 설명합니다. 여기에는 메모리에서 레지스터 파일로 데이터 로드, 데이터 경로의 다양한 기능 단위를 사용하여 곱셈 및 덧셈과 같은 작업 수행이 포함됩니다. , 결과를 다시 메모리에 저장합니다. 그런 다음 연사는 계속해서 CPU 하드웨어를 풀고 기능에 필요한 정확한 리소스를 사용하여 FPGA 하드웨어에서 사용 가능한 리소스를 최대한 활용하여 FPGA를 사용하여 동일한 커널 기능을 구현하는 방법을 설명합니다.
Execute Instructions on CPU Datapath
Execute Instructions on CPU Datapath
  • 2020.07.04
  • www.youtube.com
This video reviews how instructions are executed on a traditional CPU data path, which will be contrasted with the mapping to a customized FPGA design. Ackno...
 

37. FPGA의 맞춤형 데이터 경로


37. FPGA의 맞춤형 데이터 경로

비디오는 FPGA를 사용하여 CPU 하드웨어를 풀고 FPGA에서 데이터 경로를 사용자 지정하여 성능 향상을 위한 커널 기능을 구현하는 방법을 설명합니다. 사용하지 않는 단위를 제거하고 상수 및 와이어를 로드하고 일부 작업을 다시 예약하면 로드 작업을 동시에 수행하여 성능을 높일 수 있습니다. 맞춤형 데이터 경로 설계는 특정 기능에 필요한 작업 및 데이터를 선택하여 처리량을 개선하고 대기 시간 및 전력 소비를 줄일 수 있습니다. 비디오는 연속 추가를 위한 8개의 작업 항목 실행 및 효율적인 파이프라인을 허용하기 위해 단계 사이에 레지스터를 사용하여 메모리에 다시 저장된 결과와 함께 두 벡터에 대한 수요 방식 추가의 예를 보여줍니다.

  • 00:00:00 이 섹션에서는 FPGA를 사용하여 향상된 성능과 리소스 활용으로 커널 기능을 구현하는 개념에 대해 설명합니다. 아이디어는 CPU 하드웨어를 풀고 FPGA 리소스를 사용하여 모든 실행 단계에서 사용되지 않는 리소스를 사용하면서 필요한 기능을 구현하는 디자인을 만드는 것입니다. 사용하지 않는 특정 단위, 로드 상수 및 와이어를 제거하고 일부 작업을 다시 예약하면 로드 작업을 동시에 수행하여 성능을 높일 수 있습니다. FPGA에서 데이터 경로를 사용자 지정하면 특수 전용 리소스를 사용하여 동일한 결과를 얻을 수 있습니다.

  • 00:05:00 이 섹션에서 발표자는 특정 기능, 메모리 크기 및 구성에 필요한 작업과 데이터를 선택하여 처리량을 개선하고 대기 시간을 줄이고 전력을 줄일 수 있는 방식으로 FPGA에서 맞춤형 데이터 경로 설계에 대해 논의합니다. 소비, 두 벡터에 대한 수요 방식 추가를 수행하는 커널 기능을 사용하여 결과를 메모리에 다시 저장합니다. 단계 사이에 레지스터를 활용하는 데이터 경로는 효율적인 파이프라인을 사용하고 연속 추가를 위해 8개의 작업 항목을 시작할 수 있으므로 각 주기가 유휴 유닛을 피하기 위해 서로 다른 스레드를 처리할 수 있습니다.
Customized Datapath on FPGA
Customized Datapath on FPGA
  • 2020.07.04
  • www.youtube.com
This video explains how to map OpenCL program onto a customized design in FPGA.Acknowledgement: the slides are from Intel's "OpenCL for FPGA" tutorial at ISC...
 

38. FPGA 및 데이터 병렬 커널용 OpenCL



38. FPGA 및 데이터 병렬 커널용 OpenCL

동영상은 OpenCL을 통해 FPGA 엔지니어가 소프트웨어 엔지니어링 리소스를 사용하여 FPGA의 병렬 컴퓨팅 리소스를 활용하여 FPGA 애플리케이션 개발자의 수를 확장하는 방법을 설명합니다. OpenCL의 프로그래밍 모델은 커널이라고 하는 데이터 병렬 함수를 사용하여 병렬화 사양을 가능하게 하며 각 커널은 독립 데이터 세그먼트에서 병렬 계산을 수행하기 위해 "get global ID"로 지정된 식별자에 의존합니다. 스레드 및 작업 그룹의 개념이 도입되었습니다. 여기서 스레드는 데이터 세트의 다른 부분에 액세스하고 작업 그룹으로 분할되며 동일한 작업 그룹 내의 스레드만 로컬 메모리를 공유할 수 있습니다. 이 프로그래밍 모델을 통해 OpenCL은 효율적인 데이터 병렬 처리를 허용합니다.

  • 00:00:00 이 섹션에서는 발표자가 OpenCL과 FPGA 기반 응용 프로그램 설계에서 OpenCL의 중요성을 소개합니다. 표준 CPU보다 FPGA용 프로그래머가 적지만 고급 프로그래밍 언어인 OpenCL은 FPGA 엔지니어가 소프트웨어 엔지니어링 리소스를 사용하여 FPGA의 병렬 컴퓨팅 리소스를 활용할 수 있도록 함으로써 FPGA 애플리케이션 개발자의 수를 확장합니다. OpenCL은 이기종 컴퓨팅을 위한 산업 표준이며 프로그래머가 친숙한 C 또는 C++ API를 사용하여 멀티 코어 프로세서, GPU 및 FPGA와 같은 하드웨어 가속기로 복잡한 워크로드를 실행하는 프로그램을 작성할 수 있습니다. OpenCL의 기본 아이디어는 병렬성을 명시적으로 지정할 수 있는 실행 모델입니다.

  • 00:05:00 이 섹션에서는 FPGA 및 데이터 병렬 커널용 OpenCL의 프로그래밍 모델에 대해 설명합니다. 비디오는 별도의 하드웨어 도메인에서 실행되는 호스트와 가속기 또는 장치가 있는 OpenCL 프레임워크의 구조를 설명합니다. 호스트는 장치와 커널을 준비하고 이러한 장치에 제출하는 데 필요한 명령을 생성합니다. 가속기 코드는 OpenCLC로 작성되며 호스트는 일련의 OpenCL API 호출을 통해 가속기 코드와 통신하여 호스트 프로세서와 장치에서 실행되는 커널 간의 통신을 추상화할 수 있습니다. OpenCL 커널은 다중 병렬 실행 스레드를 정의하는 데 사용되는 데이터 병렬 함수이며 각각 "get global ID"로 지정된 식별자에 의존합니다. 이러한 ID는 커널이 작업해야 하는 데이터의 세그먼트 또는 파티션을 지정하여 독립적인 데이터 쌍에서 병렬 계산을 수행할 수 있도록 합니다.

  • 00:10:00 이 섹션에서는 스레드 및 작업 그룹의 개념을 소개합니다. 여기서 스레드는 데이터 세트의 다른 부분에 액세스할 수 있고 작업 그룹으로 분할됩니다. 동일한 작업 그룹 내의 스레드만 로컬 메모리를 공유할 수 있습니다. 각 스레드에는 로컬 및 글로벌 ID가 있으며 글로벌 ID는 그룹 ID 및 로컬 크기를 사용하여 계산할 수 있습니다. 이 시스템은 효율적인 데이터 병렬 처리를 허용합니다.
OpenCL for FPGA and Data Parallel Kernel
OpenCL for FPGA and Data Parallel Kernel
  • 2020.04.19
  • www.youtube.com
A recap of OpenCL for FPGA, how kernels identify data partition
 

39. OpenCL 호스트 측 프로그래밍: 컨텍스트, 큐, 메모리 객체 등



39. OpenCL 호스트 측 프로그래밍: 컨텍스트, 큐, 메모리 객체 등

이 비디오 자습서는 컨텍스트, 대기열 및 메모리 개체에 중점을 두고 OpenCL의 다양한 호스트 측 프로그래밍 개념을 살펴봅니다. 커널 개체를 만들고 커널 함수에 인수를 전달하는 데 사용되는 OpenCL의 두 가지 새로운 API인 clCreateKernelsInProgram 및 clSetKernelArg를 다룹니다. 이 자습서에서는 clCreateImage API를 사용하여 이미지 개체를 만들고 이미지 픽셀이 채널 순서 및 채널 유형을 사용하여 메모리에 저장되는 방법에 대해서도 설명합니다. OpenCL이 2D 및 3D 이미지를 처리하는 방법, 개발자가 clGetMemoryObjectInfo와 같은 API를 사용하여 메모리 개체에 대한 정보를 수집하는 방법, 버퍼 읽기 읽기 및 쓰기, 메모리 개체 매핑, 메모리 개체 간 데이터 복사와 같은 메모리 개체 작업을 수행하는 방법을 설명합니다.

  • 00:00:00 이 섹션에서는 OpenCL의 호스트 측 프로그래밍 개념을 다시 살펴봅니다. 이 섹션은 컨텍스트, 대기열 및 메모리 개체에 중점을 둡니다. 서로 다른 공급업체의 장치로 구성된 경우에도 물리적 플랫폼에 여러 컨텍스트를 구축할 수 있습니다. 전역 메모리의 메모리 개체는 여러 대기열에서 공유할 수 있지만 호스트 측의 애플리케이션에서 적절한 동기화를 수행해야 합니다. 하나의 컨텍스트 내에 여러 컨텍스트와 여러 명령 대기열이 있을 수 있습니다. 공급업체에서 제공하는 다양한 OpenCL 플랫폼이 반드시 호환되는 것은 아니므로 동일한 컨텍스트에 배치할 수 없습니다.

  • 00:05:00 이 섹션에서는 비디오에서 OpenCL의 두 가지 새로운 API에 대해 설명합니다. 첫 번째 API는 clCreateKernelsInProgram 함수를 사용하여 OpenCL 프로그램의 모든 함수에 대한 커널 생성을 허용합니다. 이렇게 하면 clGetKernelInfo 함수를 사용하여 커널 함수 이름 및 기타 관련 정보를 확인하는 데 사용할 수 있는 커널 개체 배열이 생성됩니다. 두 번째 API인 clSetKernelArg는 커널 인수를 인스턴스화하는 데 사용되며 커널 개체와 인수의 인덱스를 인수로 사용합니다. 비디오는 계속해서 이러한 API를 사용하는 방법과 사용 후 커널 개체를 해제하는 방법을 설명합니다.

  • 00:10:00 이 섹션에서는 API가 인수 값을 커널 함수에 전달하는 방법에 대해 알아봅니다. 기본 데이터 유형을 커널 함수에 대한 포인터로 전달하거나 복잡한 데이터를 포함하는 메모리 개체 또는 샘플 개체에 대한 포인터를 전달할 수 있습니다. 이미지 개체는 픽셀 데이터를 저장하는 데 사용되는 특수한 유형의 메모리 개체입니다. 버퍼 개체와 동일한 구성 플래그를 사용하고 이미지 형식 목록에서 정의된 형식을 사용하여 이미지 개체를 만들 수 있습니다. clCreateImage API는 이미지 개체를 만드는 데 사용되며 해당 매개 변수는 버퍼 개체를 만드는 데 사용되는 것과 유사합니다. 세 번째 인수는 할당할 이미지 데이터의 형식 속성을 식별하고 네 번째 인수는 이미지의 유형과 크기를 설명합니다.

  • 00:15:00 이 섹션에서는 clCreateImage() API를 사용하여 이미지 픽셀이 메모리에 저장되는 방식을 식별합니다. 이미지 객체 형식은 이미지를 메모리에 저장하도록 설계되었으며 채널 순서와 채널 유형의 두 가지 요소로 구성됩니다. 채널 순서는 각 픽셀에 대해 채널 정보가 저장되는 방식을 식별하며 기본 색상 및 알파 정보를 포함하는 열거형입니다. 대조적으로, 채널 유형은 이미지 채널이 바이너리로 인코딩되는 방식을 지정하고 다양한 값을 사용하여 색상 정보의 표현을 결정합니다. 비트 레벨은 채널의 색상 값을 나타내는 데 사용할 비트 수를 지정하는 데 필수적입니다. 또한 각 픽셀에 대해 RGBA 시퀀스가 메모리에 저장되고 각 색상 채널에 대한 색상 정보를 인코딩하기 위해 1바이트를 사용하는 이미지 형식의 메모리 레이아웃이 시연됩니다.

  • 00:20:00 이 섹션에서 비디오는 OpenCL이 2D 및 3D 이미지를 처리하는 방법에 대해 설명합니다. 이 이미지는 다른 차원에서 함께 쌓인 여러 슬라이스로 구성될 수 있습니다. CL 이미지 설명자는 이미지 개체가 배치되는 방식을 설명하는 데 사용되며 이미지 너비, 높이, 깊이(픽셀) 및 스캔라인 피치(바이트)와 같은 매개변수를 포함합니다. 또한 clCreateImage() API는 이미지를 설명하는 데 필요한 바이트 수를 식별하는 데 사용되며 행과 조각 내 패딩 및 정렬 조정이 필요할 수 있습니다.

  • 00:25:00 이 섹션에서 발표자는 clGetImageInfo 및 clGetMemoryObjectInfo와 같은 API를 사용하여 OpenCL에서 이미지 및 메모리 개체에 대한 정보를 수집하는 방법을 설명합니다. 이러한 API를 통해 개발자는 이미지 형식, 픽셀 크기, 픽셀 너비, 픽셀 높이, 깊이 및 메모리 개체의 기타 속성과 같은 정보를 얻을 수 있습니다. 또한 EnqueueReadBuffer/EnqueueWriteBuffer를 사용하여 버퍼 개체에 데이터를 읽거나 쓸 수 있고 EnqueueReadImage/EnqueueWriteImage를 사용하여 이미지 개체 데이터에 액세스할 수 있습니다. 원점, 영역, 행 피치 및 슬라이스 피치의 사용은 행, 슬라이스 및 그림으로 구성되는 이미지 개체에도 적용됩니다. 개발자는 이러한 API를 사용하여 액세스하려는 영역의 정확한 위치를 지정하거나 복사 작업을 수행하고 CL 이벤트 인수를 사용하여 이벤트를 생성할 수 있습니다.

  • 00:30:00 이 섹션에서는 비디오에서 OpenCL의 두 가지 메모리 개체 작업인 읽기 및 쓰기 버퍼 rec와 매핑 메모리 개체에 대해 설명합니다. 읽기 및 쓰기 버퍼 rec를 사용하여 사용자는 원본 및 크기 정보를 지정하여 특정 지점에서 데이터를 검색하거나 쓸 수 있습니다. 메모리 개체를 매핑하면 장치의 메모리 개체를 호스트의 메모리 영역에 매핑할 수 있습니다. 일단 매핑되면 메모리 매핑 API를 통해 얻은 포인터를 사용하여 호스트 측에서 메모리 개체를 읽고 수정할 수 있습니다. 비디오는 또한 메모리 개체 간에 데이터를 복사하고 호스트 측 프로그래밍을 단순화하며 읽기 및 쓰기 작업 성능을 향상시키기 위해 OpenCL에서 사용할 수 있는 메모리 개체 작업 목록을 살펴봅니다.

  • 00:35:00 이 섹션에서 발표자는 OpenCL의 다양한 메모리 개체와 한 위치에서 다른 위치로 데이터를 복사하는 데 사용할 수 있는 방법에 대해 설명합니다. 복사 기능에는 버퍼 복사, 이미지 복사, 버퍼 직사각형 복사 등이 포함됩니다. 발표자는 호스트 장치 시스템을 보여주고 대기열 복사 버퍼 기능에서 CL을 사용하여 한 버퍼에서 다른 버퍼로 데이터를 복사하는 방법을 보여줍니다. cl enqueu map buffer를 사용하여 버퍼를 메모리 공간에 매핑한 다음 메모리 복사를 사용하여 매핑된 영역을 자신에게 복사하는 방법을 설명합니다.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
  • 2020.03.27
  • www.youtube.com
OpenCL Host Side Programming: Context, queues, memory objects, etc.
 

40. FPGA용 HDL 설계 흐름



40. FPGA용 HDL 설계 흐름

이 동영상은 Quartus 설계 소프트웨어를 사용하여 FPGA(Field Programmable Gate Array)를 개발하는 과정을 설명합니다.

FPGA 개발을 위한 설계 방법론과 소프트웨어 도구에 대해 설명합니다. 일반적인 프로그래밍 가능 논리 설계 흐름은 설계 사양으로 시작하여 RTL 코딩으로 이동한 다음 RTL 기능 시뮬레이션으로 이동한 다음 설계를 장치별 프리미티브로 변환하기 위한 합성으로 이어집니다. 그런 다음 엔지니어는 이러한 프리미티브를 특정 FPGA 내부의 특정 위치에 매핑하고 타이밍 분석을 통해 성능 사양을 확인합니다. 마지막으로 설계가 FPGA 카드에 로드되고 디버깅 도구를 사용하여 하드웨어에서 테스트할 수 있습니다. Intel FPGA의 경우 Quartus 설계 소프트웨어를 사용하여 시스템 설명부터 시작하여 논리 합성, 배치 및 경로, 타이밍 및 전력 분석, 실제 FPGA에 대한 설계 프로그래밍으로 이동하는 설계 흐름을 수행합니다.

HDL Design Flow for FPGA
HDL Design Flow for FPGA
  • 2020.04.18
  • www.youtube.com
(Intel) FPGA Design Flow using HDL
 

41. OpenCL 데이터 유형 및 장치 메모리



41. OpenCL 데이터 유형 및 장치 메모리

비디오는 OpenCL 데이터 유형 및 장치 메모리에 대해 설명합니다. 부울, 정수 및 부동 소수점 유형을 다루고 int-ptr, uint-ptr 및 ptrdiff-t와 같은 메모리 주소에서 작동하는 데 사용되는 특정 데이터 유형을 설명합니다. 또한 동시에 모든 요소에 연산자를 적용할 수 있는 동일한 유형의 여러 요소를 포함하는 배열인 벡터 데이터 유형과 사용 방법에 대해 설명합니다. 이 비디오는 문자 및 숫자 인덱스, 하이-로우 및 짝수-홀수 사용을 포함하여 벡터의 요소를 초기화하고 액세스하는 방법에 대한 다양한 예제를 제공합니다. 또한 메모리 정렬과 커널 인수 설정 및 개인 커널 인수 사용 방법에 대해 설명합니다.

  • 00:00:00 이 섹션에서는 부울, 정수 및 부동 소수점 유형을 포함하여 OpenCL 커널 프로그래밍에서 사용할 수 있는 데이터 유형에 대한 개요를 비디오에서 제공합니다. int-ptr, uint-ptr 및 ptrdiff-t와 같은 특정 데이터 유형은 메모리 주소에서 작동하는 데 사용됩니다. 비디오는 대상 장치가 CL Cronus 14-point-64 CLCronus FP 64 확장을 지원하는 경우에만 이중 유형이 지원된다고 설명합니다. 개발자는 OpenCL 커널 프로그램에서 double 유형을 사용하기 전에 이 확장을 확인할 수 있습니다. 비디오는 또한 이중 유형 확장을 활성화하고 커널 프로그램에서 사용하는 방법을 설명합니다.

  • 00:05:00 비디오의 이 섹션에서는 OpenCL 데이터 유형과 장치 메모리에 대해 설명합니다. OpenCL 표준은 데이터 유형에 대한 엔디안 순서를 요구하지 않습니다. Little-endian 및 big-endian은 컴퓨터 아키텍처가 곱한 변수를 메모리에 저장하는 방법을 정의하는 방법에 따라 달라지는 두 가지 선택적 엔디안 유형입니다. 장치의 엔디안 순서는 CR 장치 정보 벡터 데이터 유형 가져오기를 사용하여 찾을 수 있습니다. 또한 벡터 데이터 유형은 동일한 유형의 여러 요소를 포함하고 고정 길이를 가지며 연산자가 동시에 모든 요소에 적용할 수 있는 배열로 도입되었습니다. 벡터 데이터 유형을 사용하는 이점은 배열을 사용하는 것보다 빠르고 간단하다는 것입니다. 이 동영상에서는 벡터 데이터 유형을 사용하여 여러 배열에서 요소별 추가를 수행하는 방법을 설명합니다.

  • 00:10:00 이 섹션에서는 스칼라 유형과 매우 유사한 OpenCL에서 사용할 수 있는 다양한 벡터 유형에 대해 배웁니다. 그러나 벡터는 벡터의 크기와 포함된 요소의 유형을 나타내기 위해 끝에 숫자가 필요합니다. OpenCL에는 장치에서 지원하거나 지원하지 않을 수 있는 두 가지 특수 데이터 유형인 double 및 half 데이터 유형도 있습니다. 다양한 유형에 대해 선호하는 벡터 크기를 알기 위해 OpenCL은 장치의 선호하는 벡터 너비를 쿼리하는 데 사용할 수 있는 API를 제공합니다. 이를 기반으로 선호하는 크기 128에 대해 부동 소수점 벡터를 정의하거나 선호하는 벡터 크기가 256인 경우 부동 소수점 8을 정의하는 것과 같이 프로그램을 빌드하기 위한 옵션을 설정할 수 있습니다. 괄호. 더 작은 벡터를 사용하여 벡터를 초기화할 수도 있습니다. 예를 들어 크기가 2인 두 벡터 A와 B가 있고 둘 다 스칼라 값으로 초기화된 경우입니다.

  • 00:15:00 이 섹션에서 발표자는 OpenCL 벡터의 요소 또는 구성 요소를 초기화하고 액세스하는 방법을 설명합니다. 사용자는 더 작은 벡터, 스칼라와 더 작은 요소의 조합을 사용하거나 값을 벡터 요소에 직접 할당하여 벡터를 초기화할 수 있습니다. 숫자 인덱싱, 문자 인덱싱 및 고-저 짝수-홀수를 사용하여 벡터의 요소에 액세스하는 방법을 보여주는 예제가 제공됩니다. 다른 예제는 벡터에서 요소의 하위 집합을 검색하고 이러한 요소를 다른 변수에 할당하는 방법을 보여줍니다.

  • 00:20:00 이 섹션에서 발표자는 숫자 인덱스, 문자(예: X, Y, Z, W)를 사용하여 벡터의 다양한 차원을 표현하고 조합을 포함하여 벡터 요소를 인덱싱하고 수정하는 다양한 방법에 대해 논의합니다. 문자 및 숫자 인덱스. 또한 고저 및 짝수 홀수를 사용하여 벡터에서의 위치에 따라 벡터 구성 요소의 하위 집합을 선택하는 방법도 설명합니다. 이러한 인덱싱 및 수정 방법은 길이와 차원이 다른 벡터로 작업하는 데 유용할 수 있습니다.

  • 00:25:00 이 섹션에서는 벡터에 있는 요소의 상위 또는 하위 절반을 가져오거나 -인덱싱된 요소. 또한 정수의 최하위 바이트가 최상위 바이트보다 낮은 주소에 저장되는 리틀 엔디안 장치에 벡터가 어떻게 저장되는지 살펴봅니다. 즉, 부호 없는 정수 벡터에서 각 32비트 정수 값의 4바이트는 최소 바이트에서 최상위 바이트 순서로 저장되며 벡터의 각 전체 요소는 16바이트를 차지합니다.

  • 00:30:00 이 섹션에서 발표자는 OpenCL 데이터 유형과 장치 메모리가 리틀 엔디안 장치와 빅 엔디안 장치에 어떻게 저장되는지 설명합니다. 부호 없는 정수 유형의 4개 요소 벡터가 두 유형의 장치 모두에서 메모리에 저장되는 방식을 보여줍니다. 리틀 엔디안 및 빅 엔디안 장치가 최하위 및 최상위 데이터를 저장하는 방식으로 인해 바이트 순서가 다르다는 점에 주목합니다. 바이트. 스피커는 또한 포인터를 사용하여 이 메모리에서 개별 바이트를 검색하는 "벡터 바이트"라는 커널 기능을 시연합니다.

  • 00:35:00 이 섹션에서는 OpenCL 데이터 유형의 메모리 정렬 개념에 대해 설명합니다. 메모리는 일반적으로 4의 배수인 메모리 주소에 항상 저장되는 정수 및 부동 소수점과 같은 32비트 구조에 정렬된다고 설명됩니다. 또한 long 및 double과 같은 64비트 구조는 8의 배수인 주소에 저장되며 데이터 크기보다 크거나 같은 2의 최소 거듭제곱이 데이터 구조의 메모리 정렬을 설정합니다. 또한 OpenCL에서 로컬 및 프라이빗 커널 인수를 초기화하는 과정에 대해 설명하고 로컬 및 프라이빗 공간의 커널 인수는 SetKernelArg를 사용하여 구성할 수 있지만 지정자가 로컬인 경우 마지막 매개 변수 값을 설정할 수 없다고 설명합니다. 또한 개인 커널 인수는 정수 및 부동 소수점과 같은 단순 프리미티브여야 합니다.

  • 00:40:00 이 섹션에서 동영상은 OpenCL 프로그램에서 커널 인수 설정 및 개인 커널 인수를 사용하는 방법에 대해 설명합니다. 커널 인수 설정을 사용할 때 첫 번째 인수는 인수의 정수 크기 인덱스이고 그 뒤에 변수에 대한 포인터가 와야 합니다. 비공개 커널 인수는 커널 함수에서만 사용할 수 있고 커널 인수 설정을 사용하여 전달될 수 있는 float 4의 배열과 같은 벡터일 수도 있습니다.
OpenCL data types and device memory
OpenCL data types and device memory
  • 2020.03.31
  • www.youtube.com
Data types specific to OpenCL kernel functions and their layout in device memory.
 

44. DPC++ 소개



44. DPC++ 소개

이 비디오는 복잡한 컴퓨팅을 FPGA 및 GPU와 같은 가속기로 오프로드하고 OneAPI 프레임워크의 일부인 데이터 병렬 프로그래밍을 위한 고급 언어인 DPC++를 소개합니다. DPC++는 최신 C++ 및 아키텍처 지향 성능 최적화를 사용하여 데이터 병렬 워크로드 속도를 높이는 것을 목표로 합니다. 강사는 데이터 관리 변수를 선언하고 명령 및 접근자를 사용하여 장치에서 커널 기능을 실행하는 방법을 보여주는 간단한 DPC++ 예제를 제공합니다. 비디오는 또한 람다 함수가 함수 외부에서 선언된 변수에서 인수와 참조를 취하는 방법을 설명합니다.

  • 00:00:00 이 섹션에서 강사는 복잡한 컴퓨팅을 FPGA 및 GPU와 같은 가속기로 오프로드하는 데이터 병렬 프로그래밍을 위한 고급 언어인 DPC++ 프로그래밍을 소개합니다. DPC++는 최신 C++를 사용하며 알고리즘을 분석하고 작업 또는 데이터를 분해하며 아키텍처 지향 성능 최적화를 사용하여 데이터 병렬 워크로드 속도를 높이는 것을 목표로 합니다. DPC++는 OneAPI 프레임워크의 일부이며 그 목표는 모든 CPU, FPGA 또는 GPU에서 실행할 수 있는 단일 언어로 프로그래밍할 수 있도록 하는 것입니다. 그런 다음 강사는 데이터 관리를 위한 변수, 버퍼 및 장치 큐를 선언하는 간단한 DPC++ 예제를 제공합니다.

  • 00:05:00 이 섹션에서 발표자는 장치에서 실행할 커널 함수를 정의하는 명령 및 람다 함수를 생성하는 DPC++ 프로그램의 예를 소개합니다. 프로그램은 액세서를 사용하여 버퍼를 명령과 연결하고 다른 액세서를 사용하여 결과에 액세스합니다. 마지막으로 프로그램에는 결과 접근자를 사용하여 버퍼의 콘텐츠에 액세스하고 출력하는 for 루프가 포함되어 있습니다. 람다 함수는 함수 외부에서 선언된 변수에 대한 참조를 전달하는 것과 같이 함수에 인수를 가져오는 다양한 방법을 가질 수 있습니다.
Intro to DPC++
Intro to DPC++
  • 2021.04.07
  • www.youtube.com
This videos give a brief introduction to DPC++ and go through a simple DPC++ example source code.
 

42. OpenCL 벡터 관계 연산



42. OpenCL 벡터 관계 연산

비디오는 OpenCL 커널 프로그래밍과 연산자 및 내장 함수에 대해 설명합니다. 초점은 관계 연산자와 스칼라 및 벡터 값으로 작동하는 방법에 있습니다. 상수와 개인 벡터 간에 요소별 AND 연산을 수행하는 커널 함수 "op 테스트"의 예가 제공됩니다. 이 비디오는 논리 연산을 사용하여 특정 벡터 요소를 스칼라와 비교하여 OpenCL에서 관계 연산으로 벡터를 구현하는 방법을 설명합니다. 결과 벡터는 출력 메모리 개체에 할당되는 최종 출력 벡터를 생성하기 위해 while 루프에서 사용할 수 있습니다.

  • 00:00:00 이 섹션에서는 비디오에서 OpenCL 커널 프로그래밍을 소개하고 다른 고급 언어에서 상속된 연산자 및 내장 함수에 대해 설명합니다. 제시된 연산자에는 산술, 비교 및 논리, 비트 및 삼항 선택이 포함됩니다. 특히 이 섹션에서는 관계 연산자에 중점을 두고 관계 연산자가 스칼라 값과 벡터 값 모두에서 어떻게 작동하는지 설명합니다. 세그먼트는 또한 관계 연산자를 사용하여 상수 벡터와 초기 값으로 초기화된 개인 벡터 간에 요소별 AND 연산을 실행하는 "op 테스트"라는 예제 커널 함수를 제공합니다.

  • 00:05:00 이 섹션에서 발표자는 OpenCL에서 관계 연산이 포함된 벡터를 구현하는 방법을 설명합니다. 논리 연산을 사용하여 벡터의 특정 요소를 스칼라 값과 비교하는 예를 사용하여 발표자는 결과 벡터가 각각 -1과 0으로 표시되는 참 및 거짓 값으로 생성되는 방법을 보여줍니다. 그런 다음 결과 벡터는 개별 요소가 추가 논리 연산을 수행하여 출력 메모리 개체에 할당되는 최종 출력 벡터를 생성하는 while 루프에서 사용할 수 있습니다.
OpenCL vector relational operations
OpenCL vector relational operations
  • 2020.04.03
  • www.youtube.com
vector relational operations
 

43. OpenCL 내장 함수: vloadn, 선택



43. OpenCL 내장 함수: vloadn, 선택

비디오는 두 가지 주요 OpenCL 내장 기능인 vloadn 및 select를 다룹니다. Vloadn을 사용하면 스칼라 배열의 값으로 배치를 초기화할 수 있으며 오프셋과 스칼라 배열에 대한 포인터라는 두 가지 인수를 사용합니다. 반면 선택을 사용하면 두 배치에서 특정 요소를 선택하고 이를 사용하여 새 벡터를 만들 수 있습니다. 부호 있는 정수 값이나 부호 없는 정수 값을 포함할 수 있으며 마스크 요소의 최상위 비트만 중요합니다. 튜토리얼은 이러한 기능이 실제로 어떻게 작동하는지 보여줍니다.

  • 00:00:00 이 섹션에서는 스칼라 배열의 값을 사용하여 배치를 초기화하는 데 사용되는 내장 함수인 Vloadn에 대해 알아봅니다. Vloadn은 오프셋과 스칼라 배열에 대한 포인터라는 두 가지 인수를 사용합니다. 오프셋은 벡터의 크기 측면에서 주어진 배치에 배치되는 배열의 요소를 결정합니다. 또한 두 배치에서 특정 요소를 선택하고 이를 사용하여 새 벡터를 만드는 데 사용할 수 있는 선택 기능에 대해 알아봅니다. 부호 있는 정수 값이나 부호 없는 정수 값을 포함할 수 있으며 마스크 요소의 최상위 비트만 중요합니다. Select에 있는 마스크 구성 요소의 최상위 비트는 출력 벡터의 해당 요소에 사용할 배치를 결정합니다.

  • 00:05:00 이 섹션에서 자습서는 vloadn 및 select라는 두 가지 OpenCL 내장 함수에 대해 설명합니다. Vloadn은 지정된 벡터의 요소를 새 벡터로 로드하는 데 사용되며 select는 마스크를 기반으로 첫 번째 또는 두 번째 입력에서 요소를 선택하는 데 사용됩니다. 튜토리얼은 vloadn이 마스크를 기반으로 첫 번째 입력 벡터에서 값을 선택하는 방법과 첫 번째 또는 두 번째 입력 벡터에서 비트를 선택하기 위해 선택하는 방법을 포함하여 이러한 함수가 실제로 어떻게 작동하는지에 대한 예제를 제공합니다.
OpenCL built-in functions: vloadn , select
OpenCL built-in functions: vloadn , select
  • 2020.04.05
  • www.youtube.com
OpenCL built-in functions: vloadn , select
 

45. 병렬로 생각하는 방법?



45. 병렬로 생각하는 방법?

비디오는 행렬 곱셈을 예로 사용하여 병렬 프로그래밍에 대해 설명합니다. 여러 행과 열을 독립적으로 계산할 수 있는 이 계산의 병렬성을 강조합니다. 행렬 C에서 단일 요소 계산의 구현은 병렬 계산을 허용하는 커널 함수를 사용하여 표시됩니다. 접근자, 범위 및 병렬 커널 함수의 사용에 대해 자세히 설명합니다. 범위 값을 커널 함수로 전달하는 단계에 대해 설명합니다. 인텔 FPGA 개발 클라우드를 사용하는 행렬 곱셈의 데모도 시연됩니다.

  • 00:00:00 이 섹션에서는 비디오에서 병렬 프로그래밍을 가르치기 위해 일반적으로 사용되는 예제로 행렬 곱셈을 소개합니다. 비디오에서는 행렬 곱셈이 한 행렬에서 행을 취하고 다른 행렬에서 열을 취하여 요소별 곱셈 및 누적을 수행하여 결과 행렬을 생성하는 것을 포함한다고 설명합니다. 이 비디오는 서로 다른 행과 열이 서로 독립적으로 계산될 수 있기 때문에 이 계산에 많은 병렬 처리가 있다고 설명합니다. 행렬 곱셈의 간단한 구현은 요소별 곱셈 및 누적을 수행하는 중첩된 for 루프가 있는 일반 C 또는 C++ 언어를 사용하여 표시됩니다.

  • 00:05:00 이 섹션에서는 병렬 계산을 허용하는 하나의 커널 함수로 구현되는 행렬 C의 단일 요소 계산 구현에 대해 배웁니다. 요점은 모든 단일 행과 열에 대해 계산이 동일하며 유일한 차이점은 행과 열 번호라는 것입니다. 접근자는 행렬 A 및 B에 대한 읽기 전용 액세스와 행렬 C에 대한 쓰기 액세스로 커널의 버퍼에 액세스하는 데 도움이 됩니다. 범위는 다중 차원을 선언하는 추상화로 사용되며 H.parallel4는 병렬 커널 함수를 정의하는 데 도움이 됩니다. . 커널 함수에는 두 차원의 모든 값을 반복할 변수인 람다 함수가 포함되어 있습니다.

  • 00:10:00 이 섹션에서 화자는 층류 함수인 커널 함수에 범위 값을 전달하는 것과 관련된 단계를 설명합니다. 그들은 변수의 두 가지 차원과 변수가 각 변수를 식별하는 방법에 대해 논의합니다. 발표자는 람다 함수가 작동하는 방식을 살펴보고 문제 크기가 커널 함수를 실행하는 행과 열의 수로 정의되는 방식을 보여줍니다. 그들은 행렬 곱셈의 예, 전통적인 C 플러스 플러스 표기법, 가장 안쪽 for 루프에서 수행되는 요소별 곱셈 및 누적을 사용합니다. 마지막으로 인텔 FPGA 개발 클라우드를 사용하여 행렬 곱셈의 빠른 데모를 시연합니다.
How to Think In Parallel ?
How to Think In Parallel ?
  • 2021.04.07
  • www.youtube.com
This video use matrix multiplication example to introduce how to think in parallel with design data parallel algorithms.