2012-11-14 2 views
0

이미지 매핑의 GPU 구현 (opencl)을 수행해야합니다.정방향 매핑 대 역 매핑

어딘가에 순방향 매핑이 병렬 구현에 더 적합하다는 것을 기억하는 것 같습니다. 그 이유는 무엇입니까?

그리고 누구나 이러한 매핑을 수행하는 방법에 대한 예제 코드가 있습니다 (가급적이면 GPU)?

답변

0

나에게 병렬 구현을위한 직관적 인 선택은 역방향, 정방향, 매핑이 될 것입니다.

여러 원본 픽셀이 단일 대상 픽셀에 매핑되는 경우를 고려하십시오. 순방향 매핑에서 각 원본 픽셀이 별개의 작업 항목으로 평가되면 대상 픽셀에 여러 종류의 동기화를 구현하여 다중 쓰기를 조정해야합니다. 역 매핑에서는 하나의 작업 항목 만 각 픽셀에 쓰는 것이 보장되므로 동기화 오버 헤드가 없습니다. 이미지 조작을위한 오픈 CL의 image2d_t 및 sampler_t 개념을 활용

예 역 매핑 커널 코드 : 물론

__kernel void warp(__read_only image2d_t srcImage, 
        __write_only image2d_t dstImage, 
        sample_r sampler) 
{ 
    int2 dstCoords = (int2){ get_global_id(0), get_global_id(1)}; 
    int2 srcCoords = my_warp_func_inverse(dstCoords); 
    float4 srcPixel = read_imagef(srcImage, sampler, srcCoords); 
    write_imagef(dstImage, dstCoords, srcPixel); 
} 

앞으로 매핑이 바람직 할 수도 예외가 있습니다. 예를 들어 소스 이미지가 크고 대상 이미지가 작은 경우 정방향 매핑을 사용하면 원본 이미지를 세그먼트로 분할 한 다음 __private 또는 __local에 캐시 된 세그먼트 데이터로 작업 항목 또는 작업 그룹간에이를 나눌 수 있습니다 주소 공간. 매핑 기능에 대한 사전 지식이 없으면 역 매핑은 소스 이미지의 일부에 액세스해야하므로 잠재적으로 __ 전역 메모리로 제한됩니다.