각 8x8 패치에 복잡한 연산을 적용하여 이미지를 반복하고 싶습니다. 예를 들어, 각 패치의 특이 값 분해 (SVD)를 계산하고 출력 이미지에 세 번째 특이 값을 저장해야한다고 가정합니다. Halide와 함께 라이브러리 (예 : SVD 용 LAPACK)를 사용할 수 있습니까? 아니면 할라이드 파이프 라인의 일부로 SVD 알고리즘을 프로그램해야합니까?Halide로 외부 라이브러리를 사용할 수 있습니까?
0
A
답변
1
예, 외부 기능 정의를 사용하여 정확히 수행 할 수 있습니다. 당신이 테스트에서 따라 할 수있는 간단한 예제가있다 :
https://github.com/halide/Halide/blob/master/test/correctness/extern_stage.cpp
기본 모델은 외부 단계 함수로 표시하고, (연산에) 따라 파이프 라인에 예약 할 수 있다는 것입니다. 여러분이 작성한 extern 인터페이스 함수는 입력 블럭이 주어지면 출력 블록을 실제로 계산할뿐만 아니라 주어진 입력 블럭을 계산하는 데 필요한 입력의 양에 대한 쿼리에 응답하기도합니다.
이렇게하면이 사용 사례를 빨리 알 수 있습니다.
즉, 여기에서 해결해야하는 비교적 작은 일정한 크기의 문제가 주어지면 간단한 8x8 SVD 인라인을 작성하는 것에서부터 좋은 최적화 (잠재적 최적화, GPU와 같은 다른 플랫폼 타겟팅 등)를 얻을 수 있습니다. Halide 알고리즘.