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

 

EECE.6540 이기종 컴퓨팅(University of Massachusetts Lowell) - 46. 기본 FPGA 개념



46. 기본 FPGA 개념

이 비디오는 FPGA(Field Programmable Gate Array)의 기본 개념을 다룹니다. CPU와 달리 FPGA는 특정 하드웨어 리소스에 맞게 프로그래밍할 수 있으므로 고도로 사용자 정의할 수 있습니다. 이 비디오는 회로 설계에서 대기 시간의 중요성과 f max를 최대화하여 대기 시간의 균형을 맞추는 방법에 대해 설명합니다. 계산을 수행할 수 있는 빈도를 늘리기 위한 파이프라인 설계의 개념을 소개하고 회로의 데이터 경로 및 제어 경로에 대해 설명합니다. 마지막으로 이 비디오에서는 FPGA의 회로 점유율과 버블 감소 및 점유율 증가가 어떻게 f max를 증가시킬 수 있는지에 대해 설명합니다.

  • 00:00:00 이 섹션에서는 FPGA(Field Programmable Gate Array)의 기본 개념과 다른 프로세서 아키텍처와의 차이점에 대해 알아봅니다. CPU와 달리 FPGA에는 고정된 데이터 경로가 없으며 다양한 수의 레지스터, 계산 논리 및 연결을 수용하기 위해 특정 하드웨어 리소스에 맞게 프로그래밍할 수 있으므로 고도로 사용자 정의할 수 있습니다. FPGA에는 적응형 논리, RAM 블록, DSP 블록 및 프로그래밍 가능한 라우팅 스위치와 같은 다양한 구성 요소가 포함되어 있으며 연결하여 다양한 설계를 구현할 수 있습니다. 또한 FPGA의 최대 작동 주파수는 회로의 대기 시간과 작동 속도에 영향을 미치는 조합 논리의 물리적 전파 지연에 의해 결정됩니다.

  • 00:05:00 이 섹션에서는 대기 시간의 개념과 회로 설계에서의 중요성에 대해 설명합니다. 대기 시간은 회로가 하나 이상의 작업을 완료하는 데 걸리는 시간이며 시간 또는 클록 주기로 측정할 수 있습니다. 대기 시간을 줄이는 것이 일반적으로 목표이지만 f max를 최대화하여 신중하게 균형을 맞춰야 합니다. 대기 시간에 최적화된 디자인과 파이프라인 사용을 통해 f max에 최적화된 디자인의 예가 제공됩니다. 긴 중요 경로를 끊고 속도를 향상시키기 위한 파이프라인 레지스터의 중요성이 강조됩니다.

  • 00:10:00 이 섹션에서 동영상은 파이프라인 설계의 개념과 계산 수행 빈도를 높이는 방법을 설명합니다. 파이프라인 레지스터를 사용하면 지연 시간을 단축할 수 있으므로 클럭 속도를 높이고 처리량을 높일 수 있습니다. 그런 다음 비디오는 회로의 데이터 경로 및 제어 경로에 대한 아이디어를 소개합니다. 여기서 데이터 경로는 계산을 수행하는 레지스터 및 조합 논리의 체인이고 제어 경로는 회로의 작동을 제어하는 데이터 경로 외부의 모든 것입니다. . 특히 핸드셰이킹 흐름 제어, 루프 제어 및 분기 제어를 위한 제어 경로에 다양한 논리가 추가되고 점유는 회로에서 데이터 경로의 초기화 비율을 정의하는 데 사용됩니다.

  • 00:15:00 이 섹션에서 발표자는 FPGA의 회로 점유 개념을 설명합니다. 이 회로에는 여러 레지스터가 있으며 그 중 하나는 입력 데이터가 유효한지 여부를 결정하는 유효한 레지스터입니다. 목표는 전체 회로의 기포를 최소화하여 점유율을 높이기 위해 회로의 기포를 줄이는 것입니다. 각 주기는 자원이 어떻게 사용되고 있는지 확인하기 위해 계산되며 회로에서 비어 있는 부분을 거품이라고 합니다. 기포를 줄이고 점유율을 높이면 f max를 높일 수 있습니다.
Basic FPGA concepts
Basic FPGA concepts
  • 2021.04.07
  • www.youtube.com
This video introduces basic concepts of FPGA and design for FPGA
 

47. 설계 분석(I): FPGA 초기 이미지 분석



47. 설계 분석(I): FPGA 초기 이미지 분석

비디오의 이 섹션은 DPC++ 설계를 위해 FPGA 초기 이미지를 분석하는 프로세스에 중점을 둡니다. 연사는 프로그램 컴파일, FPGA 바이너리 생성 및 프로파일링 실행과 같은 관련된 단계를 설명합니다. 동영상에는 보고서를 생성하고 보고서에 제공된 다양한 정보 패널을 해석하는 방법에 대한 데모가 포함되어 있습니다. 발표자는 또한 b2 모듈의 FPGA 초기 이미지를 분석하고 다양한 로직 블록, 루프, 로드 유닛 및 언롤 팩터에 대해 논의합니다. 또한 커널 기능의 설계가 FPGA의 내부 설계에 얼마나 큰 영향을 미칠 수 있는지에 대해 논의하고 처리량을 늘리기 위해 내부 및 외부 루프를 풀 수 있는 방법에 대한 예를 제공합니다. 예제는 FPGA의 하드웨어 리소스에 영향을 미치는 고급 언어 프로그래밍의 유연성을 보여줍니다.

  • 00:00:00 비디오의 이 섹션에서 발표자는 특히 FPGA 초기 이미지 분석에 중점을 둔 DPC++ 설계 분석 프로세스에 대해 논의합니다. 여기에는 프로그램을 FPGA 에뮬레이터로 컴파일하여 기능적 정확성을 보장하고, FPGA 바이너리를 생성하고, 기능 카드에서 실행하고, 프로파일링을 실행하여 런타임 성능을 결정하는 것과 같은 여러 단계가 포함됩니다. 두 번째 단계는 필요한 경우 설계를 수정하기 전에 보고서를 생성하고 병목 현상을 찾는 것입니다. 이 비디오에는 보고서를 생성하고 브라우저에서 분석하는 방법에 대한 데모가 포함되어 있으며 보고서에서 제공되는 다양한 정보 패널 및 요약을 해석하는 방법을 설명합니다.

  • 00:05:00 이 섹션에서는 발표자가 디자인 분석 도구와 그 기능에 대한 개요를 제공합니다. 자원 활용도 패널이 설계에 사용될 자원에 대한 정보를 표시하는 방법과 시스템 뷰어 패널을 통해 사용자가 메모리 구성 요소 및 파이프와 같은 설계의 다양한 구성 요소를 볼 수 있는 방법을 설명합니다. 시스템 뷰어 패널 내의 그래프 뷰어는 설계에 사용된 구성 요소 목록과 상호 연결 방식을 보여줍니다. 발표자는 또한 사용자가 개별 모듈을 확대하여 소스 코드에서 해당 세그먼트를 볼 수 있는 방법을 시연합니다.

  • 00:10:00 이 섹션에서 발표자는 b2 모듈의 FPGA 초기 이미지를 분석하고 설계를 구성하는 다양한 논리 블록 및 루프에 대해 논의합니다. 또한 메모리 구성 요소에서 데이터를 로드하기 위한 로드 유닛의 사용과 루프 작업의 효율성을 높이기 위한 언롤링 요소에 대해서도 설명합니다. 또한 연사는 병렬 4 및 단일 작업 설계를 비교하고 메모리 액세스를 최적화하기 위해 FPGA 설계에 단일 작업을 사용할 것을 권장합니다.

  • 00:15:00 이 섹션에서 발표자는 커널 기능의 설계가 FPGA의 내부 설계에 얼마나 큰 영향을 미칠 수 있는지에 대해 논의합니다. 발표자는 FPGA의 하드웨어 리소스를 활용하여 처리량을 증가시키기 위해 내부 및 외부 루프를 풀 수 있는 방법에 대한 예를 제공합니다. 예제는 FPGA의 하드웨어 리소스에 영향을 미치는 고급 언어 프로그래밍의 유연성을 보여줍니다.
Design Analysis (I): Analyze FPGA Early Images
Design Analysis (I): Analyze FPGA Early Images
  • 2021.04.07
  • www.youtube.com
This video introduce the design workflow and how to analyze the early image using DPC++ compiler report.
 

48. DPC++ FPGA 설계 분석(II): 런타임 프로파일링



48. DPC++ FPGA 설계 분석(II): 런타임 프로파일링

