인텔® FPGA SDK for OpenCL™ - 지원 센터
인텔® FPGA SDK for OpenCL 지원 페이지에서는 커널을 에뮬레이션, 컴파일 및 프로파일링하는 방법에 대한 정보를 제공합니다. 커널을 최적화하는 방법에 대한 지침과 호스트 응용 프로그램을 실행하는 동안 시스템을 디버깅하는 방법에 대한 정보도 있습니다. 이 페이지는 개발 플랫폼에 따라 FPGA용 커널 개발자와 CPU용 호스트 코드 개발자의 두 가지 주요 범주로 구성됩니다.
소프트웨어 요구 사항
호스트 소프트웨어 개발에 필요한 필수 패키지 및 드라이버를 설치하려면 개발 시스템에 대한 관리자 권한이 있어야 합니다.
호스트 시스템은 운영 체제 지원 페이지에 나열된 다음 지원되는 Windows* 및 Linux* 운영 체제 중 하나를 실행해야 합니다.
다음 개발 환경 중 하나를 사용하여 인텔® FPGA SDK for OpenCL™용 호스트 애플리케이션을 개발하십시오.
Windows OS 시스템
- OpenCL용 인텔 FPGA SDK
- 보드 지원 패키지(BSP)
- Microsoft* Visual Studio Professional 버전 2010 이상.
리눅스 OS 시스템
- OpenCL용 인텔 FPGA SDK
- Bsp
- RPM(RPM 패키지 관리자, 원래 Red Hat 패키지 관리자)
- GCC에 포함된 C 컴파일러
- Perl 명령 버전 5 이상
1. 커널 개발자
SDK 사용자 인터페이스
인텔® FPGA SDK for OpenCL™은 사용자에게 두 가지 개발 환경 모드를 제공합니다. 코드 빌더의 경우 모든 도구가 GUI에 통합되어 커널을 설계, 컴파일 및 디버그할 수 있습니다. 반면에 명령줄 옵션은 일반 사용자를 위한 것입니다.
- GUI/코드 빌더: 현재 사용할 수 없습니다.
- 명령줄 옵션:
다음은 커널 개발자에게 유용한 몇 가지 명령입니다.
aoc kernel.cl -o bin/kernel.aocx –board=<board_name>
- kernel.cl 소스 파일을 <board_name>에서 지정한 보드용 FPGA 프로그래밍 파일(kernel.aocx)로 컴파일합니다. -o는 출력 파일 이름과 위치를 지정하는 데 사용됩니다
aoc kernel.cl -o bin/kernel.aocx –board=<board_name> -march=에뮬레이터
- 커널의 기능을 테스트하는 데 사용할 수 있는 에뮬레이션용 aocx 파일을 빌드합니다.
aoc -목록 보드
- 사용 가능한 보드 및 출구 목록을 인쇄합니다.
aoc -help
- aoc 명령 옵션의 전체 목록과 각 옵션에 대한 도움말 정보를 인쇄합니다.
AOCL 버전
- 설치된 인텔 FPGA SDK for OpenCL 버전에 대한 버전 정보를 표시합니다.
aocl 설치
- 보드용 드라이버를 현재 호스트 시스템에 설치합니다.
AOCL 진단
- 보드에 대한 보드 공급업체의 테스트 프로그램 실행
AOCL 프로그램
- 보드에 새 FPGA 이미지 구성
AOCL 플래시
- 지정된 시작 구성으로 FPGA 초기화합니다.
AOCL 도움말
- aocl 명령 옵션의 전체 목록과 이러한 각 옵션에 대한 도움말 정보를 인쇄합니다.
OpenCL 사양
크로노스 호환성
인텔® FPGA SDK for OpenCL™은 게시된 Khronos 사양을 기반으로 하며 Khronos 그룹에 속한 많은 공급업체에서 지원합니다. 인텔 FPGA SDK for OpenCL은 Khronos 적합성 테스트 프로세스를 통과했습니다. OpenCL 1.0 표준을 준수하며 Khronos Group에서 OpenCL 1.0 및 OpenCL 2.0 헤더를 모두 제공합니다.
관심: SDK는 현재 모든 OpenCL 2.0 API(애플리케이션 프로그래밍 인터페이스)를 지원하지 않습니다. OpenCL 2.0 헤더를 사용하고 지원되지 않는 API를 호출하는 경우 호출은 API가 완전히 지원되지 않음을 나타내는 오류 코드를 반환합니다.
인텔 FPGA SDK for OpenCL 호스트 런타임은 OpenCL 프로그래밍 가이드용 인텔 FPGA SDK 의 OpenCL 기능 지원 상태 섹션에서 찾을 수 있는 몇 가지 설명 및 예외와 함께 OpenCL 플랫폼 계층 및 API를 준수합니다.
기타 관련된 링크들:
- OpenCL에 대한 자세한 내용은 Kronos Group OpenCL 개요 페이지를 참조하세요.
- 현재 적합성 상태는 Kronos Group Adopter Program 페이지에서 확인할 수 있습니다.
- OpenCL 1.0 표준에 대한 자세한 내용은 Khronos의 OpenCL 사양을 참조하세요.
OpenCL 확장
채널(I/O 또는 커널)
인텔® FPGA SDK for OpenCL™ 채널 확장은 데이터를 커널에 전달하고 커널을 고효율 및 낮은 대기 시간으로 동기화하는 메커니즘을 제공합니다. 채널을 구현, 사용 및 에뮬레이션하는 방법에 대한 자세한 내용은 다음 링크를 참조하십시오.
- 인텔 FPGA SDK for OpenCL 채널 확장 구현
- 커널 복사본이 있는 채널 사용
- HTML 보고서: 커널 디자인 개념 - 채널
- OpenCL 채널 또는 OpenCL 파이프용 인텔 FPGA SDK를 통해 데이터 전송
- 채널 또는 파이프 구현의 여러 명령 대기열에 대한 요구 사항
참고: 채널의 기능을 활용하고 싶지만 다른 SDK를 사용하여 커널 프로그램을 실행할 수 있는 경우 OpenCL 파이프를 구현하십시오. 파이프에 대한 자세한 내용은 파이프에 대한 다음 섹션을 참조하십시오.
파이프
인텔 FPGA SDK for OpenCL은 OpenCL 사양 버전 2.0의 일부인 OpenCL 파이프 함수에 대한 예비 지원을 제공합니다. 커널에 데이터를 전달하고 커널을 높은 효율성과 낮은 대기 시간으로 동기화하는 메커니즘을 제공합니다.
파이프의 OpenCL 구현에 대한 인텔 FPGA SDK는 OpenCL 사양 버전 2.0을 완전히 준수하지 않습니다. SDK 파이프 구현의 목표는 다른 OpenCL 2.0 규격 디바이스에서 원활하게 작동하는 솔루션을 제공하는 것입니다. 인텔 FPGA 제품에 파이프를 사용하려면 설계가 특정 요구 사항을 충족해야 합니다.
OpenCL 파이프를 구현하는 방법에 대한 자세한 내용은 다음 링크를 참조하세요.
에뮬레이터
다단계 설계 흐름에서는 x86-64 Windows* 또는 Linux* 호스트의 하나 이상의 에뮬레이션 장치에서 실행하여 OpenCL™ 커널의 기능을 평가할 수 있습니다. 에뮬레이션을 위한 디자인 컴파일은 .aocx 파일을 생성하는 데 몇 초가 걸리며, 전체 컴파일에 필요한 긴 시간을 거치지 않고도 디자인을 보다 효과적으로 반복할 수 있습니다.
Linux 시스템의 경우 에뮬레이터는 심볼릭 디버그 지원을 제공합니다. 심볼릭 디버그를 사용하면 커널 코드에서 기능 오류의 원인을 찾을 수 있습니다.
아래 링크는 OpenCL 커널의 디자인 흐름에 대한 개요를 제공하며 커널을 에뮬레이션할 수 있는 여러 단계를 보여줍니다.
OpenCL 디자인 흐름용 다단계 인텔® FPGA SDK
프로그래밍 가이드의 OpenCL 커널 에뮬레이션 및 디버깅 섹션에는 하드웨어와 에뮬레이션에 대한 커널 작업 간의 차이점에 대한 자세한 내용이 포함되어 있습니다.
기타 관련된 링크들:
최적화
인텔® FPGA SDK for OpenCL™ Offline Compiler 기술을 사용하면 고정 하드웨어 아키텍처에 맞게 커널을 변경할 필요가 없습니다. 대신, 오프라인 컴파일러는 커널 요구 사항에 맞게 하드웨어 아키텍처를 자동으로 사용자 지정합니다.
일반적으로 단일 컴퓨팅 단위를 대상으로 하는 커널을 먼저 최적화해야 합니다. 이 컴퓨팅 단위를 최적화한 후 나머지 FPGA 채우도록 하드웨어를 확장하여 성능을 높입니다. 커널의 하드웨어 설치 공간은 하드웨어 컴파일에 걸리는 시간과 관련이 있습니다. 따라서 더 작은 공간(즉, 단일 컴퓨팅 장치)으로 더 많은 최적화를 수행할수록 주어진 시간 동안 더 많은 하드웨어 컴파일을 수행할 수 있습니다.
인텔 FPGAs를 위한 OpenCL 최적화
설계 구현을 최적화하고 최대 성능을 얻으려면 이론상 최대 성능을 이해하고 한계가 무엇인지 이해하십시오. 같이:
- 간단하고 알려진 양호한 기능 구현으로 시작하십시오.
- 에뮬레이터를 사용하여 기능의 유효성을 검사합니다.
- 최적화 보고서와 함께 보고되는 파이프라인 실속 검사를 제거하거나 최소화합니다.
- 최적의 메모리 대역폭을 위해 메모리 액세스를 계획합니다.
- 프로파일러를 사용하여 성능 문제를 디버깅합니다.
프로파일러는 시스템 성능에 대한 더 많은 통찰력을 제공하여 메모리 사용에서 알고리즘을 더욱 최적화할 수 있는 방향을 제공합니다.
FPGAs의 경우 할당할 수 있는 리소스가 많을수록 더 많은 언롤링, 병렬화 및 더 높은 성능을 얻을 수 있습니다.
최적화에 도움이 되는 보고서 및 리소스
사용자가 사용할 수 있는 시스템 생성 보고서가 많이 있습니다. 이러한 보고서는 코드, 리소스 사용량에 대한 인사이트를 제공하고 성능을 더욱 향상시키기 위해 집중해야 할 위치에 대한 힌트를 제공합니다.
메모리 최적화
메모리 시스템을 이해하는 것은 OpenCL을 사용하여 응용 프로그램을 효율적으로 구현하는 데 중요합니다.
글로벌 메모리 인터커넥트
GPU와 달리 FPGA는 애플리케이션에 가장 적합한 사용자 지정 LSU(부하 저장 장치)를 구축할 수 있습니다. 따라서 애플리케이션에 적합한 LSU 유형을 선택하는 OpenCL 코드를 작성하는 기능은 설계 성능을 크게 개선하는 데 도움이 될 수 있습니다.
자세한 내용은 OpenCL 모범 사례 가이드에 대한 인텔 FPGA SDK의 Global Memory Interconnect 섹션을 참조하십시오.
로컬 메모리
로컬 메모리는 복잡한 시스템입니다. 캐시 수준이 서로 다른 일반적인 GPU 아키텍처와 달리 FPGA는 FPGA 내부의 전용 메모리 블록에 로컬 메모리를 구현합니다. 자세한 내용은 인텔 FPGA SDK for OpenCL 모범 사례 가이드의 로컬 메모리 섹션을 참조하십시오.
전반적인 성능 향상을 위해 사용되는 메모리를 최적화할 수 있는 여러 가지 방법이 있습니다. 몇 가지 주요 기술에 대한 자세한 내용은 인텔 FPGA SDK for OpenCL 모범 사례 가이드의 정렬된 메모리 할당 섹션을 참조하세요.
메모리 액세스 효율성을 개선하기 위한 전략에 대한 자세한 내용은 인텔 FPGA SDK for OpenCL Best Practices Guide의 Strategies for Improving Memory Access Efficiency(메모리 액세스 효율성 개선 전략 ) 섹션을 참조하세요.
파이프라인
파이프라인을 이해하는 것은 구현의 최상의 성능을 활용하는 데 매우 중요합니다. 파이프라인을 효율적으로 사용하면 성능 처리량이 직접적으로 향상됩니다. 자세한 내용은 인텔 FPGA SDK for OpenCL 모범 사례 가이드의 파이프라인 섹션을 참조하세요.
데이터 전송에 대한 자세한 내용은 인텔 FPGA SDK for OpenCL 모범 사례 가이드의 인텔 FPGA SDK for OpenCL 채널 또는 OpenCL 파이프를 통한 데이터 전송 섹션을 참조하십시오.
스톨, 점유, 대역폭
커널을 프로파일링하여 성능 병목 현상을 식별합니다. 프로파일링 정보가 만족스럽지 못한 커널 성능으로 이어지는 열악한 메모리 또는 채널 동작을 식별하는 데 어떻게 도움이 되는지에 대한 자세한 내용은 인텔 FPGA SDK for OpenCL Best Practices Guide의 Profiling Your Kernel to Identify Performance Bottlenecks 섹션을 참조하십시오.
루프 최적화
루프를 최적화하는 몇 가지 기술은 다음과 같습니다.
단일 작업 항목 커널에 대한 다양한 시나리오에서 루프 수행된 종속성을 제거하는 방법에 대한 몇 가지 팁은 OpenCL 모범 사례 가이드용 인텔 FPGA SDK의 루프 수행된 종속성 제거 섹션을 참조하세요.
부동 소수점 연산 최적화에 대한 자세한 내용은 인텔 FPGA SDK for OpenCL 모범 사례 가이드의 부동 소수점 연산 최적화 섹션을 참조하십시오.
면적 최적화
OpenCL 커널이 다양한 크기의 FPGAs에서 실행 가능한 경우 영역 사용은 중요한 설계 고려 사항입니다. OpenCL 응용 프로그램을 설계할 때 인텔은 하드웨어 영역 사용을 최적화하기 위한 특정 설계 전략을 따를 것을 권장합니다.
커널 성능을 최적화하려면 일반적으로 추가 FPGA 리소스가 필요합니다. 반면, 영역 최적화는 종종 성능 저하를 초래합니다. 커널을 최적화하는 동안 인텔은 FPGA 보드에서 여러 버전의 커널을 실행하여 최적의 크기와 성능 절충을 생성하는 커널 프로그래밍 전략을 결정할 것을 권장합니다.
FPGA 영역 사용을 최적화하기 위한 전략에 대한 자세한 내용은 인텔 FPGA SDK for OpenCL 모범 사례 가이드의 FPGA 영역 사용 최적화 전략 섹션을 참조하십시오.
참조 디자인 예
최적화 기술을 설명하는 몇 가지 설계 예는 다음과 같습니다.
이 예제에서는 루프 바둑판식 배열을 사용하여 계산에 내재된 데이터 재사용을 활용하는 기본 행렬 곱셈 연산의 최적화를 보여줍니다.
이 예에서는 다음을 보여 줍니다.
- 단정밀도 부동 소수점 최적화
- 로컬 메모리 버퍼링
- 컴파일 최적화(루프 언롤링, num_simd_work_items 속성)
- 부동 소수점 최적화
- 다중 장치 실행
이 설계 예제는 HPEC Challenge Benchmark Suite의 시간 영역 FIR(Finite Impulse Response) 필터 벤치마크를 구현합니다.
이 설계는 부동 소수점 FIR 필터에 대해 FPGAs 아키텍처보다 훨씬 더 나은 성능을 제공할 수 있는지를 보여주는 좋은 예입니다.
이 예에서는 다음을 보여 줍니다.
- 단정밀도 부동 소수점 최적화
- 효율적인 1D 슬라이딩 윈도우 버퍼 구현
- 단일 작업 항목 커널 최적화 방법
이 설계 예제에서는 1080p 입력 비디오를 사용하고 초당 110프레임으로 720p 비디오를 출력하는 비디오 다운스케일러를 구현합니다. 이 예제에서는 여러 커널을 사용하여 전역 메모리에서 효율적으로 읽고 씁니다.
이 예제에서는 다음을 보여 줍니다.
- 커널 채널
- 여러 동시 커널
- 커널-커널 채널
- 슬라이딩 윈도우 디자인 패턴
- 메모리 액세스 패턴 최적화
이 설계 예제는 Lucas Kanade 광학 흐름 알고리즘의 OpenCL 구현입니다. 창 크기가 52x52인 고밀도, 비반복 및 비피라미드 버전은 Cyclone® V SoC 개발 키트에서 초당 80프레임 이상으로 실행되는 것으로 표시됩니다.
이 예에서는 다음을 보여 줍니다.
- 단일 작업 항목 커널
- 슬라이딩 윈도우 디자인 패턴
- 자원 사용량 감소 기술
- 시각적 출력
훈련
설계 예제가 포함된 OpenCL 최적화와 관련된 온라인 교육은 다음에서 제공됩니다.
참조
프로 파일링
다단계 디자인 흐름에서 에뮬레이션의 예상 커널 성능이 허용되는 경우 FPGA에서 실행하는 동안 디자인이 어떻게 수행되는지에 대한 정보를 수집하도록 선택할 수 있습니다.
인텔® FPGA SDK for OpenCL™ Offline Compiler에 -profile 옵션을 사용하여 .aocx 파일의 Verilog 코드에서 성능 카운터를 계측하도록 지시할 수 있습니다. 실행 중에 인텔 FPGA SDK for OpenCL Profiler는 FPGA에서 OpenCL 커널을 실행하는 동안 수집된 성능 데이터를 측정하고 보고합니다. 그런 다음 프로파일러 GUI에서 성능 데이터를 검토할 수 있습니다.
OpenCL 프로그래밍 가이드용 인텔 FPGA SDK의 OpenCL 커널 프로파일링 섹션에는 커널을 프로파일링하는 방법에 대한 자세한 정보가 포함되어 있습니다.
프로파일링 데이터를 분석하는 방법
프로파일링 정보는 만족스럽지 못한 커널 성능으로 이어지는 열악한 메모리 또는 채널 동작을 식별하는 데 도움이 됩니다. OpenCL용 인텔 FPGA SDK 모범 사례 가이드의 성능 병목 현상을 식별하기 위한 커널 프로파일링 섹션에는 동적 프로파일러 GUI에 대한 자세한 정보와 지연, 대역폭, 캐시 적중 등과 같은 프로파일링 데이터를 해석하는 방법이 포함되어 있습니다. 또한 여러 OpenCL 디자인 예제 시나리오에 대한 프로파일러 분석도 포함되어 있습니다.
2. 호스트 코드 개발자
런타임 호스트 라이브러리
인텔® FPGA SDK for OpenCL™은 인텔 FPGA 제품을 대상으로 하는 OpenCL 애플리케이션을 빌드하고 실행할 수 있는 컴파일러 및 도구를 제공합니다.
인텔 FPGA SDK for OpenCL의 커널 배포 기능만 필요한 경우 OpenCL용 인텔 FPGA Runtime Environment(RTE)를 다운로드하여 설치합니다.
RTE는 OpenCL용 인텔 FPGA SDK의 하위 집합입니다. OpenCL 커널 프로그램의 개발 및 배포를 가능하게 하는 환경을 제공하는 SDK와 달리, RTE는 호스트 프로그램을 빌드 및 실행하고 대상 가속기 보드에서 사전 컴파일된 OpenCL 커널 프로그램을 실행할 수 있는 도구 및 런타임 구성 요소를 제공합니다.
SDK와 RTE를 동일한 호스트 시스템에 설치하지 마십시오. SDK에는 이미 RTE가 포함되어 있습니다.
유틸리티 및 호스트 런타임 라이브러리
OpenCL용 RTE는 유틸리티, 호스트 런타임 라이브러리, 드라이버, RTE 관련 라이브러리 및 파일을 제공합니다.
- RTE 유틸리티에는 고급 작업을 수행하기 위해 호출할 수 있는 명령이 포함되어 있습니다. RTE 유틸리티는 인텔 FPGA SDK for OpenCL 유틸리티의 하위 집합입니다
- 호스트 런타임은 OpenCL 호스트 애플리케이션에 대한 OpenCL 호스트 플랫폼 API 및 런타임 API를 제공합니다
호스트 런타임은 다음 라이브러리로 구성됩니다.
- 정적으로 연결된 라이브러리는 OpenCL 호스트 API, 하드웨어 추상화 및 도우미 라이브러리를 제공합니다
- DLL(동적 연결 라이브러리)은 하드웨어 추상화 및 도우미 라이브러리를 제공합니다
유틸리티 및 호스트 런타임 라이브러리에 대한 자세한 정보는 인텔 FPGA RTE for OpenCL 시작 안내서의 인텔 FPGA RTE for OpenCL 섹션의 내용을 참조하십시오.
데이터 스트리밍(호스트 채널)
이제 메모리 컨트롤러를 거치지 않고 호스트에서 스트리밍 데이터를 PCIe* 인터페이스를 통해 FPGA 커널로 직접 스트리밍할 수 있는 호스트 채널을 사용하여 시스템의 시스템 대기 시간을 크게 줄일 수 있습니다. FPGA 커널은 데이터 처리를 즉시 시작할 수 있으며 데이터 전송이 완료될 때까지 기다릴 필요가 없습니다. 호스트 채널은 OpenCL 런타임 API(애플리케이션 프로그래밍 인터페이스)에서 지원되며 에뮬레이션 지원을 포함합니다.
호스트 채널 및 에뮬레이션 지원에 대한 자세한 내용은 인텔® FPGA SDK for OpenCL™ Programming Guide의 I/O 채널 에뮬레이션 섹션을 참조하십시오.
프로필링
프로파일링을 사용하면 프로그램이 어디에서 시간을 보냈는지, 그리고 호출되는 다양한 함수가 무엇인지 알 수 있습니다. 이 정보는 더 빠른 프로그램 실행을 위해 다시 작성해야 할 수 있는 프로그램의 어느 부분이 예상보다 느리게 실행되고 있는지 보여줍니다. 또한 어떤 함수가 예상보다 더 자주 또는 덜 자주 호출되는지 알려줄 수 있습니다.
gprof
gprof는 소스 코드 프로파일링을 위해 Linux* 운영 체제에서 사용할 수 있는 오픈 소스 도구입니다. 시간 기반 샘플링에서 작동합니다. 간격 동안 프로그램 카운터를 조사하여 실행이 도달한 코드 지점을 결정합니다.
gprof를 사용하려면 컴파일러 프로파일링 플래그 -pg를 사용하여 소스 코드를 다시 컴파일하십시오
실행 파일을 실행하여 프로파일링 정보가 포함된 파일을 생성합니다.
gprof 도구가 사람이 읽을 수 있는 프로파일링 데이터를 생성하는 데 필요한 모든 정보를 포함하는 "gmon.out"이라는 특정 파일이 생성됩니다. 이제 다음과 같은 방법으로 gprof 도구를 사용하십시오.
$ gprof 소스 코드 gmon.out > profile_data.txt
profile_data.txt는 gprof 도구에서 사람이 읽을 수 있는 프로파일링 데이터를 생성하는 데 사용하는 정보가 포함된 파일입니다. 여기에는 플랫 프로파일 과 콜 그래프의 두 부분이 포함됩니다.
플랫 프로필은 프로그램이 각 함수에 소요된 시간과 해당 함수가 호출된 횟수를 보여줍니다.
호출 그래프 는 각 함수에 대해 어떤 함수가 호출했는지, 어떤 다른 함수가 호출했는지, 몇 번을 호출했는지 보여줍니다. 또한 각 함수의 서브루틴에서 얼마나 많은 시간이 소요되었는지에 대한 추정치도 있습니다.
프로파일링을 위한 gprof의 사용에 대한 자세한 내용은 GNU 웹 사이트에서 확인할 수 있습니다.
인텔® VTune™ 증폭기
프로파일링에 사용되는 인텔® VTune™ 증폭기는 다음과 같은 유형의 분석을 제공하여 Linux 임베디드 플랫폼, Android* 또는 Windows* 시스템에서 코드 실행 속도를 높이고 최적화할 수 있도록 도와줍니다.
- 성능 분석: 직렬 및 병렬 코드 병목 현상을 찾고, 알고리즘 선택 및 GPU 엔진 사용량을 분석하고, 애플리케이션이 사용 가능한 하드웨어 리소스로부터 이점을 얻을 수 있는 위치와 방법을 이해합니다
- 인텔 Energy Profiler 분석: 전력 이벤트를 분석하고 에너지를 낭비하는 이벤트를 식별합니다.
인텔 V-tune 앰프에 대한 자세한 내용은 Linux OS용 인텔 VTune 앰프 2018 시작하기 웹사이트를 참조하십시오.
다중 스레딩
OpenCL™ 호스트 파이프라인 다중 스레드는 많은 수의 입력 데이터를 처리해야 하고 각 데이터에 대한 프로세스를 순차적으로 수행해야 하는 알고리즘에 대한 높은 처리량을 달성하기 위한 프레임워크를 제공합니다. 이 프레임워크의 가장 좋은 응용 프로그램 중 하나는 처리량이 많은 하드웨어 또는 플랫폼을 사용하여 응용 프로그램에서 가장 시간이 많이 걸리는 부분을 가속화하는 이기종 플랫폼입니다. 알고리즘의 나머지 부분은 CPU와 같은 다른 플랫폼에서 순차적으로 실행되어 가속화된 작업에 대한 입력 데이터를 준비하거나 해당 작업의 출력을 사용하여 최종 출력을 준비해야 합니다. 이 시나리오에서는 알고리즘의 성능이 부분적으로 가속되지만 원래 알고리즘의 순차적 특성으로 인해 전체 시스템 처리량이 훨씬 낮습니다.
이 AN 831: 인텔 FPGA SDK for OpenCL Host Pipelined Multithread Application Note에서는 처리량이 많은 설계를 위한 새로운 파이프라인 프레임워크를 제안합니다. 이 프레임워크는 데이터 종속성이 알고리즘의 모든 단계 또는 작업을 순차적으로 실행해야 하는 알고리즘을 통해 대용량 입력 데이터를 처리하는 데 최적입니다.
호스트에서 FPGA 초기화
FPGAs은 가속 공간에서 많이 사용됩니다. OpenCL에는 CPU에서 작업을 FPGA로 오프로드하는 데 사용하는 특정 방법이 있습니다. 아래에 첨부된 파일에는 호스트 코드가 FPGA 커널을 시작하는 데 필요한 일반적인 초기화 단계가 포함되어 있습니다. 초기화 단계가 포함된 파일을 여기에서 다운로드하십시오.
main() 함수에서 init() 함수를 호출하여 FPGA 초기화할 수 있습니다. 코드는 먼저 커널이 실행될 장치를 찾은 다음 실행 가능한 호스트와 동일한 디렉터리에 제공된 aocx로 프로그래밍합니다. 코드의 초기화 단계 후 사용자는 디자인 요구 사항에 따라 커널 인수를 설정해야 합니다.
커널을 실행한 후 리소스를 해제하는 cleanup() 함수도 있습니다.
3. 디버그
에뮬레이션
인텔® FPGA SDK for OpenCL™ Emulator를 사용하여 커널의 기능을 확인할 수 있습니다. 또한 사용자는 Linux* 시스템에서 호스트 응용 프로그램의 일부로 OpenCL 커널 기능을 디버깅할 수 있습니다. 인텔 FPGA SDK for OpenCL Emulator와 함께 제공되는 디버깅 기능을 사용하면 이 작업을 수행할 수 있습니다.
자세한 내용은 인텔 FPGA SDK for OpenCL 프로그래밍 가이드의 다음 섹션을 참조하십시오.
프로 파일링
프로파일링에 대한 자세한 내용은 인텔® FPGA SDK for OpenCL™ 프로그래밍 가이드의 다음 섹션을 참조하세요.
런타임 디버그 변수 |
|
---|---|
호스트 응용 프로그램을 실행하는 동안 더 많은 디버그 정보를 얻도록 설정할 수 있는 특정 환경 변수가 있습니다. 이는 인텔® FPGA SDK for OpenCL™ 특정 환경 변수로, 사용자 지정 플랫폼 디자인의 문제를 진단하는 데 도움이 될 수 있습니다. 다음 표에서는 이러한 모든 환경 변수를 나열하고 자세히 설명합니다. | |
환경 변수 제목 | 설명 |
ACL_HAL_디버그 |
이 변수를 1에서 5 값으로 설정하여 MMD 계층과 직접 인터페이스하는 하드웨어 추상화 계층(HAL)의 디버그 출력을 높입니다. |
ACL_PCIE_DEBUG |
이 변수를 1 - 10,000 값으로 설정하여 MMD의 디버그 출력을 늘립니다. 이 변수 설정은 버전 ID 레지스터를 올바르게 읽고 UniPHY IP 코어가 보정되었는지 확인하는 데 유용합니다. |
ACL_PCIE_JTAG_CABLE |
케이블 번호를 지정하는 디폴트 quartus_pgm 인수를 무시하려면 이 변수를 설정합니다. 기본값은 케이블 1입니다. 인텔® FPGA Download Cable이 여러 개 있는 경우 이 변수를 설정하여 특정 케이블을 지정할 수 있습니다. |
ACL_PCIE_JTAG_DEVICE_INDEX |
FPGA 장치 인덱스를 지정하는 기본 quartus_pgm 인수를 재정의하려면 이 변수를 설정합니다. 기본적으로 이 변수의 값은 1입니다. FPGA가 JTAG 체인의 첫 번째 장치가 아닌 경우 값을 사용자 지정할 수 있습니다. |
ACL_PCIE_USE_JTAG_PROGRAMMING |
MMD가 부분 재구성 대신 JTAG 케이블을 사용하여 FPGA 다시 프로그래밍하도록 하려면 이 변수를 설정합니다. |
ACL_PCIE_DMA_USE_MSI |
Windows* OS에서 직접 메모리 액세스(DMA) 전송에 MSI를 사용하려면 이 변수를 설정하십시오. |
OpenCL™용 인텔® FPGA SDK용 진단 도구
인텔 FPGA SDK for OpenCL용 진단 도구는 인텔 FPGA SDK for OpenCL로 작업하는 동안 발생하는 다양한 설치/설정 문제, 하드웨어 및 소프트웨어 문제를 진단하고 해결하는 데 도움이 됩니다. 이 도구는 설치 테스트, 장치 테스트 및 링크 테스트를 수행합니다. 도구에 대한 자세한 정보는 이 프레젠테이션을 참조하십시오. 도구를 사용하려면 여기에서 다운로드하십시오.
기타 디버깅 기술
호스트 프로그램의 루프로 인해 사용자는 OpenCL™ 시스템을 실행하는 동안 속도가 느려질 수 있습니다. 이러한 시나리오에 대한 자세한 내용은 인텔® FPGA SDK for OpenCL Programming Guide의 Debugging Your OpenCL System That is Gradually Slowing Down 섹션을 참조하십시오.
OpenCL용 인텔 코드 빌더는 OpenCL용 인텔 FPGA SDK의 일부로 제공되는 소프트웨어 개발 도구입니다. OpenCL로 가속화된 Windows* 및 Linux* 응용 프로그램의 생성, 구축, 디버깅 및 분석 기능을 활성화하는 Microsoft* Visual Studio 및 Eclipse 플러그인 세트를 제공합니다. 자세한 정보는 OpenCL용 인텔 FPGA SDK 프로그래밍 가이드의 OpenCL용 인텔 코드 빌더를 사용하여 OpenCL 응용 프로그램 개발/디버깅 섹션을 참조하십시오.
지식 데이터베이스 솔루션
인텔® Arria® 10 기기
인텔® Stratix® 10 기기
추가 자료
다음은 설계 및 실행 단계와 관련된 특정 문제에 대한 인텔 FPGA 커뮤니티의 몇 가지 추가 링크입니다.
OpenCL™ 빠른 비디오 |
|
---|---|
동영상 제목 |
비디오 설명 |
Windows*를 사용하여 Cyclone® V SoC에서 OpenCL™로 Hello World 및 (기타 프로그램)을 실행하는 방법 파트 1 |
이 비디오는 Windows* 시스템을 사용하여 Cyclone® V SoC에서 OpenCL HelloWorld와 OpenCL™ 고속 푸리에 변환(FFT)의 두 가지 응용 프로그램을 실행하기 위한 기본 절차에 대해 설명합니다. |
Windows를 사용하여 Cyclone V SoC에서 OpenCL로 Hello World 및 (기타 프로그램)를 실행하는 방법 파트 2 |
이 비디오는 Windows 시스템을 사용하여 Cyclone V SoC에서 두 개의 애플리케이션 OpenCL HelloWorld 및 OpenCL FFT를 실행하기 위한 기본 프로시저에 대해 설명합니다. |
Windows를 사용하여 Cyclone V SoC에서 OpenCL로 Hello World 및 (기타 프로그램)를 실행하는 방법 3부 |
이 비디오는 Windows 시스템을 사용하여 Cyclone V SoC에서 두 개의 애플리케이션 OpenCL HelloWorld 및 OpenCL FFT를 실행하기 위한 기본 프로시저에 대해 설명합니다. |
Windows를 사용하여 Cyclone V SoC에서 OpenCL로 Hello World 및 (기타 프로그램)을 실행하는 방법 4부 |
이 비디오는 Windows 시스템을 사용하여 Cyclone V SoC에서 두 개의 애플리케이션 OpenCL HelloWorld 및 OpenCL FFT를 실행하기 위한 기본 프로시저에 대해 설명합니다. |
Windows를 사용하여 Cyclone V SoC에서 OpenCL로 Hello World 및 (기타 프로그램)를 실행하는 방법 5부 |
이 비디오는 Windows 시스템을 사용하여 Cyclone V SoC에서 두 개의 애플리케이션 OpenCL HelloWorld 및 OpenCL FFT를 실행하기 위한 기본 프로시저에 대해 설명합니다. |
이 비디오에서는 고객이 잠재적으로 이 기능을 사용하여 OpenCL 커널 코드에서 사용자 지정 처리 블록(RTL)을 가질 수 있는 이유를 설명합니다. 이 비디오에서는 메이크파일 및 구성 파일과 같은 디자인 예제와 컴파일 흐름을 설명합니다. 이 비디오에는 설계 예제 데모도 나와 있습니다. |
|
이 비디오에서는 Altera® SoC FPGAs 대상으로 하는 OpenCL 커널 및 호스트 코드를 개발하는 데 필요한 도구를 다운로드, 설치 및 구성하는 방법을 보여줍니다. |
|
Altera SoC FPGA(Linux 호스트)의 OpenCL – 2부 – 에뮬레이터를 사용하여 벡터 추가 예제 실행 |
이 비디오에서는 OpenCL에 기본 제공되는 에뮬레이터를 대상으로 하는 예제 OpenCL 애플리케이션을 다운로드하고 컴파일하는 방법을 보여 줍니다. |
Altera SoC FPGA(Linux 호스트)의 OpenCL – 3부 – SoC FPGA용 커널 및 호스트 코드 컴파일 |
이 비디오는 Cyclone V SoC FPGA의 FPGA 및 프로세서를 대상으로 하는 OpenCL 커널 및 호스트 코드를 컴파일하는 방법을 보여줍니다. |
이 비디오에서는 Cyclone V SoC 보드를 설정하여 OpenCL 예제를 실행하고 보드에서 호스트 코드와 커널을 실행하는 방법을 보여줍니다. |
이 페이지의 콘텐츠는 원본 영어 콘텐츠에 대한 사람 번역 및 컴퓨터 번역의 조합으로 완성되었습니다. 이 콘텐츠는 편의와 일반적인 정보 제공을 위해서만 제공되었으며, 완전하거나 정확한 것으로 간주되어선 안 됩니다. 이 페이지의 영어 버전과 번역 간 모순이 있는 경우, 영어 버전이 우선적으로 적용됩니다. 이 페이지의 영어 버전을 확인하십시오.