2017-03-18 3 views
1

이미지 Img1의 각 픽셀에 이미지 Img2의 해당 픽셀이있는 두 이미지 사이에서 작업 (예 : 추가)을하고 싶다고 가정 해 보겠습니다. 대응 벡터는 튜플 델타에 저장됩니다. 기본적으로 다음과 같은 내용이 있습니다 :효율적으로 Halide에서 메모리 액세스를 수집합니다.

Img (x, y) = Img1 (x, y), y + Delta [1] (x, y)) ;

이것은 메모리 수집 작업입니다. Halide에서 그러한 패턴을 묘사하는 가장 좋은 방법은 무엇입니까? 어떻게 일정을 계획합니까?

+0

튜플 대신에 델타 값을 다른 차원 ydelta); Delta.unroll (c);'적어도 두 값을 서로 메모리에 저장합니다. –

답변

0

실제로 일정을 수립하는 좋은 방법은 없습니다. 수집 지침은 수집 지침이있는 곳에서도 느립니다. 아마 x를 통해 벡터화하여 벡터를 사용하여 Img1과 Delta에서 주소 계산 및로드를 수행 할 수 있습니다. 나는 단지 명백한 것을 사용할 것입니다 :

Img.vectorize(x, 8).parallel(y, 4); 
+0

감사합니다. 확실히 도움이됩니다. 나는 수집가가 성능면에서 비싸다고 동의한다. 나는 HW 지원도하고 있는데 타일 당 하나의 델타 값으로 떨어지는 것이 현명하다. –