이 비디오에서 발표자는 프로파일링 계측기 레지스터를 FPGA 비트 스트림에 추가하여 성능 데이터를 수집하는 도구를 사용하여 프로그램의 런타임 성능을 분석하는 프로세스에 대해 설명합니다. 프로파일링을 위해 컴파일하는 방법과 사용자가 추가한 성능 카운터가 있는 인텔 FPGA 동적 프로파일러를 사용하여 집단 프로파일링 결과를 해석하는 방법을 보여줍니다. V2 프로파일러가 런타임 프로파일링 결과를 분석하는 데 사용되는 커널 기능 및 실행 파일을 표시하는 방법과 파티션 병목 현상을 식별하고 최적화하는 방법을 보여줍니다. 사용된 예는 글로벌 메모리에 대한 메모리 액세스가 많은 매트릭스 수정 커널이며, 이는 글로벌 메모리와의 통신을 줄이고 설계 효율성을 향상시키기 위해 로컬 메모리를 사용하여 최적화되었습니다.

  • 00:00:00 이 섹션에서 발표자는 프로그램의 런타임 성능 분석에 대해 설명합니다. FPGA 비트 스트림에 프로파일링 계측기 레지스터를 추가하여 도구를 사용하여 성능 데이터를 수집하는 방법을 설명합니다. 인텔 FPGA 동적 프로파일러는 커널 성능 데이터를 수집하기 위해 사용자가 추가한 성능 카운터와 함께 사용됩니다. 성능 데이터는 실행 종료 시 profile.mall이라는 파일에 저장되며, Intel v2 프로파일러가 파일을 읽을 수 있도록 json 파일이 생성됩니다. Intel Retune 툴킷에 결과 폴더를 로드할 때 두 파일이 모두 필요합니다. 데이터를 v2로 로드할 때 디렉터리에서 데이터를 가져오는 것이 중요합니다.

  • 00:05:00 이 섹션에서 발표자는 프로파일링을 위해 컴파일하는 방법과 집단 프로파일링 결과를 해석하는 방법을 시연합니다. V2 프로파일러가 런타임 프로파일링 결과를 분석하는 데 사용되는 커널 기능 및 실행 파일을 표시하는 방법을 보여줍니다. 패널에는 메모리 작동 기능 및 루프 작동, 해당 시간, 정지 비율, 점유, 유휴 시간, 활동 비율, 데이터 전송 크기 및 평균 대역폭이 표시됩니다. 패널의 하단 부분은 FPGA 사용률과 글로벌 메모리 대역폭 점유에 대한 기타 메트릭을 보다 자세히 보여줍니다. 자세한 통계를 보여줌으로써 설계자는 개별 커널과 해당 기능을 이해할 수 있으므로 설계를 최적화하고 개선하는 데 도움이 됩니다.

  • 00:10:00 비디오의 이 섹션에서 연사는 파티션 병목 현상을 식별하고 최적화하는 방법에 대해 설명합니다. 사용된 예는 전역 메모리에 대한 메모리 액세스가 많은 매트릭스 수정 커널로, 결과적으로 15.57GB의 데이터 전송이 발생합니다. 커널의 설계는 메모리 결합이며, 솔루션은 로컬 메모리를 사용하여 메모리 액세스를 최적화하여 글로벌 메모리와의 통신을 줄이고 설계 효율성을 향상시키는 것입니다. 이 최적화는 다음 강의에서 논의될 것입니다.
DPC++ FPGA Design Analysis (II): Runtime Profiling
DPC++ FPGA Design Analysis (II): Runtime Profiling
  • 2021.04.07
  • www.youtube.com
This video introduces DPC++ profiling and how to analyze run-time profiling reports using Intel VTune tool.
 

EECE.6540 이기종 컴퓨팅(University of Massachusetts Lowell) - 49. OpenCL 예제



49. OpenCL 예제(I)

YouTube 비디오 "OpenCL 예제(I)"는 C 프로그래밍에서 중첩 루프를 사용하여 행렬 곱셈을 구현하고 OpenCL 커널로 구현하는 방법을 다룹니다. 강사는 행렬에서 결과 요소의 내적 계산을 위해 두 수준의 중첩 루프를 사용하는 방법과 행렬 C의 각 출력 요소가 OpenCL에서 별도의 작업 항목으로 처리되는 방법을 설명합니다. 이 비디오는 또한 실행을 위해 OpenCL 커널을 준비하고 장치에서 호스트로 결과 매트릭스를 검색하는 데 필요한 단계와 작업 그룹 크기를 설정하고 수정된 커널 인수로 커널을 실행하는 단계를 다룹니다. 또한 행렬 곱셈에 대한 샘플 코드가 제공되며 발표자는 Mac OS에서 장치 및 플랫폼 ID를 얻고 다른 플랫폼에서 프로그램 개체를 생성하는 프로세스를 시연합니다. 마지막으로 비디오는 버퍼 관리, 호스트 측에 할당된 리소스 및 사용된 OpenCL 리소스 추적을 설명하고 간단한 곱셈 커널 예제를 제공합니다.

