2011-12-14 3 views
0

I 커브를 가지고쿠다 선형 보간

이제 F (3) I는 (이제 F라고하자 보간하기 위해 1 4 사이의 선형 보간을 사용 생각한 보간하기 위해
float points[] = {1, 4, 6, 9, 14, 25, 69}; 
float images[] = {0.3, 0.4, 0.7, 0.9, 1, 2.5, 5.3}; 

15) 포인트 배열에 이진 검색을 적용하여 lowerBound를 25로 설정하고 간격 [14,25]에서 보간을 고려하십시오.

이 메서드는 내 장치를 만드는 중임을 확인했습니다. 기능이 매우 느립니다. 나는 그렇게하기 위해서 텍스쳐 메모리와 tex1D를 사용할 수 있다고 들었다. 포인트 []가 균일하게 말하지 않는 경우에도 가능합니다 (일정 단계로 증가)

아이디어가 있으십니까?

답변

1

그것은 두 부분으로 나누어 질 수있다이 문제 같다 :

  1. (x)가 0과 7 사이의 부동 소수점 인덱스 F의 x 값을 변환하는 점 배열을 사용 (이진 검색을 필요 포인트 []) 포인트 인덱스 부동

쿠다 텍스처 메모리 2 단계는 매우 빠르게 할 수있는 이미지 어레이에서 직선 보간 값을 얻는

  • 용도. 그러나 커널의 대부분의 시간이 1 단계에서 소요되는 것으로 추측됩니다. 텍스처 메모리가 도움이 될 것이라고 생각하지 않습니다.

    공유 메모리를 아직 사용하지 않는 경우 배열을 공유 메모리로 이동하면 텍스처 메모리를 사용하는 것보다 훨씬 더 빠른 속도 향상을 얻을 수 있습니다. 최근 하드웨어에는 48k의 공유 메모리가 있으므로 배열이 24k (6k 요소) 미만인 경우 공유 메모리에 모두 들어 있어야합니다. 1 단계는 전역 메모리에서 매우 느린 지점 []의 연속되지 않은 읽기가 필요하기 때문에 공유 메모리의 이점을 크게 누릴 수 있습니다.

    배열이 공유 메모리에 맞지 않으면 배열을 각각 6k 개의 요소가있는 동일한 크기의 조각으로 분해하고 각 조각을 블록에 할당해야합니다. 각 블록을 당신이 반복하고있는 모든 점을 통해 읽도록하고 공유 메모리에 저장된 점 [] 배열의 부분 안에 있지 않으면 점을 무시하도록하십시오.