2015-01-10 2 views
1

iOS App에이 수식을 구현하고 싶습니다. 이 공식을 빠르게하기 위해 GLSL을 사용할 수있는 방법이 있습니까? 또는이 공식을 빠르게하기 위해 정신적으로나 다른 것을 사용할 수 있습니까?GLSL이 재귀 수식 계산을 수행 할 수 있습니까? 또는이 공식을 어떻게 빠르게 할 수 있습니까?

for (k = 0; k < imageSize; k++) { 
    imageOut[k] = imageOut[k-1] * a + imageIn[k] * b; 
} 

OpenCL을 사용할 수 없습니다.

답변

2

Dietrich Epp가 이미 지적한대로 IIR 필터가 있습니다. 이제 컴퓨터에는 "무한 (inifinite)"과 같은 것이 없습니다. 숫자 정밀도, 메모리, 사용 가능한 계산 시간 등으로 항상 제한됩니다. 일반적인 숫자 표현의 제한된 정밀도로 인해 루프 광고를 무한정 실행하더라도 아주 일찍 오류를 반올림하는 의미있는 것을 잃어 버릴 것입니다.

그래서 솔직히 말해서 응답 시간이 매우 긴 FIR 필터를 호출하십시오. 그것들을 병렬 처리 할 수 ​​있습니까? 예, 가능하지만 시간 영역을 떠나 주파수 영역에서 살펴 봐야합니다.

시스템에 대한 응답 (= 필터)을 가능한 모든 신호로 모델링 한 다음 신호를 기반으로하는 응답을 "재생"하면 원하는 출력이 제공된다고 가정하십시오. 모든 주파수를 포함하는 광대역 신호에 대한 응답으로 시스템의 "녹음"이되는 주파수 도메인에서. 그러나 그 신호는 단순한 충동입니다. 그것이 FIR 및 IIR이라는 용어가 중간에 올리는 곳입니다. I from.

회선을 통해 시스템의 임펄스 응답을 임의의 신호에 적용하면 신호 자체와 같이 시스템이 응답 할 대상을 얻을 수 있습니다. 그러나 시간 영역에서 컨볼 루션을 계산하는

s * r = F^-1(F(s) · F(r)) 

푸리에 변환의 것들 중 하나, 즉 푸리에 임펄스 응답의 푸리에 변환으로 신호 변환 승산 결과를 다시 바뀌는 동일하다 잘 병렬화 될 수 있으며 GPU는 실제로 상당히 잘 수행됩니다.

이제는 GLSL 기반 푸리에 변환 코드가 있지만 일반적으로 GPU에서 실행하려면 OpenCL 또는 CUDA로 작성해야합니다.

어쨌든, 여기 당신을위한 조리법 :

이 IIR은 FIR과 구별하게하는 컷오프 k를 결정합니다. 임펄스 응답 (= 복합 스펙트럼 응답, CSR)의 푸리에 변환을 결정합니다. 신호 (= 이미지)를 푸리에 변환하여 CSR로 곱하고 다시 변환합니다.

3

이것은 고전적인 IIR 필터이며 데이터 종속성은 SIMD 코드로 변환 할 때 문제를 일으 킵니다. 즉, 단순한 변환 피드백 또는 렌더 투 텍스쳐 연산으로는 작업을 수행 할 수 없습니다. 즉, GPU는 여러 데이터를 병렬로 처리하도록 설계되었지만 수식을 사용하면 출력이 연속적으로 계산됩니다 (out[k-1]을 먼저 계산하지 않고 out[k]을 계산할 수 없음).

불행히도 GLSL로 쉽게 변환 할 수 없습니다. NEON 대신 Metal을 사용할 수도 있습니다. 확실하지 않습니다.

관련 문제