이 비디오는 행렬 곱셈, 이미지 회전 및 이미지 필터링을 포함하여 OpenCL을 사용하는 다양한 예제를 다룹니다. 이미지 회전의 경우 스피커는 입력 분해를 사용하여 문제를 분해하는 방법을 설명하고 각 픽셀의 원래 위치와 새 위치를 식별하는 데 사용되는 커널 기능을 시연합니다. 이미지 필터링의 경우 연사는 장치 측에서 이미지 객체를 생성하는 개념과 OpenCL 샘플러를 사용하여 이미지에 액세스하는 방법을 정의하는 방법에 대해 논의합니다. 또한 두 개의 중첩된 for 루프가 있는 이미지 컨볼루션 함수의 샘플 구현을 제공합니다. 비디오는 OpenCL을 사용하여 이미지에 컨볼루션 필터를 수행하고 결과를 확인하는 데모로 끝납니다.

  • 00:00:00 이 섹션에서 강사는 고전적인 컴퓨팅 예제인 행렬 곱셈을 소개하고 C 프로그래밍에서 중첩 루프로 구현하는 방법을 설명합니다. 또한 행렬 A의 행과 행렬 B의 열의 곱인 행렬의 결과 요소에 대한 내적 계산에 대해서도 설명합니다. 강의에서는 두 수준의 중첩 루프가 독립적으로 실행될 수 있고 수행될 수 있음을 설명합니다. 무작위 방식으로.

  • 00:05:00 이 섹션에서는 작업 항목의 개념과 OpenCL 커널에서 행렬 곱셈을 구현하는 데 적용할 수 있는 방법에 대해 설명합니다. 행렬 C의 각 출력 요소는 별도의 작업 항목으로 처리되며 FPGA 또는 GPU 처리 요소의 도움으로 2차원 범위의 작업 항목을 하드웨어 구현의 다른 for 루프에 매핑할 수 있습니다. 행렬 곱셈을 구현하기 위해 인수 목록이 있는 "단순 곱하기"라는 커널 함수가 정의되며, 여기에는 필요한 모든 입력 행렬과 차원이 필요합니다. 커널 함수의 본문은 전역 ID를 사용하여 작업 항목의 2차원 위치를 계산하고 합계를 초기화하여 행렬 C의 결과 요소를 계산합니다.

  • 00:10:00 이 섹션에서는 발표자가 OpenCL 프로그래밍 프레임워크를 사용하여 행렬 곱셈을 위한 커널 기능을 설명합니다. 커널 함수는 내적 연산과 for 루프를 사용하여 a의 행 벡터와 B의 열 벡터 요소를 반복합니다. 2차원 입력 행렬의 인덱스는 행 번호와 열 번호를 사용하여 계산됩니다. 행 벡터와 열 벡터의 오른쪽 요소. 내적이 계산되면 결과 요소가 C의 해당 요소에 할당됩니다. 플랫폼에 따라 다르며 플랫폼에서 사용 가능한 리소스 및 중요한 매개변수를 이해하는 계산 환경도 논의됩니다.

  • 00:15:00 이 섹션에서 발표자는 OpenCL 커널이 작동하도록 준비하는 데 필요한 단계를 간략하게 설명합니다. 먼저 컨텍스트를 만들고 커널을 인스턴스화하는 명령 대기열을 만듭니다. 그런 다음 호스트 측에 버퍼를 할당하고 호스트 메모리에서 장치 메모리로 데이터를 복사하고 커널을 디스패치하여 입력 데이터를 준비합니다. 그런 다음 프로그램은 장치 메모리를 읽어 결과를 수집하기 위해 커널 완료를 기다립니다. openCL 응용 프로그램에는 플랫폼 계층과 런타임 계층의 두 계층이 있으며 커널 프로그램은 FPGA 또는 GPU와 같은 가속기 장치에서 실행할 수 있는 바이너리로 컴파일되어야 합니다. 이러한 단계는 장치에 따라 다르며 PG 바이너리 컴파일에는 몇 시간이 걸릴 수 있지만 GPU 컴파일은 종종 빠릅니다.

  • 00:20:00 이 섹션에서는 비디오에서 OpenCL 프로그래밍을 위한 환경을 설정하는 방법에 대해 설명합니다. 첫 번째 단계는 시스템에서 사용 가능한 플랫폼 수를 반환하는 CL 플랫폼 ID 가져오기 기능으로 수행되는 플랫폼 ID 가져오기와 관련됩니다. 다음으로 비디오는 사용자 선호도에 따라 플랫폼 내에서 특정 장치를 얻는 방법과 명령 대기열 및 버퍼와 같은 모든 리소스의 인클로저인 OpenCL 컨텍스트를 만드는 방법을 설명합니다. 자습서에서는 반환 값을 확인하여 작업의 성공을 보장할 것을 권장합니다.

  • 00:25:00 이 섹션에서는 버퍼를 선언하고 OpenCL API 함수를 사용하여 입력 행렬 B 및 C와 출력 행렬 C에서 데이터를 만들고 이동하는 방법을 비디오에서 설명합니다. 그들은 행렬 A, B 및 C가 이미 부동 유형 배열로 선언되었다고 가정하고 물리적 메모리의 선형 주소 공간에 데이터를 저장합니다. 비디오는 CL 버퍼 생성 함수를 사용하여 행렬 A와 B에 대한 버퍼를 선언하는 방법과 CL Inc you write 버퍼 함수를 사용하여 행렬 A와 B의 초기 데이터를 장치에 있는 생성된 버퍼로 복사하는 방법을 보여줍니다. 다음 단계는 장치가 계산 결과를 여기에 쓰기 때문에 CL 메모리 쓰기 전용 버퍼로 선언된 행렬 C를 위한 공간을 할당하는 것입니다.

  • 00:30:00 YouTube 동영상 "OpenCL 예제(I)"의 이 섹션에서 발표자는 장치에서 결과를 검색하고 결과 매트릭스를 버퍼 C에서 호스트로 복사하는 과정을 설명합니다. 컨텍스트, 플래그, 크기, 호스트 포인터 및 반환 값을 포함하여 버퍼를 만들기 위한 다섯 가지 인수에 대한 설명과 함께 API C 정의가 표시됩니다. 그런 다음 발표자는 OpenCL 프로그램의 세 번째 주요 단계인 FPGA 장치에 대한 간단한 컴파일 프로세스를 사용하여 커널 컴파일에 대해 설명합니다. 이 프로세스에는 프로그램을 만들고 빌드하고 소스 코드에서 올바른 커널 기능을 선택하는 작업이 포함됩니다. 마지막으로 발표자는 커널 프로그램을 실행하기 전에 CL 커널 인수 OpenCL API를 사용하여 커널 인수를 초기화하는 방법에 대해 논의합니다.

  • 00:35:00 이 섹션에서 발표자는 커널 인수 초기화, 작업 그룹 크기 설정, 커널 실행 및 OpenCL 프로그램에서 결과를 얻는 프로세스에 대해 설명합니다. 사용자는 'CL 커널 생성' API를 사용하고 실제 값에 대한 포인터를 사용하여 커널 인수의 크기와 값을 지정해야 합니다. 화자는 인수 인덱스를 정확하게 설정하고 복사하여 붙여넣을 때 줄마다 수정하는 것이 중요하다고 강조합니다. 작업 항목 및 작업 그룹 수에 대해 로컬 및 글로벌 작업 그룹 크기를 설정해야 합니다. 마지막으로 결합된 CL 버퍼는 적절한 실행을 위한 동기화 요구 사항을 나타내는 호스트 메모리의 출력 버퍼를 읽는 데 사용됩니다.

  • 00:40:00 이 섹션에서는 발표자가 OpenCL을 사용한 행렬 곱셈의 예를 소개합니다. 행렬 곱셈 예제의 소스 코드는 호스트 측 프로그램, 커널 프로그램 및 프로젝트 컴파일을 돕는 메이크파일을 비롯한 여러 파일로 구성됩니다. 호스트 측 프로그램은 C로 작성되었으며 OpenCL 프레임워크용 표준 라이브러리 및 특정 헤더 파일을 포함합니다. 예제에는 플랫폼 및 장치의 수, 컨텍스트, OpenCL 프로그램 및 OpenCL 커널을 포함하여 변수에 대한 입력 행렬 및 선언이 포함됩니다. 스피커는 또한 커널 소스 코드를 컴파일하는 방법을 설명하고 입력 행렬의 크기와 결과 출력 행렬을 설명합니다.

  • 00:45:00 비디오의 이 섹션에서 발표자는 Mac OS에서 OpenCL용 장치 및 플랫폼 ID를 얻는 방법을 시연합니다. 플랫폼 ID 가져오기 및 명령 대기열 생성과 같은 다양한 OpenCL 기능을 호출하여 화자는 OpenCL 컨텍스트를 생성하고 프로그램을 컴파일합니다. 그들은 또한 표시된 코드가 Mac OS와 OpenCL SDK를 모두 지원하며 다른 플랫폼에서 실행될 경우 오류를 보고할 것이라고 설명합니다.

  • 00:50:00 이 섹션에서 비디오는 다양한 플랫폼에서 OpenCL을 사용하여 프로그램 개체를 만드는 방법을 보여줍니다. Mac OS에서 프로그램 개체는 커널 소스 코드 파일에서 생성되는 반면 Altera FPGA OpenCL SDK에서는 컴파일을 통해 생성된 바이너리 파일에서 생성됩니다. 프로그램 개체가 생성되면 커널 프로그램을 빌드하고 해당 프로그램 개체에서 특정 커널 기능을 선택할 수 있습니다. 이 섹션이 끝나면 프로그램의 다음 섹션에 필요한 개체와 기능이 준비됩니다.

  • 00:55:00 이 섹션에서는 버퍼를 할당하여 매트릭스 결과를 저장하고 CL 버퍼를 사용하여 장치 측에서 버퍼를 생성하는 것을 포함하여 버퍼 관리 프로세스에 대해 설명합니다. 또한 비디오는 특히 FPGA를 사용할 때 성공적인 실행을 보장하기 위해 Q에서 CL의 반환 값과 범위 대령을 확인하는 것의 중요성을 강조합니다. 또한 호스트 측에 할당된 리소스와 사용된 OpenCL 리소스를 출력하여 결과를 확인하는 과정을 설명하고 반복을 통해 내적 연산을 수행하기 위해 7개의 인수를 사용하는 간단한 곱셈 커널 예제를 제공합니다.

  • 01:00:00 비디오의 이 섹션에서 발표자는 OpenCL을 사용하는 두 가지 예를 설명합니다. 첫 번째는 행렬 곱셈입니다. 프로그램은 두 개의 행렬을 처리하고 해당 요소를 곱하여 결과를 세 번째 행렬에 저장합니다. 두 번째 예는 프로그램이 특정 공식에 따라 이미지의 픽셀을 회전시키는 이미지 회전입니다. 이 수식은 각 픽셀의 원래 좌표와 새 좌표 및 회전 각도를 고려합니다.

  • 01:05:00 이 섹션에서 발표자는 입력 분해를 사용하여 이미지 회전 문제를 더 작은 문제로 나누는 방법에 대해 설명합니다. 그들은 이미지의 픽셀 정보가 x 및 y 차원의 독립적인 계산을 통해 새로운 위치로 복사될 것이라고 설명합니다. 작업 그룹은 전역 ID를 사용하여 각 픽셀의 새 위치를 계산하도록 할당됩니다. 연사는 또한 작업 항목 그룹 및 차원을 결정하는 방법과 이 작업을 완료하는 데 필요한 커널 기능에 대해 자세히 설명합니다. 목표는 이미지 회전 계산을 위한 보다 효율적이고 확장 가능한 방법을 만드는 것입니다.

  • 01:10:00 이 섹션에서는 비디오 발표자가 OpenCL을 사용하여 이미지를 회전하는 방법을 설명합니다. 커널 기능은 픽셀의 원래 위치를 식별하고, 회전 매개변수를 사용하여 픽셀의 새 위치를 계산하고, 새 좌표가 원래 이미지 크기 내에 있는지 확인하기 위해 경계 검사를 확인하고, 원래 위치에서 픽셀 정보를 복사하는 데 사용됩니다. 새로운 위치로. 또한 이 코드에는 OpenCL API용 C++ 바인딩과 플랫폼 쿼리, 장치 획득 및 호스트 메모리에서 장치 버퍼로 데이터를 이동하기 위한 버퍼 선언 단계가 포함되어 있습니다. 원본 데이터의 보안을 보장하기 위해 읽기 전용 버퍼도 생성됩니다.

  • 01:15:00 이 섹션에서는 발표자가 OpenCL을 사용하여 이미지 회전을 수행하는 데 필요한 단계를 설명합니다. 먼저 원본 이미지를 이미지 버퍼에 복사해야 합니다. 그런 다음 대상 버퍼를 초기화하고 원본 그림의 크기와 회전 매개 변수를 포함하여 올바른 커널 인수를 설정하여 커널을 컴파일하고 실행합니다. 커널은 전역 작업 그룹 크기와 로컬 작업 그룹 크기로 실행됩니다. 마지막으로 결과는 Q 읽기 버퍼를 사용하여 호스트로 다시 읽혀집니다. 발표자는 또한 헤더 파일, 유틸리티 기능, 플랫폼 및 장치 ID, 명령 대기열, 프로그램 및 커널 개체, 원본 및 회전된 이미지에 대한 입력/출력 버퍼를 포함하는 이미지 회전에 대한 예제 소스 코드를 시연합니다.

  • 01:20:00 이 섹션에서 비디오는 OpenCL을 사용하여 이미지를 회전하는 과정을 다룹니다. 호스트는 BMP 형식의 이미지를 읽고 입력 이미지 버퍼에 저장된 부동 소수점 숫자 배열로 변환합니다. 호스트의 출력 버퍼가 생성되고 난수로 초기화됩니다. 플랫폼은 플랫폼에서 장치를 찾고 컨텍스트 및 명령 대기열을 생성하도록 쿼리됩니다. 프로그램 및 커널 개체가 생성되고 장치 측 버퍼가 생성되어 원본 이미지와 회전된 이미지를 저장합니다. 원본 이미지가 장치 측의 버퍼에 복사되고 커널 인수가 설정됩니다. 커널은 전역 및 로컬 작업 그룹 크기로 인스턴스화하여 실행됩니다. 커널이 성공적으로 실행되었는지 확인하기 위해 반환 값을 확인합니다.

  • 01:25:00 이 섹션에서는 발표자가 OpenCL을 사용한 이미지 회전에 대한 개요를 제공합니다. 커널을 완료한 후 출력 데이터는 장치 측의 전역 메모리에 대한 포인터를 사용하여 호스트로 다시 읽어오고 이미지를 저장하기 위한 호스트 버퍼가 제공됩니다. BMP 포매팅이 프로세스에 포함되며 write BMP float라는 유틸리티 기능을 사용하여 결과를 보여주는 새 BMP 파일을 생성합니다. 이미지 크기 및 회전 매개변수와 함께 대상 및 소스 버퍼 포인터가 전달되는 커널 기능에 대해 자세히 설명합니다. 각 픽셀의 새로운 좌표를 계산하는 공식을 사용하며, 원래 위치에서 새로운 위치로 픽셀 정보를 복사하기 전에 경계 검사를 적용합니다. 이 프로세스는 고양이 이미지를 45도 회전하는 예를 통해 설명됩니다.

  • 01:30:00 이 섹션에서는 발표자가 OpenCL을 사용한 이미지 필터링의 개념을 설명합니다. 그는 3x3 필터를 사용하여 인접 픽셀의 값을 곱하고 합산하여 필터링된 새로운 픽셀 값을 얻는 과정을 설명합니다. 그는 또한 필터를 적용할 인접 픽셀이 적은 경계 근처의 픽셀을 다룰 때 주의해야 한다고 강조합니다. 그런 다음 연사는 OpenCL을 사용하여 원본 이미지에 적용할 수 있는 다양한 유형의 이미지 필터를 시연합니다. 그런 다음 그는 이미지의 모든 픽셀을 통과하는 두 개의 중첩 for 루프와 필터의 요소를 통과하는 세 번째 루프가 있는 이미지 컨볼루션 함수의 샘플 구현을 제시합니다.

  • 01:35:00 이 섹션에서 발표자는 다차원 구조로 유지되고 이미지 데이터 유형에 사용되는 불투명 유형인 OpenGL의 이미지 데이터 구조에 대해 이야기합니다. 정수형이나 포인터형과 달리 영상은 장치의 점을 통해 직접 볼 수 없으며 픽셀 값을 부동 소수점 또는 정수 값으로 지정할 수 있습니다. 장치 측에서 이미지 개체를 생성하면 OpenCL 컴퓨팅 장치가 이미지 개체에 새 픽셀을 읽고 쓸 수 있으며 이미지 데이터 처리 또는 그래픽 프로세서에 특정한 길고 최적화된 명령 시퀀스에 유용합니다. 또한 발표자는 CL Write Image 및 CL Create Buffer와 같은 API를 사용하여 이미지 및 필터 데이터를 장치에 복사하여 소스 이미지 버퍼, 출력 이미지 개체 및 필터를 만드는 방법을 설명합니다.

  • 01:40:00 이 섹션에서 발표자는 이미지에 액세스하는 방법을 설명하는 데 사용되는 개체인 OpenCL 샘플러의 개념을 소개합니다. 샘플러는 컨텍스트를 인수로 사용하고 좌표를 정규화할지 여부를 정의하는 API 함수를 사용하여 생성됩니다. 범위를 벗어날 때 이미지 좌표를 처리하는 방법을 처리하는 주소 지정 모드도 정의됩니다. 필터링 모드는 좌표가 픽셀 사이에 있을 때 적용해야 하는 필터를 지정합니다. 입력 및 출력 2D 이미지 개체, 필터 값을 저장하는 상수 부동 필터 및 샘플러 개체를 사용하는 convolution이라는 커널 함수도 도입되었습니다. 커널 함수는 이미지 객체에서 데이터 항목을 읽고 이미지 데이터에 대한 산술을 수행하기 위해 4개의 부동 소수점 숫자로 구성된 벡터를 반환합니다.

  • 01:45:00 이 섹션에서 발표자는 4요소 부동 소수점 벡터를 사용하여 부동 소수점 벡터에 대한 연산을 수행하는 방법을 설명합니다. 필터 인덱스 초기화, 2개 요소 좌표에 대한 변수 선언, 필터 행 반복 및 2차원 좌표 계산 프로세스를 거칩니다. 이미지 읽기 F 함수를 사용하여 이미지 개체에서 픽셀을 읽고 필터 픽셀 값과 곱하고 업데이트된 값을 출력 이미지에 저장합니다. 마지막으로 이미지를 읽은 CL 잉크를 사용하여 이미지를 다시 읽습니다.

  • 01:50:00 이 섹션에서는 이미지 처리에 사용할 필터를 제공하는 OpenCL 예제(I)의 코드에 대해 설명합니다. 프로그램은 각 유형의 필터에 서로 다른 크기와 값을 할당하고 헬퍼 함수를 사용하여 필터 값을 초기화하고 파일에서 BMP 이미지 데이터를 읽습니다. 플랫폼 및 장치 검색은 입력 및 출력 이미지와 필터 버퍼를 생성하기 전에 수행됩니다. 일단 초기화되면 샘플러는 적절한 필터 매개변수로 커널을 실행하기 전에 경계를 벗어나는 픽셀을 처리하는 방법을 설정합니다. 전역 크기는 이미지의 열과 행 수로 설정됩니다.

  • 01:55:00 이 섹션에서 발표자는 OpenCL을 사용하여 이미지에 컨볼루션 필터를 수행하는 예를 보여줍니다. 이 프로세스에는 전체 이미지를 처리하고 한 데이터 차원의 그룹에서 로컬 크기 8 x 8 작업 항목을 사용하는 커널 설정이 포함됩니다. 출력 이미지는 장치 측에 저장되며 CL 읽기 이미지를 사용하여 호스트로 다시 읽을 수 있습니다. 그런 다음 호스트 측에서 필터를 수행하여 생성된 필터링된 참조 이미지와 결과를 비교합니다. 두 이미지는 시각적으로 동일하여 결과를 확인합니다. 마지막으로 호스트와 장치 측의 리소스가 해제됩니다.
OpenCL Examples (I)
OpenCL Examples (I)
  • 2017.09.29
  • www.youtube.com
Lectures on OpenCL Examples (I)
 

대규모 병렬 지원 벡터 분류를 위한 SYCL, OpenCL, CUDA 및 OpenMP 비교( WOCL / SYCLcon 2022 )



대규모 병렬 지원 벡터 분류를 위한 SYCL, OpenCL, CUDA 및 OpenMP 비교

이 비디오는 대규모 병렬 지원 벡터 머신 분류를 위해 서로 다른 하드웨어 플랫폼에서 SYCL, OpenCL, CUDA 및 OpenMP의 성능을 비교합니다. 연사는 다중 GPU 실행을 지원하지만 이진 분류 및 조밀한 계산만 지원하는 Parallel Fibonacci라는 구현으로 행렬-벡터 곱셈의 병렬화에 대해 설명합니다. 테스트에 사용된 하드웨어에는 Nvidia A100 및 RTX 380 GPU, AMD Radeon Pro 7 GPU 및 Intel Core E9-10-09020X CPU가 포함됩니다. 결과에 따르면 CUDA는 Nvidia GPU에서 가장 빠른 백엔드인 반면 OpenCL은 CPU에서 가장 빠른 백엔드입니다. SYCL은 사용자 친화적인 반면 Hipsicle은 저렴한 사용을 위해 DPC++ 및 OpenCL보다 빠릅니다. 또한 발표자는 FPGA의 성능 조사, MPI를 통한 분산 시스템 지원 추가, 혼합 정밀 계산 및 NVIDIA의 텐서 코어와 같은 특수 기계 학습 하드웨어 사용과 같은 향후 작업에 대해 논의합니다.

  • 00:00:00 비디오의 이 섹션에서 연사는 SYCL, OpenCL, CUDA 및 OpenMP를 포함한 다양한 병렬 프로그래밍 언어의 비교를 소개하며, 대규모 병렬 지원 벡터 머신(SVM) 분류에 대한 사용에 중점을 둡니다. 멀티 벤더 하드웨어. 연사는 서포트 벡터 머신을 소개하고 이진 분류를 위한 감독 머신 러닝에서의 용도를 설명합니다. 그러나 기존의 서포트 벡터 머신은 볼록 2차 계획법 문제를 순차적으로 풀어야 하는 문제점이 있다. 이 문제를 해결하기 위해 화자는 최소 제곱 지원 벡터 머신 공식을 사용하여 문제를 선형 방정식 시스템으로 줄입니다. 연사는 Parallel Fibonacci라고 하는 라이브러리의 구현 세부 사항에 대해서도 논의합니다.

  • 00:05:00 이 섹션에서는 화자가 최신 C++로 작성된 PLSS VM에 대해 설명합니다. 단일 템플릿 매개변수를 사용하여 단정밀도 부동 소수점 유형과 배정밀도 부동 소수점 유형 간에 전환할 수 있습니다. 발표자는 또한 CG 알고리즘에서 행렬-벡터 곱셈의 병렬화에 대해 이야기하는데, 이는 알고리즘에서 계산적으로 가장 광범위한 부분이기 때문입니다. 그들은 네 가지 백엔드(OpenMP, CUDA, OpenCL, Signal)를 구현하고 다중 GPU 실행을 지원했습니다. 그러나 현재 이진 분류 및 조밀한 계산만 지원되며 기본적으로 다중 클래스 분류를 지원하지 않습니다. 또한 OpenMP 백엔드는 다른 구현과 크게 다르며 GPU 백엔드(CUDA, OpenCL 및 SYCL)의 경우 하나의 CG를 구현하고 이를 3개의 백엔드 모두에 사용하여 코드 중복 및 잠재적인 버그를 줄입니다.

  • 00:10:00 비디오의 이 섹션에서는 사용된 하드웨어와 테스트 방법론을 설명합니다. 초점은 Nvidia A100 및 RTX 380 GPU, AMD Radeon Pro 7 GPU 및 Intel Core E9-10-09020X CPU의 네 가지 플랫폼에 있으며 이에 대한 결과가 논의됩니다. Nvidia A100 및 RTX 380 GPU에 대한 N-포인트 스케일링과 AMD Radeon Pro 7 GPU에 대한 데이터 포인트 및 기능 스케일링을 조사한 결과, 두 NVIDIA의 데이터 포인트 수와 유사한 방식으로 런타임이 증가하는 것으로 나타났습니다. GPU. 이 중 Cuda는 OpenCL 다음으로 가장 빠른 백엔드로 밝혀졌으며 N-사이트 컴퓨팅으로 생성된 루프라인 모델은 계층적 커널 공식이 ND 범위 상대보다 메모리에 더 의존하는 경향이 있음을 보여주었습니다. 전반적으로 AMD의 런타임은 NVIDIA의 런타임보다 많습니다.

  • 00:15:00 이 섹션에서는 비디오가 서로 다른 하드웨어 플랫폼에서 SYCL, OpenCL, CUDA 및 OpenMP의 성능 비교에 대해 설명합니다. Nvidia GPU는 실행 시간이 증가하지 않았으며 가장 빠른 백엔드는 OpenCL이었습니다. 그러나 AMD GPU는 블로킹 크기가 미세 조정되지 않았기 때문에 예상보다 성능이 떨어졌습니다. Intel Core E9 CPU는 Nvidia GPU와 유사한 동작을 보였고 OpenCL이 가장 빠른 백엔드였습니다. DPC++는 OpenMP가 더 빠른 소규모 데이터 세트를 제외하고 가장 빠릅니다. DPC++ 계층적 커널 공식은 모든 하드웨어 플랫폼에서 인디 범위의 커널 공식보다 느려 최적화 가능성을 나타냅니다. 마지막으로 OpenCL 치트 컴파일 오버헤드는 Nvidia GPU에서 가장 빠르고 Intel Iris Xe Max GPU에서 가장 느렸지만 내장 캐싱을 사용하면 후속 실행에서 오버헤드를 줄일 수 있습니다.

  • 00:20:00 대본의 이 섹션에서 발표자는 NVIDIA, AMD 및 Intel과 같은 다양한 벤더의 하드웨어를 대상으로 하는 다양한 병렬 프로그래밍 언어 및 프레임워크에 대한 테스트 결과에 대해 논의합니다. 그들은 NVIDIA GPU만 대상으로 해야 하는 경우 CUDA가 테스트에서 가장 빠른 성능을 보였기 때문에 여전히 최선의 선택이라고 지적합니다. CPU만 대상으로 하는 경우에는 OpenMP가 좋은 출발점이지만 테스트에서 최고의 성능을 보여주지는 못했습니다. 다른 공급업체 하드웨어를 대상으로 해야 하는 경우 OpenCL 또는 SYCL이 권장되지만 처음부터 새 알고리즘을 구현하는 경우 SYCL이 더 사용자 친화적이기 때문에 더 좋습니다. Hipsicle은 GPU에서 DPC++ 및 OpenCL보다 저렴하고 빠르게 사용할 수 있는 최상의 옵션이며 향후 OpenMP 백엔드를 최적화하고 ComputeCPP와 같은 다른 신호 구현을 조사할 계획입니다.

  • 00:25:00 이 섹션에서 연사는 다양한 병렬 컴퓨팅 프레임워크를 사용하여 지원 벡터 분류 구현에 대한 향후 작업 및 개선 사항에 대해 논의하면서 비디오를 마무리합니다. 그들은 FPGA와 같은 다양한 하드웨어의 성능을 조사하고, MPI를 통해 분산 시스템에 대한 지원을 추가하고, 혼합 정밀 계산 및 NVIDIA의 텐서 코어와 같은 특수 머신 러닝 하드웨어 사용의 영향을 탐색할 계획입니다. 그들은 이러한 개선 사항이 더 큰 데이터 세트에서 구현 속도와 효율성을 높일 것이라고 믿습니다.
2022 Conference Program
2022 Conference Program
  • 2022.05.22
  • Tim Lewis
  • www.iwocl.org
OpenCL allows a programmer to offload a sequence of commands to a heterogeneous accelerator, such as a GPU. For embedded devices the overhead of building a command sequence can be expensive, and many applications require the same pipeline of commands to be repeatedly enqueued in a loop. For example, in computer vision where the same command...
 

OpenCL을 넘어서는 SYCL: hipSYCL의 아키텍처, 현재 상태 및 향후 방향 ( IWOCL / SYCLcon 2020 )



OpenCL을 넘어서는 SYCL: hipSYCL의 아키텍처, 현재 상태 및 미래 방향

hipSYCL 프로젝트는 OpenCL 대신 HIP 프로그래밍 모델을 통해 GPU를 대상으로 하는 SYCL의 오픈 소스 구현입니다. 컴파일러 구성 요소, 낫 인터페이스 및 보안 런타임으로 구성됩니다. 보안 컴파일러는 커널을 식별하고 로컬 메모리 할당을 처리하며 신호 메커니즘을 구현합니다. 디스패치 기능은 사용자가 제공한 커널을 기반으로 특정 항목을 생성하며 최적화된 기능은 rock prim으로 정의할 수 있습니다. 향후 방향은 여러 백엔드를 허용하고 정적 컴파일 모델에 대한 제한을 제거하는 것입니다. 작업 제출 모델은 더 높은 작업 처리량을 위해 배치 제출로 전환되고 있으며, hipSYCL은 소스 코드 수준에서 상호 운용 가능하여 hip 및 CUDA와 혼합 및 일치가 가능합니다. 오픈 소스 프로젝트로서 기여자를 환영합니다.

  • 00:00:00 이 섹션에서 발표자는 OpenCL을 사용하는 대신 HIP 프로그래밍 모델을 통해 GPU를 직접 대상으로 하는 오픈 소스 SYCL 구현인 hipSYCL 프로젝트의 동기에 대해 논의합니다. 목표는 다른 프로그래밍 모델에서 발생할 수 있는 채택 마찰을 피하면서 코드를 최적화하고 벤더 제공 프로파일러 및 디버거를 더 쉽게 사용할 수 있도록 하는 것입니다. 발표자는 또한 hipSYCL을 SYCL 및 CUDA 상호 운용성에서 사용할 수 있는 다른 솔루션과 비교하여 hipSYCL을 HIP 프로그래밍 모델을 사용하기 때문에 CUDA 상호 운용성 끝 부분에 배치합니다.

  • 00:05:00 이 섹션에서는 동영상에서 hipSYCL의 작동 방식과 세 가지 주요 구성 요소인 컴파일러 구성 요소, 낫 인터페이스 및 보안 런타임에 대해 설명합니다. 컴파일러 구성 요소는 컴파일러가 CUDA와 낫을 모두 이해할 수 있도록 하여 소스 코드 수준에서 상호 운용성을 가질 수 있도록 합니다. 보안 런타임은 데이터 관리 및 작업 예약을 관리하는 반면, 낫 인터페이스는 낫 네임스페이스의 클래스와 함수로 구성됩니다. 또한 비디오는 낫이 가능한 모든 사용 사례를 포괄하는 구현을 구축하는 데 사용할 수 있는 유연한 솔루션이라고 언급합니다. 가속기를 대상으로 하려면 커널을 식별하고 가속기를 위해 컴파일하는 전용 컴파일러 구성 요소가 필요합니다.

  • 00:10:00 비디오의 이 섹션에서 발표자는 hipSYCL의 보안 컴파일러가 어떻게 작동하는지 설명합니다. 그들은 컴파일러가 커널을 식별하고 어떤 코드를 장치로 내보내야 하는지 결정한 다음 커널이 로컬 메모리에 할당되는 방식을 처리해야 한다고 설명합니다. 낫 특유의 진단 기능도 향후 개발의 우선순위로 언급된다. 발표자는 최신 컴파일러 구성 요소를 사용하는 것이 Cycle CC라는 컴파일러 래퍼를 사용하여 상대적으로 간단하다고 설명합니다. 이 래퍼는 컴파일러의 올바른 호출 및 연결과 포함 경로를 설정하는 방법과 같은 관련된 복잡성을 숨깁니다. 그들은 커널을 호출하는 데 약간의 속임수가 필요한 방법과 수행 방법을 설명합니다. 또한 현재 코루틴 및 Hip 이벤트를 사용하는 신호 메커니즘은 동적 비순차 처리를 위해 hipSYCL에서 사용되지만 이의 단점에 대해 설명합니다.

  • 00:15:00 이 섹션에서 발표자는 디스패치 기능을 사용하여 사용자 제공 커널을 기반으로 특정 항목을 생성하는 방법과 사용자 제공 커널을 사용하여 디스패치 기능을 인스턴스화하여 병렬 for 및 보안을 구현하는 방법에 대해 설명합니다. 핵심. 그러나 처음에는 모든 코드가 호스트 코드로 전달되며 여기서 사용자 제공 커널은 호스트 람다이며 직접 호출할 수 없으므로 적절한 클릭으로만 대체되는 HIP 커널이라는 더미 속성을 추가합니다. 초기 구문 분석이 완료되고 hipSYCL 플러그인이 인계되면 속성. 그들은 hipSYCL 및 CUDA 모두에 대해 우수한 메모리 성능을 달성하고 hipSYCL을 사용하여 소스 코드 수준에서 hip 및 CUDA 상호 운용성을 달성할 수 있습니다.

  • 00:20:00 이 섹션에서 발표자는 엡실론과 함께 rock prim을 사용하여 최적화된 축소를 구현하는 방법에 대해 설명합니다. 그들은 매크로 zip 보안 플랫폼 cuda 또는 hips a good platform rockem으로 최적화된 기능을 정의할 것을 제안합니다. 이는 호스트 및 장치로 표시됩니다. 대상 플랫폼용으로 컴파일하는 경우 최적화된 함수가 호출되고 그렇지 않은 경우 대체 함수가 호출됩니다. 발표자는 rock prim과 같은 공급업체 최적화 라이브러리가 대상 하드웨어에 대한 더 많은 지식을 가지고 있기 때문에 더 빠른 성능을 달성하고, hipSYCL이 여전히 사전 적합성이며 이미지 및 개방형 상태 상호 운용성과 같은 몇 가지 기능이 누락되어 있지만 여전히 실제로 사용할 수 있다고 설명합니다. -세계 응용 프로그램. 그러나 순수한 라이브러리 주기 구현의 문제로 인해 CPU 팩에서 정렬된 병렬 낙하가 느립니다.

  • 00:25:00 이 섹션에서 발표자는 기본 병렬 형식 또는 계층적 병렬 형식을 사용할 때와 CPU에서 hipSYCL과 함께 nd 범위 병렬 형식을 사용할 때의 성능 차이에 대해 논의합니다. 후자는 각 작업 그룹에 있는 작업 항목만큼 많은 위협을 시작해야 하기 때문에 막대한 성능 손실을 초래합니다. 그런 다음 스피커는 임의의 백엔드를 동시에 활성화하고 정적 컴파일 모델과 관련된 제한을 제거할 수 있는 새로운 런타임을 생성하는 hipSYCL의 향후 방향에 대해 이야기합니다. 그들은 또한 하드웨어 사용률을 최적화하기 위해 n개의 순환이 M 백엔드 대기열에 대한 매핑을 사용하는 종단 간 매핑으로 전환하고 있습니다. 또한 더 쉬운 유지 관리 및 실험을 위해 새로운 런타임과 기존 SYCL 인터페이스 간에 엄격하게 분리될 것입니다.

  • 00:30:00 이 섹션에서 발표자는 hipSYCL의 작업 제출 모델에 대한 개선 사항에 대해 논의합니다. 그들은 신호 기반 제출 모델에서 배치 제출 모델로 전환하고 있습니다. 여기서 작업이 완료되었음을 런타임에 알리는 신호는 작업 배치당 한 번만 발생하므로 더 높은 작업 처리량이 가능합니다. 발표자는 오퍼레이션이 제출되고 데크 빌더가 이를 수집하고 주문하는 과정을 설명합니다. 그런 다음 데크 스케줄러는 작업에 실행 큐를 할당하고, 그런 다음 백엔드 실행기로 이동하여 커널을 실행하고 어떤 동기화 작업이 필요한지 결정합니다. 이 구성의 예상 비용은 데크 스케줄러로 돌아가서 추가로 최적화하거나 작업을 있는 그대로 제출합니다. 발표자는 패키지 저장소 및 설치 스크립트를 통해 hipSYCL을 얻는 방법에 대한 정보도 제공합니다.

  • 00:35:00 이 섹션에서는 hipSYCL이 CPU, 비디오 GPU 및 AMD GPU용 SICL 구현이라고 설명합니다. 낮은 수준의 벤더 API인 hip 및 CUDA 위에 구축되어 소스 코드 수준에서 상호 운용이 가능합니다. 이를 통해 개발자는 최신 저수준 하드웨어 최적화 또는 공급업체 최적화 라이브러리에 액세스해야 하는 다양한 HPC 및 기타 사용 사례에 적합하도록 최신 기술 및 CUDA를 혼합하고 일치시킬 수 있습니다. 또한 특정 하드웨어에 대해 고도로 최적화된 코드 경로를 생성할 수 있으며 커널 성능은 일반 힙 또는 CUDA와 동등할 것으로 예상됩니다. 오픈 소스 프로젝트로서 기여자는 언제나 환영하며 관심 있는 개인은 GitHub 페이지에서 이에 대해 자세히 알아볼 수 있습니다.
SYCL beyond OpenCL: The architecture, current state and future direction of hipSYCL
SYCL beyond OpenCL: The architecture, current state and future direction of hipSYCL
  • 2020.04.28
  • www.youtube.com
This video was presented at the online version of IWOCL / SYCLcon 2020.Authors: Aksel Alpay and Vincent Heuveline (Heidelberg University) Additional Informat...
 

libclcxx를 사용하여 OpenCL 커널에서 더 풍부한 C++에 도달( WOCL / SYCLcon 2022 )



libclcxx를 사용하여 OpenCL 커널에서 훨씬 더 풍부한 C++에 도달

이 비디오는 libclcxx를 사용하여 C++ 라이브러리를 오픈 소스 커널 개발에 통합하는 방법에 대해 설명합니다. 이 프로젝트는 C++의 메타 프로그래밍을 위한 필수 라이브러리인 유형 특성을 개발자에게 더 많은 C++ 기능을 노출한다는 목표와 통합합니다. 비디오는 유형 특성 라이브러리가 주소 공간 및 벡터 유형을 조작하는 기능을 통해 OpenCL 커널의 성능을 최적화할 수 있는 방법을 보여줍니다. 이 비디오는 개발자가 라이브러리를 실험하고 C++와의 최대 호환성을 확보하면서 개발 주기를 줄이는 데 기여하도록 권장합니다. 라이브러리는 개발자가 새로운 기능을 쉽게 탐색할 수 있도록 C++ 참조 페이지와 유사한 스타일로 산소 문서를 제공합니다.

  • 00:00:00 이 섹션에서는 Anastasia의 Stulova가 오픈 소스 커널 개발에서 C++ 라이브러리를 사용할 수 있도록 하기 위해 lipclcxx를 사용하는 방법에 대해 설명합니다. OpenCL용 C++ 커널 언어에는 C++ 기능이 있지만 라이브러리 지원이 부족하므로 제시된 제한 사항을 해결하는 것이 중요합니다. 그 결과 오픈 소스 커널 개발자에게 더 많은 C++ 기능을 노출한다는 목표로 lipcxcxx를 통합하는 Leap clcxx 프로젝트가 만들어졌습니다. 또한 Tulva는 typetraits가 C++에서 완전한 메타 프로그래밍을 용이하게 하는 필수 라이브러리이며 무엇보다도 열린 셀 벡터 유형에 대한 새로운 특성을 추가하면서 기존 특성에 대한 특수화를 제공하기 위해 네임스페이스 std를 확장한다고 주장합니다. 새 라이브러리는 개발자가 새 기능을 쉽게 탐색할 수 있도록 C++ 참조 페이지와 유사한 스타일로 산소 문서를 제공합니다.

  • 00:05:00 이 섹션에서 비디오는 특히 주소 공간 및 벡터 거래와 관련하여 유형 특성 라이브러리를 사용하여 OpenCL 커널의 성능을 향상시킬 수 있는 방법에 대해 설명합니다. 비디오는 라이브러리를 사용하여 다양한 포인터 유형에 대한 템플릿 함수를 만드는 방법과 유형에서 주소 공간을 제거하여 OpenCL 환경에서 문제를 해결하는 방법을 보여주는 예제를 제공합니다. 또한 비디오는 벡터 크기 거래를 포함하여 계산을 보다 효율적으로 만드는 방법을 보여주고 감소 알고리즘 구현을 벡터 유형에 적용할 수 있는 방법을 강조합니다. 전반적으로 OpenCL 커널에서 유형 교환을 사용하면 훨씬 더 풍부한 C++ 프로그래밍이 가능합니다.

  • 00:10:00 이 섹션에서 발표자는 벡터 크기를 조건으로 사용하여 OpenCL 커널에서 알람 추가 기능을 정의하는 방법을 설명합니다. 그들은 다른 벡터 크기에 대해 다른 구현이 선택되고 전달된 유형이 벡터 유형이 아닌 경우 버퍼에서 하나의 항목이 반환됨을 명확히 합니다. 연사는 또한 개발 주기를 줄이기 위해 C++와의 최대 호환성을 실험하고 기여하고 획득하도록 개발자를 초대합니다. 누락된 기능이나 버그에 대한 피드백을 요청하고 프로젝트 페이지의 기존 문제에 대한 토론에 참여하도록 권장합니다.
Reaching Even Richer C++ in OpenCL Kernels with use of libclcxx
Reaching Even Richer C++ in OpenCL Kernels with use of libclcxx
  • 2022.05.22
  • www.youtube.com
Presented at: IWOCL / SYCLcon 2022.Additional Information and Slides: https://www.iwocl.org/iwocl-2022/programIWOCL NewsletterSignup to receive regular updat...
 

SYCL: 미래는 개방적이고 병렬적이며 이질적입니다(Core C++ 2022 )



SYCL: 미래는 개방적이고 병렬적이며 이질적입니다.

SYCL 프로그래밍에 관한 이 비디오에서 연사는 생산성을 높이고 더 많은 개발자를 끌어들이기 위해 추상화 수준을 높여야 할 필요성을 강조합니다. 복잡한 모델에는 가속기 시스템이 충족하는 향상된 컴퓨팅 성능이 필요하기 때문입니다. 장치가 CPU, GPU 및 기타 장치에서 작동할 수 있으므로 소프트웨어 이식성과 OneAPI의 중요성이 강조됩니다. 개방형, 병렬 및 이기종 프로그래밍 모델인 SYCL의 이점에 대해서도 논의하며 발표자는 코드를 최적화하고 성능을 개선하는 데 사용할 수 있는 수많은 온라인 리소스와 도구를 강조합니다. 발표자는 시청자에게 리소스 및 지원을 위해 oneapi.io 및 해당 YouTube 채널을 방문하도록 권장합니다.

  • 00:00:00 이 섹션에서 연사는 생산성을 높이고 더 많은 개발자를 유치하기 위해 추상화 수준을 높여야 할 필요성에 대해 논의합니다. 모델이 복잡해짐에 따라 컴퓨팅 성능에 대한 수요가 급격히 증가합니다. 발표자는 어셈블리 또는 Cuda 개발자와 같은 하위 수준의 전문가를 찾고 고용하는 데 어려움을 나타내는 닌자 갭을 언급합니다. 추상화 수준을 높이면 성능이 떨어지기 때문에 점점 늘어나는 컴퓨팅 파워 수요를 충족시키기 위해 GPU, GAUDI와 같은 AI 가속기가 필요합니다.

  • 00:05:00 이 섹션에서 발표자는 가장 빠른 성능을 달성하기 위한 가속기의 필요성에 대해 논의하지만 하나의 가속기로는 모든 응용 분야를 다루기에 충분하지 않다는 점에 주목합니다. CPU와 ASIC과 같은 가속기 및 CPU와 같은 가속기를 결합한 이기종 시스템이 필요합니다. 발표자는 소프트웨어 이식성의 중요성과 사용되는 하드웨어에 관계없이 각 플랫폼이나 운영 체제에 대해 다시 코딩, 재컴파일 또는 재구축할 필요 없이 모든 기계나 장치에서 코드를 실행할 수 있는 능력을 강조합니다. OneAPI는 소프트웨어 스택을 간소화하고 라이브러리와 도구를 통합하여 개방적이고 무료이며 장치 간 소프트웨어 이식성을 보장하기 위한 업계의 노력입니다. 즉, 소프트웨어 스택이 CPU, GPU 및 기타 장치에서 작동할 수 있습니다. OneAPI는 시작하는 데 필요한 모든 것이 포함된 기본 툴킷을 제공합니다.

  • 00:10:00 이 섹션에서 발표자는 OneAPI 기반 툴킷 사용의 힘과 C++ 라이브러리에 이질성을 추가하도록 설계된 Data Policy++ 컴파일러의 개념에 대해 논의합니다. 미리 정의된 정책을 사용하면 OpenCL 또는 CUDA에 대한 낮은 수준의 세부 정보에 대해 너무 많이 알 필요 없이 CPU 또는 GPU에 쉽게 액세스할 수 있습니다. 컴파일러는 모든 주변에 있는 메모리를 제어 및 분리하고 예외 코드를 처리하며 병렬 컴퓨팅을 생성하는 기능을 제공합니다.

  • 00:15:00 비디오의 이 섹션에서 발표자는 우수한 이기종 컴퓨팅 기능을 갖추기 위해 필요한 세 가지 사항이 있다고 설명합니다. 첫 번째는 장치를 검색하고 장치에 대한 정보를 얻는 기능입니다. 이것은 스피커가 시스템에 연결된 모든 장치를 감지하고 나열하는 간단한 코드를 보여주는 곳입니다. 두 번째 요구 사항은 장치의 상태에 대한 실시간 정보로 활용 및 온도 모니터링이 가능하고 사용자가 CPU와 GPU 간 전환을 가능하게 합니다. 세 번째 요구 사항은 장치와 호스트 간에 효율적이고 원활하게 메모리를 교환할 수 있는 기능이며, 이는 SYCL의 두 가지 주요 방법인 버퍼 및 통합 차트 메모리를 통해 달성됩니다.

  • 00:20:00 이 섹션에서 발표자는 개방형, 병렬 및 이기종 프로그래밍 모델인 SYCL 사용의 이점을 설명합니다. SYCL을 C++에 추가하면 GPU, CPU, ARM 및 FPGA를 비롯한 여러 장치에서 실행할 수 있는 코드를 작성할 수 있습니다. 발표자는 SYCL이 여러 장치에서 작동하도록 만드는 방법에 대한 수많은 온라인 리소스와 예가 있다고 언급합니다. Intel Advisor는 발표자가 권장하는 도구로, 코드를 최적화하는 데 도움이 되고 특정 기능을 GPU로 오프로드하는 옵션을 제공합니다. 발표자는 코드 실행 속도를 높이고 프로그램의 전반적인 성능을 향상시킬 수 있는 이 도구 사용의 중요성을 강조합니다.

  • 00:25:00 이 섹션에서 발표자는 SYCL을 사용하여 여러 공급업체가 여러 장치에서 코드를 사용할 수 있도록 하는 가장 빠른 방법을 홍보하고 시청자가 리소스 및 지원을 위해 oneapi.io 웹사이트와 그의 YouTube 채널을 방문하도록 권장합니다. 그는 또한 특정 예에서 SYCL이 CUDA보다 빠를 가능성에 대해 언급하지만 SYCL의 주요 장점은 이식성이라는 점을 강조합니다. 다른 장치에 대한 코딩 결정. 또한 발표자는 사용자가 SYCL을 시작할 수 있도록 모든 질문에 답하고 Jupyter 노트북 및 Intel Devcloud에 대한 액세스와 같은 리소스를 제공합니다.
Core C++ 2023
Core C++ 2023
  • Oleh Zasadnyy, GDG Lviv
  • corecpp.org
Core C++ 2023
 

Python의 GPU 가속



Python의 GPU 가속

이 비디오는 데이터 병렬 처리로 최대 10배의 속도 향상을 제공할 수 있는 그래픽 처리 장치의 성능을 활용하여 Python 프로그래밍에서 GPU 가속을 달성하는 방법을 설명합니다. GPU 컴퓨팅을 위한 두 가지 표준인 OpenCL과 CUDA에 대해 간략하게 소개하고 비디오에서는 Python에서 행렬 곱셈을 위해 Pi OpenCL과 CUDA를 사용하는 방법을 보여줍니다. 발표자는 행렬 곱셈을 위한 전역 메모리 및 커널의 사용을 설명하고 행렬-행렬 곱에서 한 요소를 계산하는 데 사용되는 알고리즘에 대해서도 설명합니다. 행렬 및 메모리 할당의 내부 표현을 이해하는 데 중점을 두고 C 및 Python의 GPU 가속을 위한 코드에 대해 설명합니다. 강의의 연습은 GPU 컴퓨팅의 추가 탐구를 위한 기초를 제공합니다.

  • 00:00:00 이 섹션에서는 비디오에서 초당 수십억 개의 부동 소수점 연산을 처리하고 Nvidia의 Kepler, Pascal, Volta와 같은 하이엔드 GPU의 예와 함께 GPU 컴퓨팅의 두 가지 표준인 OpenCL과 CUDA를 간략하게 소개합니다. GPU 컴퓨팅의 대규모 병렬 측면은 종종 필요한 충분한 스레드의 스케줄링과 함께 GPU를 점유 상태로 유지하는 방법으로 강조됩니다. 비디오는 또한 과학 및 엔지니어링 분야에서 하드웨어 가속기의 잠재적인 응용에 대해 언급합니다.

  • 00:05:00 비디오의 이 섹션에서 발표자는 1테라플롭의 최고 성능을 가진 케플러에서 7.9테라플롭을 초과하는 현재 세대에 이르기까지 GPU 가속의 진화에 대해 논의합니다. 대규모 병렬 컴퓨팅의 프로그래밍 모델은 단일 명령어 다중 데이터 접근 방식을 따르며 데이터는 스레드 블록으로 나뉘고 모든 블록은 적어도 하나의 스레드를 실행합니다. 발표자는 병렬 프로그래밍을 위한 개방형 표준인 개방형 컴퓨팅 언어를 다루며 GPU 컴퓨팅 외에도 멀티 코어 및 멀티 스레드 컴퓨팅을 다룹니다.

  • 00:10:00 이 섹션에서 발표자는 Python에서 GPU 가속을 위한 OpenCL 및 Pi OpenCL 사용에 대해 설명합니다. OpenCL은 원래 NVIDIA 그래픽 카드에서 지원되었지만 폐기된 일반 표준입니다. 그러나 Apple에서 시작했기 때문에 MacBook에서 잘 작동합니다. Pi OpenCL은 상용구 코드를 줄이고 커널에 더 쉽게 집중할 수 있도록 하여 OpenCL 프로그래밍을 단순화합니다. NumPy 배열도 지원하지만 데이터 병렬 처리로 인해 데이터 구조가 더 제한됩니다. 발표자는 테스트 목적으로 두 개의 정수 행렬에서 행렬 곱셈을 위해 Pi OpenCL을 사용하는 방법을 보여줍니다.

  • 00:15:00 이 섹션에서 발표자는 OpenCL을 사용하여 Python에서 행렬 곱셈에 GPU를 사용하는 방법을 설명합니다. OpenCL 및 NumPy를 포함하여 필요한 라이브러리를 가져오는 것으로 시작합니다. 발표자는 또한 사용된 그래픽 카드가 64비트 산술을 지원하지 않아 32비트 부동 소수점 산술을 선택했다고 언급했습니다. 그런 다음 행렬을 정의하고 임의의 정수를 생성하며 유형을 32비트 흐름 행렬로 변경합니다. 그런 다음 발표자는 장치에서 행렬의 상대를 정의하고 대기열을 생성하는 데 필요한 상용구 코드를 설명합니다. 마지막으로 발표자는 프로그램이 실행될 때 컴파일되는 행렬 곱셈의 커널을 정의하고 GPU에서 행렬을 곱하는 방법을 시연합니다.

  • 00:20:00 이 섹션에서 화자는 Python 프로그래밍에서 GPU 가속의 맥락에서 "글로벌"의 개념을 설명합니다. 전역은 행렬이 그래픽 카드의 전역 메모리에 상주하여 모든 스레드가 데이터에 액세스할 수 있음을 나타냅니다. 치수는 짧은 정수로 전달되며 모든 스레드에는 고유 식별 번호가 있습니다. 행렬 곱셈 프로세스는 거의 모든 부분이 행렬 행 및 열 인덱싱을 통해 독립적으로 수행될 수 있으므로 GPU 가속의 이점을 얻습니다. 행렬은 하나의 긴 배열로 C 방식으로 저장되며 포인터는 메모리에서 위치를 결정합니다.

  • 00:25:00 이 섹션에서 발표자는 행렬-행렬 곱의 한 요소를 계산하기 위한 C의 알고리즘과 일반적으로 행렬 차원의 3차 연산인 행렬-행렬 곱셈의 잠재적인 속도 향상에 대해 설명합니다. 그러나 GPU와 커널 실행을 사용하면 작업을 선형 작업으로 단순화할 수 있으므로 비용이 크게 절감되고 속도가 크게 향상됩니다. 연사는 또한 작업을 수행하는 가장 간단한 방법은 명시적으로 컴파일할 필요 없이 Python을 사용하는 것이지만 슈퍼컴퓨터에서 사용되는 실제 알고리즘은 GPU의 공유 메모리와 컴파일 프로세스에서 논의된 것 이상의 컴파일 프로세스를 사용한다고 언급합니다. 동영상. 발표자는 PiCUDA 및 PiOpenCL을 통해 프로그래머가 하위 수준 컴파일 및 연결 프로세스에 대해 걱정할 필요 없이 상위 수준에서 코드를 개발할 수 있다는 생각을 강조합니다.

  • 00:30:00 이 섹션에서는 Python에서 GPU 가속을 위한 CUDA 설치에 대한 비디오를 설명합니다. CUDA를 사용하려면 사용자에게 NVIDIA GPU와 드라이버가 설치되어 있어야 합니다. 강의에서는 시스템이 제대로 설정되었는지 확인하기 위한 지침을 살펴보고 발표자는 이 기술이 고도의 대화식 병렬 컴퓨팅이라고 언급합니다. 강사는 좋은 그래픽 카드가 장착된 하이엔드 노트북에서 좋은 성능을 얻을 수 있다고 설명합니다. 그런 다음 이 과정에서는 행렬 곱셈을 예로 보여줍니다. 발표자는 일반적으로 CPU에서 실행되는 프로그램이 있어야 하며 GPU는 계산 집약적인 부분만 가속화한다고 말합니다. 마지막으로 강의에서는 GPU의 해당 행렬에 대한 메모리 할당 및 결과 행렬 초기화에 대해 논의하며 NumPy로 할당하는 것이 C로 할당하는 것보다 낫다고 설명합니다. 또한 이 단계에서는 컴파일이 필요하지 않습니다.

  • 00:35:00 이 섹션에서는 C의 GPU 가속을 위한 코드에 대해 설명합니다. C의 행렬은 행 방식으로 저장되며 코드는 이 사실을 이용합니다. 2차원 구조에서 스레드 블록을 시작하기 위한 구문은 스레드를 명시적으로 계산하는 데 사용됩니다. 포인터 산술을 피하기 위해 명시적인 브라케팅이 있는 루프가 사용됩니다. 이 함수는 입력에 대한 행렬 A와 B와 결과 행렬 C_gpu를 포함하는 차원과 데이터에 대한 포인터를 취합니다. 장치로의 메모리 복사는 인쇄 전에 끝나야 하며 호스트로의 메모리 복사는 데이터를 인쇄하기 전에 완료되어야 합니다. 왜냐하면 GPU에서 실행되는 커널 함수 내 함수 내에서 인쇄가 불가능할 수 있기 때문입니다. 마지막으로, pyCUDA가 piOpenCL 및 PyCUDA보다 최신이라는 점을 언급하며 토론을 마칩니다.

  • 00:40:00 이 섹션에서 발표자는 CUDA에 맞춰져 있지만 다른 GPU에서도 실행되도록 노력하고 있는 Python의 GPU 가속에 대해 논의합니다. 컴파일과 실행을 모두 처리하므로 후속 실행이 훨씬 빨라집니다. 스크립팅 환경에 머무르면서 Python에서 GPU 커널을 개발하는 것이 가능합니다. 그러나 GPU가 작동하는 방식과 행렬이 C 구문을 사용하여 내부적으로 표현되는 방식을 이해해야 합니다. 강의의 연습은 개방형이며 GPU 컴퓨팅을 탐색하는 두 번째 프로젝트의 기초를 제공할 수 있습니다. 전반적으로 이것은 프로그래머와 소프트웨어 개발자가 GPU에서 실행되는 기능을 개발할 수 있는 방법에 대한 아이디어를 제공하는 것을 목표로 하는 소개 섹션이었습니다.
GPU acceleration in Python
GPU acceleration in Python
  • 2022.02.10
  • www.youtube.com
This lecture introduces PyOpenCL and PyCUDA to define and run functions on General Purpose Graphics Processing Units (GPUs). The running example is a basic ...
 

OpenCL 3.0 출시 프레젠테이션(IWOCL / SYCLcon 2020)



OpenCL 3.0 출시 프레젠테이션

이 비디오에서는 OpenCL 3.0의 출시에 대해 논의하며 업계에서 낮은 수준의 병렬 프로그래밍에 대한 중요성에 중점을 둡니다. OpenCL 3.0은 API에 새로운 기능을 추가하지 않지만 OpenCL이 더 많은 개발자와 장치에 도달할 수 있도록 생태계 재정렬을 제공합니다. 발표자는 또한 DSP 라이트 프로세서에 대한 확장 추가, 향후 기능을 위한 로드맵, OpenCL Vulcan용 스피릿 커널을 생성할 수 있는 오픈 소스 커널 언어 컴파일러의 성장하는 생태계에 대해 논의합니다. 작업 그룹이 향후 몇 개월 동안 첫 번째 구현 단계를 준비할 때 사양을 확정하는 데 도움이 되도록 사용자의 피드백이 권장됩니다.

  • 00:00:00 이 섹션에서는 NVIDIA와 Khronos 그룹의 Neil Travis가 OpenCL 3.0의 출시와 업계에서 저수준 병렬 프로그래밍 표준의 중요성에 대해 논의합니다. OpenCL은 GPU 공급업체에서 널리 사용되며 애플리케이션, 엔진 및 라이브러리에서 점점 더 많이 사용되고 있습니다. OpenCL 3.0의 출시는 OpenCL이 더 많은 개발자와 장치에 도달할 수 있도록 하기 위해 API에 새로운 기능을 추가하는 대신 생태계 재정렬을 제공합니다. OpenCL 3.0은 모든 2x 기능을 선택 사항 이상으로 만들어 공급업체가 고객에게 필요한 기능을 제공하는 데 집중할 수 있도록 하고 핵심 기능에 대한 기준을 높일 수 있는 기회를 다시 설정합니다.

  • 00:05:00 이 섹션에서는 OpenCL 3.0이 DSP 조명 프로세서에 대한 확장이 추가된 모든 OpenCL 2.x 기능을 쿼리하도록 설계된 통합 API와 함께 제공되는 새로운 사양이라고 설명합니다. 직접 메모리 액세스(DMA) 트랜잭션을 통해 로컬 메모리를 유연하고 비동기적으로. OpenCL 3.0에는 OpenCL C++ 사양이 포함되어 있지 않지만 다른 구현에서는 OpenCL 오픈 소스 프런트 엔드 컴파일러용 C++를 사용하여 OpenCL C와 많은 C++17을 혼합하여 Spir-V 커널을 생성하는 것이 좋습니다. OpenCL의 로드맵에는 업계 채택을 위한 확장 기능으로 새로운 기능을 제공하는 것이 포함되어 있어 향후 핵심 사양으로 통합하기 전에 성숙하고 입증될 수 있습니다. OpenCL 작업 그룹은 또한 프로파일을 응용 프로그램 이식성과 구현 유연성의 균형을 맞추고 목표 시장에 대한 단편화를 방지하는 중요한 도구로 보고 있습니다.

  • 00:10:00 이 섹션에서 발표자는 OpenCL Vulcan용 스피릿 커널을 생성하거나 다음과 같은 다른 API에서 실행하기 위해 셰이더로 추가 변환할 수 있는 clang 및 lvm을 포함하는 오픈 소스 커널 언어 컴파일러의 성장하는 생태계에 대해 논의합니다. 금속으로. 이렇게 하면 OpenCL 드라이버를 사용할 필요 없이 Apple 플랫폼에서 OpenCL 응용 프로그램을 사용할 수 있습니다. 발표자는 또한 오픈 소스 변환 파이프라인을 사용하여 LLVM에서 생성된 스피릿 커널을 DXi L로 변환하여 언어 컴파일러가 런타임과 독립적으로 혁신할 수 있도록 하는 OpenCL 12 프로젝트에 대해 언급합니다. OpenCL 3의 사양은 잠정적이며 작업 그룹이 향후 몇 개월 동안 첫 번째 구현 단계를 준비함에 따라 사양을 확정하는 데 도움이 되도록 사용자의 피드백이 권장됩니다.
OpenCL 3.0 Launch Presentation
OpenCL 3.0 Launch Presentation
  • 2020.05.07
  • www.youtube.com
This video was presented as part of the panel discussion at the online version of IWOCL / SYCLcon 2020, and was presented by Neil Trevett, Khronos Group Pres...
사유: