Allow OpenCL acceleration in every OpenCV module
This commit is contained in:
parent
d28df08eb0
commit
91ac9688a8
@ -782,7 +782,7 @@ if(HAVE_CUDA)
|
|||||||
status(" Use fast math:" CUDA_FAST_MATH THEN YES ELSE NO)
|
status(" Use fast math:" CUDA_FAST_MATH THEN YES ELSE NO)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(HAVE_OPENCL AND BUILD_opencv_ocl)
|
if(HAVE_OPENCL)
|
||||||
status("")
|
status("")
|
||||||
status(" OpenCL")
|
status(" OpenCL")
|
||||||
if(OPENCL_INCLUDE_DIR)
|
if(OPENCL_INCLUDE_DIR)
|
||||||
|
@ -432,10 +432,22 @@ macro(ocv_glob_module_sources)
|
|||||||
file(GLOB lib_hdrs "include/opencv2/${name}/*.hpp" "include/opencv2/${name}/*.h")
|
file(GLOB lib_hdrs "include/opencv2/${name}/*.hpp" "include/opencv2/${name}/*.h")
|
||||||
file(GLOB lib_hdrs_detail "include/opencv2/${name}/detail/*.hpp" "include/opencv2/${name}/detail/*.h")
|
file(GLOB lib_hdrs_detail "include/opencv2/${name}/detail/*.hpp" "include/opencv2/${name}/detail/*.h")
|
||||||
|
|
||||||
|
file(GLOB cl_kernels "src/opencl/*.cl")
|
||||||
|
|
||||||
source_group("Src" FILES ${lib_srcs} ${lib_int_hdrs})
|
source_group("Src" FILES ${lib_srcs} ${lib_int_hdrs})
|
||||||
source_group("Include" FILES ${lib_hdrs})
|
source_group("Include" FILES ${lib_hdrs})
|
||||||
source_group("Include\\detail" FILES ${lib_hdrs_detail})
|
source_group("Include\\detail" FILES ${lib_hdrs_detail})
|
||||||
|
|
||||||
|
if(HAVE_OPENCL AND cl_kernels)
|
||||||
|
ocv_include_directories(${OPENCL_INCLUDE_DIRS})
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/kernels.cpp"
|
||||||
|
COMMAND ${CMAKE_COMMAND} -DCL_DIR="${CMAKE_CURRENT_SOURCE_DIR}/src/opencl" -DOUTPUT="${CMAKE_CURRENT_BINARY_DIR}/kernels.cpp" -P "${OpenCV_SOURCE_DIR}/cmake/cl2cpp.cmake"
|
||||||
|
DEPENDS ${cl_kernels} "${OpenCV_SOURCE_DIR}/cmake/cl2cpp.cmake")
|
||||||
|
source_group("Src\\OpenCL" FILES ${cl_kernels} "${CMAKE_CURRENT_BINARY_DIR}/kernels.cpp")
|
||||||
|
list(APPEND lib_srcs ${cl_kernels} "${CMAKE_CURRENT_BINARY_DIR}/kernels.cpp")
|
||||||
|
endif()
|
||||||
|
|
||||||
ocv_set_module_sources(${ARGN} HEADERS ${lib_hdrs} ${lib_hdrs_detail} SOURCES ${lib_srcs} ${lib_int_hdrs})
|
ocv_set_module_sources(${ARGN} HEADERS ${lib_hdrs} ${lib_hdrs_detail} SOURCES ${lib_srcs} ${lib_int_hdrs})
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
@ -449,6 +461,9 @@ macro(ocv_create_module)
|
|||||||
|
|
||||||
if(NOT "${ARGN}" STREQUAL "SKIP_LINK")
|
if(NOT "${ARGN}" STREQUAL "SKIP_LINK")
|
||||||
target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_MODULE_${the_module}_DEPS_EXT} ${OPENCV_LINKER_LIBS} ${IPP_LIBS} ${ARGN})
|
target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_MODULE_${the_module}_DEPS_EXT} ${OPENCV_LINKER_LIBS} ${IPP_LIBS} ${ARGN})
|
||||||
|
if(HAVE_OPENCL AND OPENCL_LIBRARIES)
|
||||||
|
target_link_libraries(${the_module} ${OPENCL_LIBRARIES})
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_dependencies(opencv_modules ${the_module})
|
add_dependencies(opencv_modules ${the_module})
|
||||||
|
@ -3,45 +3,5 @@ if(NOT HAVE_OPENCL)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(the_description "OpenCL-accelerated Computer Vision")
|
set(the_description "OpenCL-accelerated Computer Vision")
|
||||||
ocv_add_module(ocl opencv_core opencv_imgproc opencv_features2d opencv_objdetect opencv_video opencv_nonfree)
|
ocv_define_module(ocl opencv_core opencv_imgproc opencv_features2d opencv_objdetect opencv_video opencv_nonfree)
|
||||||
ocv_module_include_directories(${OPENCL_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
file(GLOB CL_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/kernels/*.cl")
|
|
||||||
set(kernels_cpp "${CMAKE_CURRENT_BINARY_DIR}/kernels.cpp")
|
|
||||||
set(cl2cpp_script "${CMAKE_CURRENT_SOURCE_DIR}/cl2cpp.cmake")
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${kernels_cpp}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -DCL_DIR="${CMAKE_CURRENT_SOURCE_DIR}/src/kernels" -DOUTPUT="${kernels_cpp}" -P ${cl2cpp_script}
|
|
||||||
DEPENDS ${CL_FILES} ${cl2cpp_script})
|
|
||||||
|
|
||||||
file(GLOB lib_hdrs "include/opencv2/${name}/*.hpp" "include/opencv2/${name}/*.h")
|
|
||||||
file(GLOB lib_srcs "src/*.cpp")
|
|
||||||
file(GLOB lib_int_hdrs "src/*.h*")
|
|
||||||
|
|
||||||
source_group("Include" FILES ${lib_hdrs})
|
|
||||||
source_group("Src\\Host" FILES ${lib_srcs} ${lib_int_hdrs} ${kernels_cpp})
|
|
||||||
|
|
||||||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
||||||
|
|
||||||
ocv_set_module_sources(HEADERS ${lib_hdrs} SOURCES ${lib_int_hdrs} ${lib_srcs} ${kernels_cpp})
|
|
||||||
ocv_create_module(${OPENCL_LIBRARIES})
|
|
||||||
ocv_add_precompiled_headers(${the_module})
|
|
||||||
|
|
||||||
################################################################################################################
|
|
||||||
################################ OpenCL Module Tests ##################################################
|
|
||||||
################################################################################################################
|
|
||||||
file(GLOB test_srcs "test/*.cpp")
|
|
||||||
file(GLOB test_hdrs "test/*.hpp" "test/*.h")
|
|
||||||
|
|
||||||
ocv_add_accuracy_tests(FILES "Include" ${test_hdrs}
|
|
||||||
FILES "Src" ${test_srcs})
|
|
||||||
|
|
||||||
################################################################################################################
|
|
||||||
################################ OpenCL Module Performance ##################################################
|
|
||||||
################################################################################################################
|
|
||||||
file(GLOB perf_srcs "perf/*.cpp")
|
|
||||||
file(GLOB perf_hdrs "perf/*.hpp" "perf/*.h")
|
|
||||||
|
|
||||||
ocv_add_perf_tests(FILES "Include" ${perf_hdrs}
|
|
||||||
FILES "Src" ${perf_srcs})
|
|
||||||
|
@ -1,865 +0,0 @@
|
|||||||
#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics:enable
|
|
||||||
#define MAX_FLOAT 1e7f
|
|
||||||
|
|
||||||
int bit1Count(float x)
|
|
||||||
{
|
|
||||||
int c = 0;
|
|
||||||
int ix = (int)x;
|
|
||||||
|
|
||||||
for (int i = 0 ; i < 32 ; i++)
|
|
||||||
{
|
|
||||||
c += ix & 0x1;
|
|
||||||
ix >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (float)c;
|
|
||||||
}
|
|
||||||
/* 2dim launch, global size: dim0 is (query rows + block_size - 1) / block_size * block_size, dim1 is block_size
|
|
||||||
local size: dim0 is block_size, dim1 is block_size.
|
|
||||||
*/
|
|
||||||
__kernel void BruteForceMatch_UnrollMatch(
|
|
||||||
__global float *query,
|
|
||||||
__global float *train,
|
|
||||||
//__global float *mask,
|
|
||||||
__global int *bestTrainIdx,
|
|
||||||
__global float *bestDistance,
|
|
||||||
__local float *sharebuffer,
|
|
||||||
int block_size,
|
|
||||||
int max_desc_len,
|
|
||||||
int query_rows,
|
|
||||||
int query_cols,
|
|
||||||
int train_rows,
|
|
||||||
int train_cols,
|
|
||||||
int step,
|
|
||||||
int distType
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const int lidx = get_local_id(0);
|
|
||||||
const int lidy = get_local_id(1);
|
|
||||||
const int groupidx = get_group_id(0);
|
|
||||||
|
|
||||||
__local float *s_query = sharebuffer;
|
|
||||||
__local float *s_train = sharebuffer + block_size * max_desc_len;
|
|
||||||
|
|
||||||
int queryIdx = groupidx * block_size + lidy;
|
|
||||||
|
|
||||||
// load the query into local memory.
|
|
||||||
for (int i = 0 ; i < max_desc_len / block_size; i ++)
|
|
||||||
{
|
|
||||||
int loadx = lidx + i * block_size;
|
|
||||||
s_query[lidy * max_desc_len + loadx] = loadx < query_cols ? query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
float myBestDistance = MAX_FLOAT;
|
|
||||||
int myBestTrainIdx = -1;
|
|
||||||
|
|
||||||
// loopUnrolledCached to find the best trainIdx and best distance.
|
|
||||||
volatile int imgIdx = 0;
|
|
||||||
|
|
||||||
for (int t = 0 ; t < (train_rows + block_size - 1) / block_size ; t++)
|
|
||||||
{
|
|
||||||
float result = 0;
|
|
||||||
|
|
||||||
for (int i = 0 ; i < max_desc_len / block_size ; i++)
|
|
||||||
{
|
|
||||||
//load a block_size * block_size block into local train.
|
|
||||||
const int loadx = lidx + i * block_size;
|
|
||||||
s_train[lidx * block_size + lidy] = loadx < train_cols ? train[min(t * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
|
||||||
|
|
||||||
//synchronize to make sure each elem for reduceIteration in share memory is written already.
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
/* there are threee types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
|
||||||
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
|
||||||
|
|
||||||
switch (distType)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
result += fabs(s_query[lidy * max_desc_len + i * block_size + j] - s_train[j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
float qr = s_query[lidy * max_desc_len + i * block_size + j] - s_train[j * block_size + lidx];
|
|
||||||
result += qr * qr;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
//result += popcount((uint)s_query[lidy * max_desc_len + i * block_size + j] ^ (uint)s_train[j * block_size + lidx]);
|
|
||||||
result += bit1Count((uint)s_query[lidy * max_desc_len + i * block_size + j] ^(uint)s_train[j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
int trainIdx = t * block_size + lidx;
|
|
||||||
|
|
||||||
if (queryIdx < query_rows && trainIdx < train_rows && result < myBestDistance/* && mask(queryIdx, trainIdx)*/)
|
|
||||||
{
|
|
||||||
//bestImgIdx = imgIdx;
|
|
||||||
myBestDistance = result;
|
|
||||||
myBestTrainIdx = trainIdx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
__local float *s_distance = (__local float *)(sharebuffer);
|
|
||||||
__local int *s_trainIdx = (__local int *)(sharebuffer + block_size * block_size);
|
|
||||||
|
|
||||||
//find BestMatch
|
|
||||||
s_distance += lidy * block_size;
|
|
||||||
s_trainIdx += lidy * block_size;
|
|
||||||
s_distance[lidx] = myBestDistance;
|
|
||||||
s_trainIdx[lidx] = myBestTrainIdx;
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
//reduce -- now all reduce implement in each threads.
|
|
||||||
for (int k = 0 ; k < block_size; k++)
|
|
||||||
{
|
|
||||||
if (myBestDistance > s_distance[k])
|
|
||||||
{
|
|
||||||
myBestDistance = s_distance[k];
|
|
||||||
myBestTrainIdx = s_trainIdx[k];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (queryIdx < query_rows && lidx == 0)
|
|
||||||
{
|
|
||||||
bestTrainIdx[queryIdx] = myBestTrainIdx;
|
|
||||||
bestDistance[queryIdx] = myBestDistance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
__kernel void BruteForceMatch_Match(
|
|
||||||
__global float *query,
|
|
||||||
__global float *train,
|
|
||||||
//__global float *mask,
|
|
||||||
__global int *bestTrainIdx,
|
|
||||||
__global float *bestDistance,
|
|
||||||
__local float *sharebuffer,
|
|
||||||
int block_size,
|
|
||||||
int query_rows,
|
|
||||||
int query_cols,
|
|
||||||
int train_rows,
|
|
||||||
int train_cols,
|
|
||||||
int step,
|
|
||||||
int distType
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const int lidx = get_local_id(0);
|
|
||||||
const int lidy = get_local_id(1);
|
|
||||||
const int groupidx = get_group_id(0);
|
|
||||||
|
|
||||||
const int queryIdx = groupidx * block_size + lidy;
|
|
||||||
|
|
||||||
float myBestDistance = MAX_FLOAT;
|
|
||||||
int myBestTrainIdx = -1;
|
|
||||||
|
|
||||||
__local float *s_query = sharebuffer;
|
|
||||||
__local float *s_train = sharebuffer + block_size * block_size;
|
|
||||||
|
|
||||||
// loop
|
|
||||||
for (int t = 0 ; t < (train_rows + block_size - 1) / block_size ; t++)
|
|
||||||
{
|
|
||||||
//Dist dist;
|
|
||||||
float result = 0;
|
|
||||||
|
|
||||||
for (int i = 0 ; i < (query_cols + block_size - 1) / block_size ; i++)
|
|
||||||
{
|
|
||||||
const int loadx = lidx + i * block_size;
|
|
||||||
//load query and train into local memory
|
|
||||||
s_query[lidy * block_size + lidx] = 0;
|
|
||||||
s_train[lidx * block_size + lidy] = 0;
|
|
||||||
|
|
||||||
if (loadx < query_cols)
|
|
||||||
{
|
|
||||||
s_query[lidy * block_size + lidx] = query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx];
|
|
||||||
s_train[lidx * block_size + lidy] = train[min(t * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx];
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
/* there are threee types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
|
||||||
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
|
||||||
|
|
||||||
switch (distType)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
result += fabs(s_query[lidy * block_size + j] - s_train[j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
float qr = s_query[lidy * block_size + j] - s_train[j * block_size + lidx];
|
|
||||||
result += qr * qr;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
//result += popcount((uint)s_query[lidy * block_size + j] ^ (uint)s_train[j * block_size + lidx]);
|
|
||||||
result += bit1Count((uint)s_query[lidy * block_size + j] ^(uint)s_train[(uint)j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
const int trainIdx = t * block_size + lidx;
|
|
||||||
|
|
||||||
if (queryIdx < query_rows && trainIdx < train_rows && result < myBestDistance /*&& mask(queryIdx, trainIdx)*/)
|
|
||||||
{
|
|
||||||
//myBestImgidx = imgIdx;
|
|
||||||
myBestDistance = result;
|
|
||||||
myBestTrainIdx = trainIdx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
__local float *s_distance = (__local float *)sharebuffer;
|
|
||||||
__local int *s_trainIdx = (__local int *)(sharebuffer + block_size * block_size);
|
|
||||||
|
|
||||||
//findBestMatch
|
|
||||||
s_distance += lidy * block_size;
|
|
||||||
s_trainIdx += lidy * block_size;
|
|
||||||
s_distance[lidx] = myBestDistance;
|
|
||||||
s_trainIdx[lidx] = myBestTrainIdx;
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
//reduce -- now all reduce implement in each threads.
|
|
||||||
for (int k = 0 ; k < block_size; k++)
|
|
||||||
{
|
|
||||||
if (myBestDistance > s_distance[k])
|
|
||||||
{
|
|
||||||
myBestDistance = s_distance[k];
|
|
||||||
myBestTrainIdx = s_trainIdx[k];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (queryIdx < query_rows && lidx == 0)
|
|
||||||
{
|
|
||||||
bestTrainIdx[queryIdx] = myBestTrainIdx;
|
|
||||||
bestDistance[queryIdx] = myBestDistance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//radius_unrollmatch
|
|
||||||
__kernel void BruteForceMatch_RadiusUnrollMatch(
|
|
||||||
__global float *query,
|
|
||||||
__global float *train,
|
|
||||||
float maxDistance,
|
|
||||||
//__global float *mask,
|
|
||||||
__global int *bestTrainIdx,
|
|
||||||
__global float *bestDistance,
|
|
||||||
__global int *nMatches,
|
|
||||||
__local float *sharebuffer,
|
|
||||||
int block_size,
|
|
||||||
int max_desc_len,
|
|
||||||
int query_rows,
|
|
||||||
int query_cols,
|
|
||||||
int train_rows,
|
|
||||||
int train_cols,
|
|
||||||
int bestTrainIdx_cols,
|
|
||||||
int step,
|
|
||||||
int ostep,
|
|
||||||
int distType
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const int lidx = get_local_id(0);
|
|
||||||
const int lidy = get_local_id(1);
|
|
||||||
const int groupidx = get_group_id(0);
|
|
||||||
const int groupidy = get_group_id(1);
|
|
||||||
|
|
||||||
const int queryIdx = groupidy * block_size + lidy;
|
|
||||||
const int trainIdx = groupidx * block_size + lidx;
|
|
||||||
|
|
||||||
__local float *s_query = sharebuffer;
|
|
||||||
__local float *s_train = sharebuffer + block_size * block_size;
|
|
||||||
|
|
||||||
float result = 0;
|
|
||||||
|
|
||||||
for (int i = 0 ; i < max_desc_len / block_size ; ++i)
|
|
||||||
{
|
|
||||||
//load a block_size * block_size block into local train.
|
|
||||||
const int loadx = lidx + i * block_size;
|
|
||||||
|
|
||||||
s_query[lidy * block_size + lidx] = loadx < query_cols ? query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
|
||||||
s_train[lidx * block_size + lidy] = loadx < query_cols ? train[min(groupidx * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
|
||||||
|
|
||||||
//synchronize to make sure each elem for reduceIteration in share memory is written already.
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
/* there are three types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
|
||||||
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
|
||||||
|
|
||||||
switch (distType)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; ++j)
|
|
||||||
{
|
|
||||||
result += fabs(s_query[lidy * block_size + j] - s_train[j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; ++j)
|
|
||||||
{
|
|
||||||
float qr = s_query[lidy * block_size + j] - s_train[j * block_size + lidx];
|
|
||||||
result += qr * qr;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; ++j)
|
|
||||||
{
|
|
||||||
result += bit1Count((uint)s_query[lidy * block_size + j] ^(uint)s_train[j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (queryIdx < query_rows && trainIdx < train_rows && result < maxDistance/* && mask(queryIdx, trainIdx)*/)
|
|
||||||
{
|
|
||||||
unsigned int ind = atom_inc(nMatches + queryIdx/*, (unsigned int) -1*/);
|
|
||||||
|
|
||||||
if (ind < bestTrainIdx_cols)
|
|
||||||
{
|
|
||||||
//bestImgIdx = imgIdx;
|
|
||||||
bestTrainIdx[queryIdx * (ostep / sizeof(int)) + ind] = trainIdx;
|
|
||||||
bestDistance[queryIdx * (ostep / sizeof(float)) + ind] = result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//radius_match
|
|
||||||
__kernel void BruteForceMatch_RadiusMatch(
|
|
||||||
__global float *query,
|
|
||||||
__global float *train,
|
|
||||||
float maxDistance,
|
|
||||||
//__global float *mask,
|
|
||||||
__global int *bestTrainIdx,
|
|
||||||
__global float *bestDistance,
|
|
||||||
__global int *nMatches,
|
|
||||||
__local float *sharebuffer,
|
|
||||||
int block_size,
|
|
||||||
int query_rows,
|
|
||||||
int query_cols,
|
|
||||||
int train_rows,
|
|
||||||
int train_cols,
|
|
||||||
int bestTrainIdx_cols,
|
|
||||||
int step,
|
|
||||||
int ostep,
|
|
||||||
int distType
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const int lidx = get_local_id(0);
|
|
||||||
const int lidy = get_local_id(1);
|
|
||||||
const int groupidx = get_group_id(0);
|
|
||||||
const int groupidy = get_group_id(1);
|
|
||||||
|
|
||||||
const int queryIdx = groupidy * block_size + lidy;
|
|
||||||
const int trainIdx = groupidx * block_size + lidx;
|
|
||||||
|
|
||||||
__local float *s_query = sharebuffer;
|
|
||||||
__local float *s_train = sharebuffer + block_size * block_size;
|
|
||||||
|
|
||||||
float result = 0;
|
|
||||||
|
|
||||||
for (int i = 0 ; i < (query_cols + block_size - 1) / block_size ; ++i)
|
|
||||||
{
|
|
||||||
//load a block_size * block_size block into local train.
|
|
||||||
const int loadx = lidx + i * block_size;
|
|
||||||
|
|
||||||
s_query[lidy * block_size + lidx] = loadx < query_cols ? query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
|
||||||
s_train[lidx * block_size + lidy] = loadx < query_cols ? train[min(groupidx * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
|
||||||
|
|
||||||
//synchronize to make sure each elem for reduceIteration in share memory is written already.
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
/* there are three types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
|
||||||
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
|
||||||
|
|
||||||
switch (distType)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; ++j)
|
|
||||||
{
|
|
||||||
result += fabs(s_query[lidy * block_size + j] - s_train[j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; ++j)
|
|
||||||
{
|
|
||||||
float qr = s_query[lidy * block_size + j] - s_train[j * block_size + lidx];
|
|
||||||
result += qr * qr;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; ++j)
|
|
||||||
{
|
|
||||||
result += bit1Count((uint)s_query[lidy * block_size + j] ^(uint)s_train[j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (queryIdx < query_rows && trainIdx < train_rows && result < maxDistance/* && mask(queryIdx, trainIdx)*/)
|
|
||||||
{
|
|
||||||
unsigned int ind = atom_inc(nMatches + queryIdx/*, (unsigned int) -1*/);
|
|
||||||
|
|
||||||
if (ind < bestTrainIdx_cols)
|
|
||||||
{
|
|
||||||
//bestImgIdx = imgIdx;
|
|
||||||
bestTrainIdx[queryIdx * (ostep / sizeof(int)) + ind] = trainIdx;
|
|
||||||
bestDistance[queryIdx * (ostep / sizeof(float)) + ind] = result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
__kernel void BruteForceMatch_knnUnrollMatch(
|
|
||||||
__global float *query,
|
|
||||||
__global float *train,
|
|
||||||
//__global float *mask,
|
|
||||||
__global int2 *bestTrainIdx,
|
|
||||||
__global float2 *bestDistance,
|
|
||||||
__local float *sharebuffer,
|
|
||||||
int block_size,
|
|
||||||
int max_desc_len,
|
|
||||||
int query_rows,
|
|
||||||
int query_cols,
|
|
||||||
int train_rows,
|
|
||||||
int train_cols,
|
|
||||||
int step,
|
|
||||||
int distType
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const int lidx = get_local_id(0);
|
|
||||||
const int lidy = get_local_id(1);
|
|
||||||
const int groupidx = get_group_id(0);
|
|
||||||
|
|
||||||
const int queryIdx = groupidx * block_size + lidy;
|
|
||||||
local float *s_query = sharebuffer;
|
|
||||||
local float *s_train = sharebuffer + block_size * max_desc_len;
|
|
||||||
|
|
||||||
// load the query into local memory.
|
|
||||||
for (int i = 0 ; i < max_desc_len / block_size; i ++)
|
|
||||||
{
|
|
||||||
int loadx = lidx + i * block_size;
|
|
||||||
s_query[lidy * max_desc_len + loadx] = loadx < query_cols ? query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
float myBestDistance1 = MAX_FLOAT;
|
|
||||||
float myBestDistance2 = MAX_FLOAT;
|
|
||||||
int myBestTrainIdx1 = -1;
|
|
||||||
int myBestTrainIdx2 = -1;
|
|
||||||
|
|
||||||
//loopUnrolledCached
|
|
||||||
volatile int imgIdx = 0;
|
|
||||||
|
|
||||||
for (int t = 0 ; t < (train_rows + block_size - 1) / block_size ; t++)
|
|
||||||
{
|
|
||||||
float result = 0;
|
|
||||||
|
|
||||||
for (int i = 0 ; i < max_desc_len / block_size ; i++)
|
|
||||||
{
|
|
||||||
const int loadX = lidx + i * block_size;
|
|
||||||
//load a block_size * block_size block into local train.
|
|
||||||
const int loadx = lidx + i * block_size;
|
|
||||||
s_train[lidx * block_size + lidy] = loadx < train_cols ? train[min(t * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
|
||||||
|
|
||||||
//synchronize to make sure each elem for reduceIteration in share memory is written already.
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
/* there are threee types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
|
||||||
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
|
||||||
|
|
||||||
switch (distType)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
result += fabs(s_query[lidy * max_desc_len + i * block_size + j] - s_train[j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
float qr = s_query[lidy * max_desc_len + i * block_size + j] - s_train[j * block_size + lidx];
|
|
||||||
result += qr * qr;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
//result += popcount((uint)s_query[lidy * max_desc_len + i * block_size + j] ^ (uint)s_train[j * block_size + lidx]);
|
|
||||||
result += bit1Count((uint)s_query[lidy * max_desc_len + i * block_size + j] ^(uint)s_train[j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
const int trainIdx = t * block_size + lidx;
|
|
||||||
|
|
||||||
if (queryIdx < query_rows && trainIdx < train_rows)
|
|
||||||
{
|
|
||||||
if (result < myBestDistance1)
|
|
||||||
{
|
|
||||||
myBestDistance2 = myBestDistance1;
|
|
||||||
myBestTrainIdx2 = myBestTrainIdx1;
|
|
||||||
myBestDistance1 = result;
|
|
||||||
myBestTrainIdx1 = trainIdx;
|
|
||||||
}
|
|
||||||
else if (result < myBestDistance2)
|
|
||||||
{
|
|
||||||
myBestDistance2 = result;
|
|
||||||
myBestTrainIdx2 = trainIdx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
local float *s_distance = (local float *)sharebuffer;
|
|
||||||
local int *s_trainIdx = (local int *)(sharebuffer + block_size * block_size);
|
|
||||||
|
|
||||||
// find BestMatch
|
|
||||||
s_distance += lidy * block_size;
|
|
||||||
s_trainIdx += lidy * block_size;
|
|
||||||
|
|
||||||
s_distance[lidx] = myBestDistance1;
|
|
||||||
s_trainIdx[lidx] = myBestTrainIdx1;
|
|
||||||
|
|
||||||
float bestDistance1 = MAX_FLOAT;
|
|
||||||
float bestDistance2 = MAX_FLOAT;
|
|
||||||
int bestTrainIdx1 = -1;
|
|
||||||
int bestTrainIdx2 = -1;
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
if (lidx == 0)
|
|
||||||
{
|
|
||||||
for (int i = 0 ; i < block_size ; i++)
|
|
||||||
{
|
|
||||||
float val = s_distance[i];
|
|
||||||
|
|
||||||
if (val < bestDistance1)
|
|
||||||
{
|
|
||||||
bestDistance2 = bestDistance1;
|
|
||||||
bestTrainIdx2 = bestTrainIdx1;
|
|
||||||
|
|
||||||
bestDistance1 = val;
|
|
||||||
bestTrainIdx1 = s_trainIdx[i];
|
|
||||||
}
|
|
||||||
else if (val < bestDistance2)
|
|
||||||
{
|
|
||||||
bestDistance2 = val;
|
|
||||||
bestTrainIdx2 = s_trainIdx[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
s_distance[lidx] = myBestDistance2;
|
|
||||||
s_trainIdx[lidx] = myBestTrainIdx2;
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
if (lidx == 0)
|
|
||||||
{
|
|
||||||
for (int i = 0 ; i < block_size ; i++)
|
|
||||||
{
|
|
||||||
float val = s_distance[i];
|
|
||||||
|
|
||||||
if (val < bestDistance2)
|
|
||||||
{
|
|
||||||
bestDistance2 = val;
|
|
||||||
bestTrainIdx2 = s_trainIdx[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
myBestDistance1 = bestDistance1;
|
|
||||||
myBestDistance2 = bestDistance2;
|
|
||||||
|
|
||||||
myBestTrainIdx1 = bestTrainIdx1;
|
|
||||||
myBestTrainIdx2 = bestTrainIdx2;
|
|
||||||
|
|
||||||
if (queryIdx < query_rows && lidx == 0)
|
|
||||||
{
|
|
||||||
bestTrainIdx[queryIdx] = (int2)(myBestTrainIdx1, myBestTrainIdx2);
|
|
||||||
bestDistance[queryIdx] = (float2)(myBestDistance1, myBestDistance2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
__kernel void BruteForceMatch_knnMatch(
|
|
||||||
__global float *query,
|
|
||||||
__global float *train,
|
|
||||||
//__global float *mask,
|
|
||||||
__global int2 *bestTrainIdx,
|
|
||||||
__global float2 *bestDistance,
|
|
||||||
__local float *sharebuffer,
|
|
||||||
int block_size,
|
|
||||||
int query_rows,
|
|
||||||
int query_cols,
|
|
||||||
int train_rows,
|
|
||||||
int train_cols,
|
|
||||||
int step,
|
|
||||||
int distType
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const int lidx = get_local_id(0);
|
|
||||||
const int lidy = get_local_id(1);
|
|
||||||
const int groupidx = get_group_id(0);
|
|
||||||
|
|
||||||
const int queryIdx = groupidx * block_size + lidy;
|
|
||||||
local float *s_query = sharebuffer;
|
|
||||||
local float *s_train = sharebuffer + block_size * block_size;
|
|
||||||
|
|
||||||
float myBestDistance1 = MAX_FLOAT;
|
|
||||||
float myBestDistance2 = MAX_FLOAT;
|
|
||||||
int myBestTrainIdx1 = -1;
|
|
||||||
int myBestTrainIdx2 = -1;
|
|
||||||
|
|
||||||
//loop
|
|
||||||
for (int t = 0 ; t < (train_rows + block_size - 1) / block_size ; t++)
|
|
||||||
{
|
|
||||||
float result = 0.0f;
|
|
||||||
|
|
||||||
for (int i = 0 ; i < (query_cols + block_size - 1) / block_size ; i++)
|
|
||||||
{
|
|
||||||
const int loadx = lidx + i * block_size;
|
|
||||||
//load query and train into local memory
|
|
||||||
s_query[lidy * block_size + lidx] = 0;
|
|
||||||
s_train[lidx * block_size + lidy] = 0;
|
|
||||||
|
|
||||||
if (loadx < query_cols)
|
|
||||||
{
|
|
||||||
s_query[lidy * block_size + lidx] = query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx];
|
|
||||||
s_train[lidx * block_size + lidy] = train[min(t * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx];
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
/* there are threee types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
|
||||||
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
|
||||||
|
|
||||||
switch (distType)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
result += fabs(s_query[lidy * block_size + j] - s_train[j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
float qr = s_query[lidy * block_size + j] - s_train[j * block_size + lidx];
|
|
||||||
result += qr * qr;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
|
|
||||||
for (int j = 0 ; j < block_size ; j++)
|
|
||||||
{
|
|
||||||
//result += popcount((uint)s_query[lidy * block_size + j] ^ (uint)s_train[j * block_size + lidx]);
|
|
||||||
result += bit1Count((uint)s_query[lidy * block_size + j] ^(uint)s_train[(uint)j * block_size + lidx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
const int trainIdx = t * block_size + lidx;
|
|
||||||
|
|
||||||
if (queryIdx < query_rows && trainIdx < train_rows /*&& mask(queryIdx, trainIdx)*/)
|
|
||||||
{
|
|
||||||
if (result < myBestDistance1)
|
|
||||||
{
|
|
||||||
myBestDistance2 = myBestDistance1;
|
|
||||||
myBestTrainIdx2 = myBestTrainIdx1;
|
|
||||||
myBestDistance1 = result;
|
|
||||||
myBestTrainIdx1 = trainIdx;
|
|
||||||
}
|
|
||||||
else if (result < myBestDistance2)
|
|
||||||
{
|
|
||||||
myBestDistance2 = result;
|
|
||||||
myBestTrainIdx2 = trainIdx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
__local float *s_distance = (__local float *)sharebuffer;
|
|
||||||
__local int *s_trainIdx = (__local int *)(sharebuffer + block_size * block_size);
|
|
||||||
|
|
||||||
//findBestMatch
|
|
||||||
s_distance += lidy * block_size;
|
|
||||||
s_trainIdx += lidy * block_size;
|
|
||||||
|
|
||||||
s_distance[lidx] = myBestDistance1;
|
|
||||||
s_trainIdx[lidx] = myBestTrainIdx1;
|
|
||||||
|
|
||||||
float bestDistance1 = MAX_FLOAT;
|
|
||||||
float bestDistance2 = MAX_FLOAT;
|
|
||||||
int bestTrainIdx1 = -1;
|
|
||||||
int bestTrainIdx2 = -1;
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
if (lidx == 0)
|
|
||||||
{
|
|
||||||
for (int i = 0 ; i < block_size ; i++)
|
|
||||||
{
|
|
||||||
float val = s_distance[i];
|
|
||||||
|
|
||||||
if (val < bestDistance1)
|
|
||||||
{
|
|
||||||
bestDistance2 = bestDistance1;
|
|
||||||
bestTrainIdx2 = bestTrainIdx1;
|
|
||||||
|
|
||||||
bestDistance1 = val;
|
|
||||||
bestTrainIdx1 = s_trainIdx[i];
|
|
||||||
}
|
|
||||||
else if (val < bestDistance2)
|
|
||||||
{
|
|
||||||
bestDistance2 = val;
|
|
||||||
bestTrainIdx2 = s_trainIdx[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
s_distance[lidx] = myBestDistance2;
|
|
||||||
s_trainIdx[lidx] = myBestTrainIdx2;
|
|
||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
|
||||||
|
|
||||||
if (lidx == 0)
|
|
||||||
{
|
|
||||||
for (int i = 0 ; i < block_size ; i++)
|
|
||||||
{
|
|
||||||
float val = s_distance[i];
|
|
||||||
|
|
||||||
if (val < bestDistance2)
|
|
||||||
{
|
|
||||||
bestDistance2 = val;
|
|
||||||
bestTrainIdx2 = s_trainIdx[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
myBestDistance1 = bestDistance1;
|
|
||||||
myBestDistance2 = bestDistance2;
|
|
||||||
|
|
||||||
myBestTrainIdx1 = bestTrainIdx1;
|
|
||||||
myBestTrainIdx2 = bestTrainIdx2;
|
|
||||||
|
|
||||||
if (queryIdx < query_rows && lidx == 0)
|
|
||||||
{
|
|
||||||
bestTrainIdx[queryIdx] = (int2)(myBestTrainIdx1, myBestTrainIdx2);
|
|
||||||
bestDistance[queryIdx] = (float2)(myBestDistance1, myBestDistance2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
kernel void BruteForceMatch_calcDistanceUnrolled(
|
|
||||||
__global float *query,
|
|
||||||
__global float *train,
|
|
||||||
//__global float *mask,
|
|
||||||
__global float *allDist,
|
|
||||||
__local float *sharebuffer,
|
|
||||||
int block_size,
|
|
||||||
int max_desc_len,
|
|
||||||
int query_rows,
|
|
||||||
int query_cols,
|
|
||||||
int train_rows,
|
|
||||||
int train_cols,
|
|
||||||
int step,
|
|
||||||
int distType)
|
|
||||||
{
|
|
||||||
/* Todo */
|
|
||||||
}
|
|
||||||
|
|
||||||
kernel void BruteForceMatch_calcDistance(
|
|
||||||
__global float *query,
|
|
||||||
__global float *train,
|
|
||||||
//__global float *mask,
|
|
||||||
__global float *allDist,
|
|
||||||
__local float *sharebuffer,
|
|
||||||
int block_size,
|
|
||||||
int query_rows,
|
|
||||||
int query_cols,
|
|
||||||
int train_rows,
|
|
||||||
int train_cols,
|
|
||||||
int step,
|
|
||||||
int distType)
|
|
||||||
{
|
|
||||||
/* Todo */
|
|
||||||
}
|
|
||||||
|
|
||||||
kernel void BruteForceMatch_findBestMatch(
|
|
||||||
__global float *allDist,
|
|
||||||
__global int *bestTrainIdx,
|
|
||||||
__global float *bestDistance,
|
|
||||||
int k,
|
|
||||||
int block_size
|
|
||||||
)
|
|
||||||
{
|
|
||||||
/* Todo */
|
|
||||||
}
|
|
@ -73,17 +73,17 @@ __kernel void addWeighted_D0 (__global uchar *src1,int src1_step,int src1_offset
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
uchar4 src1_data ,src2_data;
|
uchar4 src1_data ,src2_data;
|
||||||
|
|
||||||
src1_data.x= src1_index+0 >= 0 ? src1[src1_index+0] : 0;
|
src1_data.x= src1_index+0 >= 0 ? src1[src1_index+0] : 0;
|
||||||
src1_data.y= src1_index+1 >= 0 ? src1[src1_index+1] : 0;
|
src1_data.y= src1_index+1 >= 0 ? src1[src1_index+1] : 0;
|
||||||
src1_data.z= src1_index+2 >= 0 ? src1[src1_index+2] : 0;
|
src1_data.z= src1_index+2 >= 0 ? src1[src1_index+2] : 0;
|
||||||
src1_data.w= src1_index+3 >= 0 ? src1[src1_index+3] : 0;
|
src1_data.w= src1_index+3 >= 0 ? src1[src1_index+3] : 0;
|
||||||
|
|
||||||
src2_data.x= src2_index+0 >= 0 ? src2[src2_index+0] : 0;
|
src2_data.x= src2_index+0 >= 0 ? src2[src2_index+0] : 0;
|
||||||
src2_data.y= src2_index+1 >= 0 ? src2[src2_index+1] : 0;
|
src2_data.y= src2_index+1 >= 0 ? src2[src2_index+1] : 0;
|
||||||
src2_data.z= src2_index+2 >= 0 ? src2[src2_index+2] : 0;
|
src2_data.z= src2_index+2 >= 0 ? src2[src2_index+2] : 0;
|
||||||
src2_data.w= src2_index+3 >= 0 ? src2[src2_index+3] : 0;
|
src2_data.w= src2_index+3 >= 0 ? src2[src2_index+3] : 0;
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
// short4 tmp = convert_short4_sat(src1_data) * alpha + convert_short4_sat(src2_data) * beta + gama;
|
// short4 tmp = convert_short4_sat(src1_data) * alpha + convert_short4_sat(src2_data) * beta + gama;
|
@ -320,4 +320,3 @@ __kernel void arithm_bitwise_and_D6 (__global char *src1, int src1_step, int src
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1135,4 +1135,3 @@ __kernel void arithm_bitwise_and_with_mask_C4_D6 (__global char *src1, int src1_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1055,4 +1055,3 @@ __kernel void arithm_s_bitwise_and_with_mask_C4_D6 (__global short *src1, int sr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -255,4 +255,3 @@ __kernel void arithm_bitwise_not_D6 (__global char *src, int src_step, int src_o
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -276,4 +276,3 @@ __kernel void arithm_bitwise_or_D6 (__global char *src1, int src1_step, int src1
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1135,4 +1135,3 @@ __kernel void arithm_bitwise_or_with_mask_C4_D6 (__global char *src1, int src1_s
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -911,4 +911,3 @@ __kernel void arithm_s_bitwise_or_C4_D6 (__global short *src1, int src1_step, in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1078,4 +1078,3 @@ __kernel void arithm_s_bitwise_or_with_mask_C4_D6 (__global short *src1, int src
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -324,4 +324,3 @@ __kernel void arithm_bitwise_xor_D6 (__global char *src1, int src1_step, int src
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1135,4 +1135,3 @@ __kernel void arithm_bitwise_xor_with_mask_C4_D6 (__global char *src1, int src1_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1055,4 +1055,3 @@ __kernel void arithm_s_bitwise_xor_with_mask_C4_D6 (__global short *src1, int sr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -69,22 +69,22 @@ __kernel void arithm_compare_eq_D0 (__global uchar *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
||||||
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -122,22 +122,22 @@ __kernel void arithm_compare_ne_D2 (__global ushort *src1, int src1_step, int sr
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
||||||
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
uchar4 tmp_data = convert_uchar4((src1_data == src2_data));
|
uchar4 tmp_data = convert_uchar4((src1_data == src2_data));
|
||||||
@ -172,22 +172,22 @@ __kernel void arithm_compare_eq_D3 (__global short *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
||||||
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -224,23 +224,23 @@ __kernel void arithm_compare_eq_D4 (__global int *src1, int src1_step, int src1_
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
|
|
||||||
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
||||||
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
uchar4 tmp_data = convert_uchar4((src1_data == src2_data));
|
uchar4 tmp_data = convert_uchar4((src1_data == src2_data));
|
||||||
@ -272,15 +272,15 @@ __kernel void arithm_compare_eq_D5 (__global float *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
||||||
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix)); if(src2_index < 0)
|
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix)); if(src2_index < 0)
|
||||||
{
|
{
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -314,22 +314,22 @@ __kernel void arithm_compare_eq_D6 (__global double *src1, int src1_step, int sr
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
||||||
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -365,22 +365,22 @@ __kernel void arithm_compare_gt_D0 (__global uchar *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
||||||
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -416,22 +416,22 @@ __kernel void arithm_compare_gt_D2 (__global ushort *src1, int src1_step, int sr
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
||||||
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -469,22 +469,22 @@ __kernel void arithm_compare_gt_D3 (__global short *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
||||||
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -518,23 +518,23 @@ __kernel void arithm_compare_gt_D4 (__global int *src1, int src1_step, int src1_
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
|
|
||||||
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
||||||
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -567,22 +567,22 @@ __kernel void arithm_compare_gt_D5 (__global float *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
||||||
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix));
|
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -616,22 +616,22 @@ __kernel void arithm_compare_gt_D6 (__global double *src1, int src1_step, int sr
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
||||||
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -668,22 +668,22 @@ __kernel void arithm_compare_ge_D0 (__global uchar *src1, int src1_step, int src
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
||||||
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -722,22 +722,22 @@ __kernel void arithm_compare_ge_D2 (__global ushort *src1, int src1_step, int sr
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
||||||
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -777,22 +777,22 @@ __kernel void arithm_compare_ge_D3 (__global short *src1, int src1_step, int src
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
||||||
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -828,23 +828,23 @@ __kernel void arithm_compare_ge_D4 (__global int *src1, int src1_step, int src1_
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
|
|
||||||
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
||||||
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
uchar4 tmp_data = convert_uchar4((src1_data >= src2_data));
|
uchar4 tmp_data = convert_uchar4((src1_data >= src2_data));
|
||||||
|
|
||||||
@ -877,23 +877,23 @@ __kernel void arithm_compare_ge_D5 (__global float *src1, int src1_step, int src
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
||||||
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix));
|
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
uchar4 tmp_data = convert_uchar4((src1_data >= src2_data));
|
uchar4 tmp_data = convert_uchar4((src1_data >= src2_data));
|
||||||
@ -927,22 +927,22 @@ __kernel void arithm_compare_ge_D6 (__global double *src1, int src1_step, int sr
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
||||||
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
} uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
} uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
uchar4 tmp_data = convert_uchar4((src1_data >= src2_data));
|
uchar4 tmp_data = convert_uchar4((src1_data >= src2_data));
|
||||||
|
|
||||||
dst_data.x = ((dst_index + 0 >= dst_start) && (dst_index + 0 < dst_end)) ? tmp_data.x : dst_data.x;
|
dst_data.x = ((dst_index + 0 >= dst_start) && (dst_index + 0 < dst_end)) ? tmp_data.x : dst_data.x;
|
||||||
@ -954,4 +954,3 @@ __kernel void arithm_compare_ge_D6 (__global double *src1, int src1_step, int sr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -65,22 +65,22 @@ __kernel void arithm_compare_ne_D0 (__global uchar *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
||||||
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -118,22 +118,22 @@ __kernel void arithm_compare_ne_D2 (__global ushort *src1, int src1_step, int sr
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
||||||
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
uchar4 tmp_data = convert_uchar4((src1_data != src2_data));
|
uchar4 tmp_data = convert_uchar4((src1_data != src2_data));
|
||||||
@ -169,22 +169,22 @@ __kernel void arithm_compare_ne_D3 (__global short *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
||||||
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -218,23 +218,23 @@ __kernel void arithm_compare_ne_D4 (__global int *src1, int src1_step, int src1_
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
|
|
||||||
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
||||||
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
uchar4 tmp_data = convert_uchar4((src1_data != src2_data));
|
uchar4 tmp_data = convert_uchar4((src1_data != src2_data));
|
||||||
@ -266,21 +266,21 @@ __kernel void arithm_compare_ne_D5 (__global float *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
||||||
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix)); if(src1_index < 0)
|
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix)); if(src1_index < 0)
|
||||||
{
|
{
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
uchar4 tmp_data = convert_uchar4((src1_data != src2_data));
|
uchar4 tmp_data = convert_uchar4((src1_data != src2_data));
|
||||||
@ -313,22 +313,22 @@ __kernel void arithm_compare_ne_D6 (__global double *src1, int src1_step, int sr
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
||||||
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -365,22 +365,22 @@ __kernel void arithm_compare_lt_D0 (__global uchar *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
||||||
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -418,22 +418,22 @@ __kernel void arithm_compare_lt_D2 (__global ushort *src1, int src1_step, int sr
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
||||||
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -470,22 +470,22 @@ __kernel void arithm_compare_lt_D3 (__global short *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
||||||
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -520,23 +520,23 @@ __kernel void arithm_compare_lt_D4 (__global int *src1, int src1_step, int src1_
|
|||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
|
|
||||||
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
||||||
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -571,22 +571,22 @@ __kernel void arithm_compare_lt_D5 (__global float *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
||||||
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix));
|
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -620,22 +620,22 @@ __kernel void arithm_compare_lt_D6 (__global double *src1, int src1_step, int sr
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
||||||
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -671,22 +671,22 @@ __kernel void arithm_compare_le_D0 (__global uchar *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
uchar4 src1_data = vload4(0, src1 + src1_index_fix);
|
||||||
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
uchar4 src2_data = vload4(0, src2 + src2_index_fix);
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
uchar4 tmp;
|
uchar4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -724,22 +724,22 @@ __kernel void arithm_compare_le_D2 (__global ushort *src1, int src1_step, int sr
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
ushort4 src1_data = vload4(0, (__global ushort *)((__global char *)src1 + src1_index));
|
||||||
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
ushort4 src2_data = vload4(0, (__global ushort *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -777,22 +777,22 @@ __kernel void arithm_compare_le_D3 (__global short *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
short4 src1_data = vload4(0, (__global short *)((__global char *)src1 + src1_index));
|
||||||
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
short4 src2_data = vload4(0, (__global short *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -826,23 +826,23 @@ __kernel void arithm_compare_le_D4 (__global int *src1, int src1_step, int src1_
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
|
|
||||||
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
int4 src1_data = vload4(0, (__global int *)((__global char *)src1 + src1_index));
|
||||||
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
int4 src2_data = vload4(0, (__global int *)((__global char *)src2 + src2_index));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
int4 tmp;
|
int4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
uchar4 tmp_data =convert_uchar4((src1_data <= src2_data));
|
uchar4 tmp_data =convert_uchar4((src1_data <= src2_data));
|
||||||
@ -874,22 +874,22 @@ __kernel void arithm_compare_le_D5 (__global float *src1, int src1_step, int src
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
float4 src1_data = vload4(0, (__global float *)((__global char *)src1 + src1_index_fix));
|
||||||
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix));
|
float4 src2_data = vload4(0, (__global float *)((__global char *)src2 + src2_index_fix));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
float4 tmp;
|
float4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
uchar4 tmp_data = convert_uchar4((src1_data <= src2_data));
|
uchar4 tmp_data = convert_uchar4((src1_data <= src2_data));
|
||||||
@ -922,22 +922,22 @@ __kernel void arithm_compare_le_D6 (__global double *src1, int src1_step, int sr
|
|||||||
int dst_start = mad24(y, dst_step, dst_offset);
|
int dst_start = mad24(y, dst_step, dst_offset);
|
||||||
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
|
||||||
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
int src1_index_fix = src1_index < 0 ? 0 : src1_index;
|
||||||
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
int src2_index_fix = src2_index < 0 ? 0 : src2_index;
|
||||||
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
double4 src1_data = vload4(0, (__global double *)((__global char *)src1 + src1_index_fix));
|
||||||
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
double4 src2_data = vload4(0, (__global double *)((__global char *)src2 + src2_index_fix));
|
||||||
if(src1_index < 0)
|
if(src1_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
tmp.xyzw = (src1_index == -2) ? src1_data.zwxy:src1_data.yzwx;
|
||||||
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
src1_data.xyzw = (src1_index == -1) ? src1_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src2_index < 0)
|
if(src2_index < 0)
|
||||||
{
|
{
|
||||||
double4 tmp;
|
double4 tmp;
|
||||||
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
tmp.xyzw = (src2_index == -2) ? src2_data.zwxy:src2_data.yzwx;
|
||||||
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
src2_data.xyzw = (src2_index == -1) ? src2_data.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
|
||||||
@ -952,5 +952,3 @@ __kernel void arithm_compare_le_D6 (__global double *src1, int src1_step, int sr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -455,5 +455,3 @@ __kernel void arithm_s_div_D6 (__global double *src, int src_step, int src_offse
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -240,4 +240,3 @@ __kernel void arithm_op_minMaxLoc_mask (int cols,int invalid_cols,int offset,int
|
|||||||
dst[gid + 3 * groupnum] = CONVERT_RES_TYPE(lm_maxloc[0]);
|
dst[gid + 3 * groupnum] = CONVERT_RES_TYPE(lm_maxloc[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -194,4 +194,3 @@ __kernel void arithm_op_minMax_mask (int cols,int invalid_cols,int offset,int el
|
|||||||
dst[gid + groupnum] = localmem_max[0];
|
dst[gid + groupnum] = localmem_max[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -203,4 +203,3 @@ __kernel void arithm_op_sum (int cols,int invalid_cols,int offset,int elemnum,in
|
|||||||
dst[gid] = localmem_sum[0];
|
dst[gid] = localmem_sum[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -245,4 +245,3 @@ __kernel void arithm_op_sum_3 (int cols,int invalid_cols,int offset,int elemnum,
|
|||||||
dst[gid*3+2] = localmem_sum3[0];
|
dst[gid*3+2] = localmem_sum3[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -138,4 +138,3 @@ __kernel void BlendLinear_C4_D5(
|
|||||||
dst[pos] = (img1[pos] * w1 + img2[pos] * w2) / (w1 + w2 + 1e-5f);
|
dst[pos] = (img1[pos] * w1 + img2[pos] * w2) / (w1 + w2 + 1e-5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
865
modules/ocl/src/opencl/brute_force_match.cl
Normal file
865
modules/ocl/src/opencl/brute_force_match.cl
Normal file
@ -0,0 +1,865 @@
|
|||||||
|
#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics:enable
|
||||||
|
#define MAX_FLOAT 1e7f
|
||||||
|
|
||||||
|
int bit1Count(float x)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
int ix = (int)x;
|
||||||
|
|
||||||
|
for (int i = 0 ; i < 32 ; i++)
|
||||||
|
{
|
||||||
|
c += ix & 0x1;
|
||||||
|
ix >>= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (float)c;
|
||||||
|
}
|
||||||
|
/* 2dim launch, global size: dim0 is (query rows + block_size - 1) / block_size * block_size, dim1 is block_size
|
||||||
|
local size: dim0 is block_size, dim1 is block_size.
|
||||||
|
*/
|
||||||
|
__kernel void BruteForceMatch_UnrollMatch(
|
||||||
|
__global float *query,
|
||||||
|
__global float *train,
|
||||||
|
//__global float *mask,
|
||||||
|
__global int *bestTrainIdx,
|
||||||
|
__global float *bestDistance,
|
||||||
|
__local float *sharebuffer,
|
||||||
|
int block_size,
|
||||||
|
int max_desc_len,
|
||||||
|
int query_rows,
|
||||||
|
int query_cols,
|
||||||
|
int train_rows,
|
||||||
|
int train_cols,
|
||||||
|
int step,
|
||||||
|
int distType
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const int lidx = get_local_id(0);
|
||||||
|
const int lidy = get_local_id(1);
|
||||||
|
const int groupidx = get_group_id(0);
|
||||||
|
|
||||||
|
__local float *s_query = sharebuffer;
|
||||||
|
__local float *s_train = sharebuffer + block_size * max_desc_len;
|
||||||
|
|
||||||
|
int queryIdx = groupidx * block_size + lidy;
|
||||||
|
|
||||||
|
// load the query into local memory.
|
||||||
|
for (int i = 0 ; i < max_desc_len / block_size; i ++)
|
||||||
|
{
|
||||||
|
int loadx = lidx + i * block_size;
|
||||||
|
s_query[lidy * max_desc_len + loadx] = loadx < query_cols ? query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float myBestDistance = MAX_FLOAT;
|
||||||
|
int myBestTrainIdx = -1;
|
||||||
|
|
||||||
|
// loopUnrolledCached to find the best trainIdx and best distance.
|
||||||
|
volatile int imgIdx = 0;
|
||||||
|
|
||||||
|
for (int t = 0 ; t < (train_rows + block_size - 1) / block_size ; t++)
|
||||||
|
{
|
||||||
|
float result = 0;
|
||||||
|
|
||||||
|
for (int i = 0 ; i < max_desc_len / block_size ; i++)
|
||||||
|
{
|
||||||
|
//load a block_size * block_size block into local train.
|
||||||
|
const int loadx = lidx + i * block_size;
|
||||||
|
s_train[lidx * block_size + lidy] = loadx < train_cols ? train[min(t * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
||||||
|
|
||||||
|
//synchronize to make sure each elem for reduceIteration in share memory is written already.
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
/* there are threee types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
||||||
|
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
||||||
|
|
||||||
|
switch (distType)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
result += fabs(s_query[lidy * max_desc_len + i * block_size + j] - s_train[j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
float qr = s_query[lidy * max_desc_len + i * block_size + j] - s_train[j * block_size + lidx];
|
||||||
|
result += qr * qr;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
//result += popcount((uint)s_query[lidy * max_desc_len + i * block_size + j] ^ (uint)s_train[j * block_size + lidx]);
|
||||||
|
result += bit1Count((uint)s_query[lidy * max_desc_len + i * block_size + j] ^(uint)s_train[j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int trainIdx = t * block_size + lidx;
|
||||||
|
|
||||||
|
if (queryIdx < query_rows && trainIdx < train_rows && result < myBestDistance/* && mask(queryIdx, trainIdx)*/)
|
||||||
|
{
|
||||||
|
//bestImgIdx = imgIdx;
|
||||||
|
myBestDistance = result;
|
||||||
|
myBestTrainIdx = trainIdx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
__local float *s_distance = (__local float *)(sharebuffer);
|
||||||
|
__local int *s_trainIdx = (__local int *)(sharebuffer + block_size * block_size);
|
||||||
|
|
||||||
|
//find BestMatch
|
||||||
|
s_distance += lidy * block_size;
|
||||||
|
s_trainIdx += lidy * block_size;
|
||||||
|
s_distance[lidx] = myBestDistance;
|
||||||
|
s_trainIdx[lidx] = myBestTrainIdx;
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
//reduce -- now all reduce implement in each threads.
|
||||||
|
for (int k = 0 ; k < block_size; k++)
|
||||||
|
{
|
||||||
|
if (myBestDistance > s_distance[k])
|
||||||
|
{
|
||||||
|
myBestDistance = s_distance[k];
|
||||||
|
myBestTrainIdx = s_trainIdx[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (queryIdx < query_rows && lidx == 0)
|
||||||
|
{
|
||||||
|
bestTrainIdx[queryIdx] = myBestTrainIdx;
|
||||||
|
bestDistance[queryIdx] = myBestDistance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
__kernel void BruteForceMatch_Match(
|
||||||
|
__global float *query,
|
||||||
|
__global float *train,
|
||||||
|
//__global float *mask,
|
||||||
|
__global int *bestTrainIdx,
|
||||||
|
__global float *bestDistance,
|
||||||
|
__local float *sharebuffer,
|
||||||
|
int block_size,
|
||||||
|
int query_rows,
|
||||||
|
int query_cols,
|
||||||
|
int train_rows,
|
||||||
|
int train_cols,
|
||||||
|
int step,
|
||||||
|
int distType
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const int lidx = get_local_id(0);
|
||||||
|
const int lidy = get_local_id(1);
|
||||||
|
const int groupidx = get_group_id(0);
|
||||||
|
|
||||||
|
const int queryIdx = groupidx * block_size + lidy;
|
||||||
|
|
||||||
|
float myBestDistance = MAX_FLOAT;
|
||||||
|
int myBestTrainIdx = -1;
|
||||||
|
|
||||||
|
__local float *s_query = sharebuffer;
|
||||||
|
__local float *s_train = sharebuffer + block_size * block_size;
|
||||||
|
|
||||||
|
// loop
|
||||||
|
for (int t = 0 ; t < (train_rows + block_size - 1) / block_size ; t++)
|
||||||
|
{
|
||||||
|
//Dist dist;
|
||||||
|
float result = 0;
|
||||||
|
|
||||||
|
for (int i = 0 ; i < (query_cols + block_size - 1) / block_size ; i++)
|
||||||
|
{
|
||||||
|
const int loadx = lidx + i * block_size;
|
||||||
|
//load query and train into local memory
|
||||||
|
s_query[lidy * block_size + lidx] = 0;
|
||||||
|
s_train[lidx * block_size + lidy] = 0;
|
||||||
|
|
||||||
|
if (loadx < query_cols)
|
||||||
|
{
|
||||||
|
s_query[lidy * block_size + lidx] = query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx];
|
||||||
|
s_train[lidx * block_size + lidy] = train[min(t * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx];
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
/* there are threee types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
||||||
|
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
||||||
|
|
||||||
|
switch (distType)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
result += fabs(s_query[lidy * block_size + j] - s_train[j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
float qr = s_query[lidy * block_size + j] - s_train[j * block_size + lidx];
|
||||||
|
result += qr * qr;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
//result += popcount((uint)s_query[lidy * block_size + j] ^ (uint)s_train[j * block_size + lidx]);
|
||||||
|
result += bit1Count((uint)s_query[lidy * block_size + j] ^(uint)s_train[(uint)j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
const int trainIdx = t * block_size + lidx;
|
||||||
|
|
||||||
|
if (queryIdx < query_rows && trainIdx < train_rows && result < myBestDistance /*&& mask(queryIdx, trainIdx)*/)
|
||||||
|
{
|
||||||
|
//myBestImgidx = imgIdx;
|
||||||
|
myBestDistance = result;
|
||||||
|
myBestTrainIdx = trainIdx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
__local float *s_distance = (__local float *)sharebuffer;
|
||||||
|
__local int *s_trainIdx = (__local int *)(sharebuffer + block_size * block_size);
|
||||||
|
|
||||||
|
//findBestMatch
|
||||||
|
s_distance += lidy * block_size;
|
||||||
|
s_trainIdx += lidy * block_size;
|
||||||
|
s_distance[lidx] = myBestDistance;
|
||||||
|
s_trainIdx[lidx] = myBestTrainIdx;
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
//reduce -- now all reduce implement in each threads.
|
||||||
|
for (int k = 0 ; k < block_size; k++)
|
||||||
|
{
|
||||||
|
if (myBestDistance > s_distance[k])
|
||||||
|
{
|
||||||
|
myBestDistance = s_distance[k];
|
||||||
|
myBestTrainIdx = s_trainIdx[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (queryIdx < query_rows && lidx == 0)
|
||||||
|
{
|
||||||
|
bestTrainIdx[queryIdx] = myBestTrainIdx;
|
||||||
|
bestDistance[queryIdx] = myBestDistance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//radius_unrollmatch
|
||||||
|
__kernel void BruteForceMatch_RadiusUnrollMatch(
|
||||||
|
__global float *query,
|
||||||
|
__global float *train,
|
||||||
|
float maxDistance,
|
||||||
|
//__global float *mask,
|
||||||
|
__global int *bestTrainIdx,
|
||||||
|
__global float *bestDistance,
|
||||||
|
__global int *nMatches,
|
||||||
|
__local float *sharebuffer,
|
||||||
|
int block_size,
|
||||||
|
int max_desc_len,
|
||||||
|
int query_rows,
|
||||||
|
int query_cols,
|
||||||
|
int train_rows,
|
||||||
|
int train_cols,
|
||||||
|
int bestTrainIdx_cols,
|
||||||
|
int step,
|
||||||
|
int ostep,
|
||||||
|
int distType
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const int lidx = get_local_id(0);
|
||||||
|
const int lidy = get_local_id(1);
|
||||||
|
const int groupidx = get_group_id(0);
|
||||||
|
const int groupidy = get_group_id(1);
|
||||||
|
|
||||||
|
const int queryIdx = groupidy * block_size + lidy;
|
||||||
|
const int trainIdx = groupidx * block_size + lidx;
|
||||||
|
|
||||||
|
__local float *s_query = sharebuffer;
|
||||||
|
__local float *s_train = sharebuffer + block_size * block_size;
|
||||||
|
|
||||||
|
float result = 0;
|
||||||
|
|
||||||
|
for (int i = 0 ; i < max_desc_len / block_size ; ++i)
|
||||||
|
{
|
||||||
|
//load a block_size * block_size block into local train.
|
||||||
|
const int loadx = lidx + i * block_size;
|
||||||
|
|
||||||
|
s_query[lidy * block_size + lidx] = loadx < query_cols ? query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
||||||
|
s_train[lidx * block_size + lidy] = loadx < query_cols ? train[min(groupidx * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
||||||
|
|
||||||
|
//synchronize to make sure each elem for reduceIteration in share memory is written already.
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
/* there are three types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
||||||
|
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
||||||
|
|
||||||
|
switch (distType)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; ++j)
|
||||||
|
{
|
||||||
|
result += fabs(s_query[lidy * block_size + j] - s_train[j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; ++j)
|
||||||
|
{
|
||||||
|
float qr = s_query[lidy * block_size + j] - s_train[j * block_size + lidx];
|
||||||
|
result += qr * qr;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; ++j)
|
||||||
|
{
|
||||||
|
result += bit1Count((uint)s_query[lidy * block_size + j] ^(uint)s_train[j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (queryIdx < query_rows && trainIdx < train_rows && result < maxDistance/* && mask(queryIdx, trainIdx)*/)
|
||||||
|
{
|
||||||
|
unsigned int ind = atom_inc(nMatches + queryIdx/*, (unsigned int) -1*/);
|
||||||
|
|
||||||
|
if (ind < bestTrainIdx_cols)
|
||||||
|
{
|
||||||
|
//bestImgIdx = imgIdx;
|
||||||
|
bestTrainIdx[queryIdx * (ostep / sizeof(int)) + ind] = trainIdx;
|
||||||
|
bestDistance[queryIdx * (ostep / sizeof(float)) + ind] = result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//radius_match
|
||||||
|
__kernel void BruteForceMatch_RadiusMatch(
|
||||||
|
__global float *query,
|
||||||
|
__global float *train,
|
||||||
|
float maxDistance,
|
||||||
|
//__global float *mask,
|
||||||
|
__global int *bestTrainIdx,
|
||||||
|
__global float *bestDistance,
|
||||||
|
__global int *nMatches,
|
||||||
|
__local float *sharebuffer,
|
||||||
|
int block_size,
|
||||||
|
int query_rows,
|
||||||
|
int query_cols,
|
||||||
|
int train_rows,
|
||||||
|
int train_cols,
|
||||||
|
int bestTrainIdx_cols,
|
||||||
|
int step,
|
||||||
|
int ostep,
|
||||||
|
int distType
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const int lidx = get_local_id(0);
|
||||||
|
const int lidy = get_local_id(1);
|
||||||
|
const int groupidx = get_group_id(0);
|
||||||
|
const int groupidy = get_group_id(1);
|
||||||
|
|
||||||
|
const int queryIdx = groupidy * block_size + lidy;
|
||||||
|
const int trainIdx = groupidx * block_size + lidx;
|
||||||
|
|
||||||
|
__local float *s_query = sharebuffer;
|
||||||
|
__local float *s_train = sharebuffer + block_size * block_size;
|
||||||
|
|
||||||
|
float result = 0;
|
||||||
|
|
||||||
|
for (int i = 0 ; i < (query_cols + block_size - 1) / block_size ; ++i)
|
||||||
|
{
|
||||||
|
//load a block_size * block_size block into local train.
|
||||||
|
const int loadx = lidx + i * block_size;
|
||||||
|
|
||||||
|
s_query[lidy * block_size + lidx] = loadx < query_cols ? query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
||||||
|
s_train[lidx * block_size + lidy] = loadx < query_cols ? train[min(groupidx * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
||||||
|
|
||||||
|
//synchronize to make sure each elem for reduceIteration in share memory is written already.
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
/* there are three types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
||||||
|
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
||||||
|
|
||||||
|
switch (distType)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; ++j)
|
||||||
|
{
|
||||||
|
result += fabs(s_query[lidy * block_size + j] - s_train[j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; ++j)
|
||||||
|
{
|
||||||
|
float qr = s_query[lidy * block_size + j] - s_train[j * block_size + lidx];
|
||||||
|
result += qr * qr;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; ++j)
|
||||||
|
{
|
||||||
|
result += bit1Count((uint)s_query[lidy * block_size + j] ^(uint)s_train[j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (queryIdx < query_rows && trainIdx < train_rows && result < maxDistance/* && mask(queryIdx, trainIdx)*/)
|
||||||
|
{
|
||||||
|
unsigned int ind = atom_inc(nMatches + queryIdx/*, (unsigned int) -1*/);
|
||||||
|
|
||||||
|
if (ind < bestTrainIdx_cols)
|
||||||
|
{
|
||||||
|
//bestImgIdx = imgIdx;
|
||||||
|
bestTrainIdx[queryIdx * (ostep / sizeof(int)) + ind] = trainIdx;
|
||||||
|
bestDistance[queryIdx * (ostep / sizeof(float)) + ind] = result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
__kernel void BruteForceMatch_knnUnrollMatch(
|
||||||
|
__global float *query,
|
||||||
|
__global float *train,
|
||||||
|
//__global float *mask,
|
||||||
|
__global int2 *bestTrainIdx,
|
||||||
|
__global float2 *bestDistance,
|
||||||
|
__local float *sharebuffer,
|
||||||
|
int block_size,
|
||||||
|
int max_desc_len,
|
||||||
|
int query_rows,
|
||||||
|
int query_cols,
|
||||||
|
int train_rows,
|
||||||
|
int train_cols,
|
||||||
|
int step,
|
||||||
|
int distType
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const int lidx = get_local_id(0);
|
||||||
|
const int lidy = get_local_id(1);
|
||||||
|
const int groupidx = get_group_id(0);
|
||||||
|
|
||||||
|
const int queryIdx = groupidx * block_size + lidy;
|
||||||
|
local float *s_query = sharebuffer;
|
||||||
|
local float *s_train = sharebuffer + block_size * max_desc_len;
|
||||||
|
|
||||||
|
// load the query into local memory.
|
||||||
|
for (int i = 0 ; i < max_desc_len / block_size; i ++)
|
||||||
|
{
|
||||||
|
int loadx = lidx + i * block_size;
|
||||||
|
s_query[lidy * max_desc_len + loadx] = loadx < query_cols ? query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float myBestDistance1 = MAX_FLOAT;
|
||||||
|
float myBestDistance2 = MAX_FLOAT;
|
||||||
|
int myBestTrainIdx1 = -1;
|
||||||
|
int myBestTrainIdx2 = -1;
|
||||||
|
|
||||||
|
//loopUnrolledCached
|
||||||
|
volatile int imgIdx = 0;
|
||||||
|
|
||||||
|
for (int t = 0 ; t < (train_rows + block_size - 1) / block_size ; t++)
|
||||||
|
{
|
||||||
|
float result = 0;
|
||||||
|
|
||||||
|
for (int i = 0 ; i < max_desc_len / block_size ; i++)
|
||||||
|
{
|
||||||
|
const int loadX = lidx + i * block_size;
|
||||||
|
//load a block_size * block_size block into local train.
|
||||||
|
const int loadx = lidx + i * block_size;
|
||||||
|
s_train[lidx * block_size + lidy] = loadx < train_cols ? train[min(t * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx] : 0;
|
||||||
|
|
||||||
|
//synchronize to make sure each elem for reduceIteration in share memory is written already.
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
/* there are threee types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
||||||
|
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
||||||
|
|
||||||
|
switch (distType)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
result += fabs(s_query[lidy * max_desc_len + i * block_size + j] - s_train[j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
float qr = s_query[lidy * max_desc_len + i * block_size + j] - s_train[j * block_size + lidx];
|
||||||
|
result += qr * qr;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
//result += popcount((uint)s_query[lidy * max_desc_len + i * block_size + j] ^ (uint)s_train[j * block_size + lidx]);
|
||||||
|
result += bit1Count((uint)s_query[lidy * max_desc_len + i * block_size + j] ^(uint)s_train[j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
const int trainIdx = t * block_size + lidx;
|
||||||
|
|
||||||
|
if (queryIdx < query_rows && trainIdx < train_rows)
|
||||||
|
{
|
||||||
|
if (result < myBestDistance1)
|
||||||
|
{
|
||||||
|
myBestDistance2 = myBestDistance1;
|
||||||
|
myBestTrainIdx2 = myBestTrainIdx1;
|
||||||
|
myBestDistance1 = result;
|
||||||
|
myBestTrainIdx1 = trainIdx;
|
||||||
|
}
|
||||||
|
else if (result < myBestDistance2)
|
||||||
|
{
|
||||||
|
myBestDistance2 = result;
|
||||||
|
myBestTrainIdx2 = trainIdx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
local float *s_distance = (local float *)sharebuffer;
|
||||||
|
local int *s_trainIdx = (local int *)(sharebuffer + block_size * block_size);
|
||||||
|
|
||||||
|
// find BestMatch
|
||||||
|
s_distance += lidy * block_size;
|
||||||
|
s_trainIdx += lidy * block_size;
|
||||||
|
|
||||||
|
s_distance[lidx] = myBestDistance1;
|
||||||
|
s_trainIdx[lidx] = myBestTrainIdx1;
|
||||||
|
|
||||||
|
float bestDistance1 = MAX_FLOAT;
|
||||||
|
float bestDistance2 = MAX_FLOAT;
|
||||||
|
int bestTrainIdx1 = -1;
|
||||||
|
int bestTrainIdx2 = -1;
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
if (lidx == 0)
|
||||||
|
{
|
||||||
|
for (int i = 0 ; i < block_size ; i++)
|
||||||
|
{
|
||||||
|
float val = s_distance[i];
|
||||||
|
|
||||||
|
if (val < bestDistance1)
|
||||||
|
{
|
||||||
|
bestDistance2 = bestDistance1;
|
||||||
|
bestTrainIdx2 = bestTrainIdx1;
|
||||||
|
|
||||||
|
bestDistance1 = val;
|
||||||
|
bestTrainIdx1 = s_trainIdx[i];
|
||||||
|
}
|
||||||
|
else if (val < bestDistance2)
|
||||||
|
{
|
||||||
|
bestDistance2 = val;
|
||||||
|
bestTrainIdx2 = s_trainIdx[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
s_distance[lidx] = myBestDistance2;
|
||||||
|
s_trainIdx[lidx] = myBestTrainIdx2;
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
if (lidx == 0)
|
||||||
|
{
|
||||||
|
for (int i = 0 ; i < block_size ; i++)
|
||||||
|
{
|
||||||
|
float val = s_distance[i];
|
||||||
|
|
||||||
|
if (val < bestDistance2)
|
||||||
|
{
|
||||||
|
bestDistance2 = val;
|
||||||
|
bestTrainIdx2 = s_trainIdx[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myBestDistance1 = bestDistance1;
|
||||||
|
myBestDistance2 = bestDistance2;
|
||||||
|
|
||||||
|
myBestTrainIdx1 = bestTrainIdx1;
|
||||||
|
myBestTrainIdx2 = bestTrainIdx2;
|
||||||
|
|
||||||
|
if (queryIdx < query_rows && lidx == 0)
|
||||||
|
{
|
||||||
|
bestTrainIdx[queryIdx] = (int2)(myBestTrainIdx1, myBestTrainIdx2);
|
||||||
|
bestDistance[queryIdx] = (float2)(myBestDistance1, myBestDistance2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
__kernel void BruteForceMatch_knnMatch(
|
||||||
|
__global float *query,
|
||||||
|
__global float *train,
|
||||||
|
//__global float *mask,
|
||||||
|
__global int2 *bestTrainIdx,
|
||||||
|
__global float2 *bestDistance,
|
||||||
|
__local float *sharebuffer,
|
||||||
|
int block_size,
|
||||||
|
int query_rows,
|
||||||
|
int query_cols,
|
||||||
|
int train_rows,
|
||||||
|
int train_cols,
|
||||||
|
int step,
|
||||||
|
int distType
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const int lidx = get_local_id(0);
|
||||||
|
const int lidy = get_local_id(1);
|
||||||
|
const int groupidx = get_group_id(0);
|
||||||
|
|
||||||
|
const int queryIdx = groupidx * block_size + lidy;
|
||||||
|
local float *s_query = sharebuffer;
|
||||||
|
local float *s_train = sharebuffer + block_size * block_size;
|
||||||
|
|
||||||
|
float myBestDistance1 = MAX_FLOAT;
|
||||||
|
float myBestDistance2 = MAX_FLOAT;
|
||||||
|
int myBestTrainIdx1 = -1;
|
||||||
|
int myBestTrainIdx2 = -1;
|
||||||
|
|
||||||
|
//loop
|
||||||
|
for (int t = 0 ; t < (train_rows + block_size - 1) / block_size ; t++)
|
||||||
|
{
|
||||||
|
float result = 0.0f;
|
||||||
|
|
||||||
|
for (int i = 0 ; i < (query_cols + block_size - 1) / block_size ; i++)
|
||||||
|
{
|
||||||
|
const int loadx = lidx + i * block_size;
|
||||||
|
//load query and train into local memory
|
||||||
|
s_query[lidy * block_size + lidx] = 0;
|
||||||
|
s_train[lidx * block_size + lidy] = 0;
|
||||||
|
|
||||||
|
if (loadx < query_cols)
|
||||||
|
{
|
||||||
|
s_query[lidy * block_size + lidx] = query[min(queryIdx, query_rows - 1) * (step / sizeof(float)) + loadx];
|
||||||
|
s_train[lidx * block_size + lidy] = train[min(t * block_size + lidy, train_rows - 1) * (step / sizeof(float)) + loadx];
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
/* there are threee types in the reducer. the first is L1Dist, which to sum the abs(v1, v2), the second is L2Dist, which to
|
||||||
|
sum the (v1 - v2) * (v1 - v2), the third is humming, which to popc(v1 ^ v2), popc is to count the bits are set to 1*/
|
||||||
|
|
||||||
|
switch (distType)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
result += fabs(s_query[lidy * block_size + j] - s_train[j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
float qr = s_query[lidy * block_size + j] - s_train[j * block_size + lidx];
|
||||||
|
result += qr * qr;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
|
||||||
|
for (int j = 0 ; j < block_size ; j++)
|
||||||
|
{
|
||||||
|
//result += popcount((uint)s_query[lidy * block_size + j] ^ (uint)s_train[j * block_size + lidx]);
|
||||||
|
result += bit1Count((uint)s_query[lidy * block_size + j] ^(uint)s_train[(uint)j * block_size + lidx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
const int trainIdx = t * block_size + lidx;
|
||||||
|
|
||||||
|
if (queryIdx < query_rows && trainIdx < train_rows /*&& mask(queryIdx, trainIdx)*/)
|
||||||
|
{
|
||||||
|
if (result < myBestDistance1)
|
||||||
|
{
|
||||||
|
myBestDistance2 = myBestDistance1;
|
||||||
|
myBestTrainIdx2 = myBestTrainIdx1;
|
||||||
|
myBestDistance1 = result;
|
||||||
|
myBestTrainIdx1 = trainIdx;
|
||||||
|
}
|
||||||
|
else if (result < myBestDistance2)
|
||||||
|
{
|
||||||
|
myBestDistance2 = result;
|
||||||
|
myBestTrainIdx2 = trainIdx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
__local float *s_distance = (__local float *)sharebuffer;
|
||||||
|
__local int *s_trainIdx = (__local int *)(sharebuffer + block_size * block_size);
|
||||||
|
|
||||||
|
//findBestMatch
|
||||||
|
s_distance += lidy * block_size;
|
||||||
|
s_trainIdx += lidy * block_size;
|
||||||
|
|
||||||
|
s_distance[lidx] = myBestDistance1;
|
||||||
|
s_trainIdx[lidx] = myBestTrainIdx1;
|
||||||
|
|
||||||
|
float bestDistance1 = MAX_FLOAT;
|
||||||
|
float bestDistance2 = MAX_FLOAT;
|
||||||
|
int bestTrainIdx1 = -1;
|
||||||
|
int bestTrainIdx2 = -1;
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
if (lidx == 0)
|
||||||
|
{
|
||||||
|
for (int i = 0 ; i < block_size ; i++)
|
||||||
|
{
|
||||||
|
float val = s_distance[i];
|
||||||
|
|
||||||
|
if (val < bestDistance1)
|
||||||
|
{
|
||||||
|
bestDistance2 = bestDistance1;
|
||||||
|
bestTrainIdx2 = bestTrainIdx1;
|
||||||
|
|
||||||
|
bestDistance1 = val;
|
||||||
|
bestTrainIdx1 = s_trainIdx[i];
|
||||||
|
}
|
||||||
|
else if (val < bestDistance2)
|
||||||
|
{
|
||||||
|
bestDistance2 = val;
|
||||||
|
bestTrainIdx2 = s_trainIdx[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
s_distance[lidx] = myBestDistance2;
|
||||||
|
s_trainIdx[lidx] = myBestTrainIdx2;
|
||||||
|
|
||||||
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
|
if (lidx == 0)
|
||||||
|
{
|
||||||
|
for (int i = 0 ; i < block_size ; i++)
|
||||||
|
{
|
||||||
|
float val = s_distance[i];
|
||||||
|
|
||||||
|
if (val < bestDistance2)
|
||||||
|
{
|
||||||
|
bestDistance2 = val;
|
||||||
|
bestTrainIdx2 = s_trainIdx[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myBestDistance1 = bestDistance1;
|
||||||
|
myBestDistance2 = bestDistance2;
|
||||||
|
|
||||||
|
myBestTrainIdx1 = bestTrainIdx1;
|
||||||
|
myBestTrainIdx2 = bestTrainIdx2;
|
||||||
|
|
||||||
|
if (queryIdx < query_rows && lidx == 0)
|
||||||
|
{
|
||||||
|
bestTrainIdx[queryIdx] = (int2)(myBestTrainIdx1, myBestTrainIdx2);
|
||||||
|
bestDistance[queryIdx] = (float2)(myBestDistance1, myBestDistance2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
kernel void BruteForceMatch_calcDistanceUnrolled(
|
||||||
|
__global float *query,
|
||||||
|
__global float *train,
|
||||||
|
//__global float *mask,
|
||||||
|
__global float *allDist,
|
||||||
|
__local float *sharebuffer,
|
||||||
|
int block_size,
|
||||||
|
int max_desc_len,
|
||||||
|
int query_rows,
|
||||||
|
int query_cols,
|
||||||
|
int train_rows,
|
||||||
|
int train_cols,
|
||||||
|
int step,
|
||||||
|
int distType)
|
||||||
|
{
|
||||||
|
/* Todo */
|
||||||
|
}
|
||||||
|
|
||||||
|
kernel void BruteForceMatch_calcDistance(
|
||||||
|
__global float *query,
|
||||||
|
__global float *train,
|
||||||
|
//__global float *mask,
|
||||||
|
__global float *allDist,
|
||||||
|
__local float *sharebuffer,
|
||||||
|
int block_size,
|
||||||
|
int query_rows,
|
||||||
|
int query_cols,
|
||||||
|
int train_rows,
|
||||||
|
int train_cols,
|
||||||
|
int step,
|
||||||
|
int distType)
|
||||||
|
{
|
||||||
|
/* Todo */
|
||||||
|
}
|
||||||
|
|
||||||
|
kernel void BruteForceMatch_findBestMatch(
|
||||||
|
__global float *allDist,
|
||||||
|
__global int *bestTrainIdx,
|
||||||
|
__global float *bestDistance,
|
||||||
|
int k,
|
||||||
|
int block_size
|
||||||
|
)
|
||||||
|
{
|
||||||
|
/* Todo */
|
||||||
|
}
|
@ -234,4 +234,3 @@ __kernel
|
|||||||
map_y[y * step_y + x] = ycoo;
|
map_y[y * step_y + x] = ycoo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -466,5 +466,3 @@ __kernel __attribute__((reqd_work_group_size(LSIZE0,LSIZE1,1))) void row_filter_
|
|||||||
dst[start_addr] = sum;
|
dst[start_addr] = sum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -559,7 +559,3 @@ if(result)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -283,4 +283,3 @@ __kernel void gpuscaleclassifier(global GpuHidHaarTreeNode *orinode, global GpuH
|
|||||||
newnode[counter].alpha[0] = t1.alpha[0];
|
newnode[counter].alpha[0] = t1.alpha[0];
|
||||||
newnode[counter].alpha[1] = t1.alpha[1];
|
newnode[counter].alpha[1] = t1.alpha[1];
|
||||||
}
|
}
|
||||||
|
|
@ -107,5 +107,3 @@ __kernel void convolve_D5 (__global float *src, __global float *temp1, __global
|
|||||||
dst[gy*(dst_step >> 2)+gx] = res;
|
dst[gy*(dst_step >> 2)+gx] = res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -267,4 +267,3 @@ __kernel __attribute__((reqd_work_group_size(256,1,1)))void equalizeHist(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
@ -484,4 +484,3 @@ __kernel void medianFilter5_C1_D5(__global float * src, __global float * dst, i
|
|||||||
dst[dstOffset + get_global_id(1)*dstStep + get_global_id(0)]=p12;
|
dst[dstOffset + get_global_id(1)*dstStep + get_global_id(0)]=p12;
|
||||||
}
|
}
|
||||||
#undef op(a,b)
|
#undef op(a,b)
|
||||||
|
|
@ -980,6 +980,3 @@ __kernel void remapLNF1Constant_C4_D5(__global float * dst, __global float const
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -411,4 +411,3 @@ __kernel void resizeNN_C4_D5(__global float4 * dst, __global float4 * src,
|
|||||||
dst[dpos] = src[spos];
|
dst[dpos] = src[spos];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -150,4 +150,3 @@ __kernel void threshold_C1_D5(__global const float * restrict src, __global floa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -682,4 +682,3 @@ __kernel void warpPerspectiveCubic_C4_D5(__global float4 * src, __global float4
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -821,4 +821,3 @@ void matchTemplate_Prepared_CCOFF_NORMED_C4_D0
|
|||||||
res[res_idx] = normAcc(num, denum);
|
res[res_idx] = normAcc(num, denum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -240,4 +240,3 @@ __kernel void meanshiftproc_kernel( __global uchar4* in, __global uchar4* outr,
|
|||||||
// outsp[basesp] =(short2)((short)x0,(short)y0);
|
// outsp[basesp] =(short2)((short)x0,(short)y0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -57,4 +57,3 @@ __kernel void set_to_with_mask(
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -53,7 +53,7 @@
|
|||||||
__kernel void split_vector_C4_D0 (__global uchar *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C4_D0 (__global uchar *mat_src, int src_step, int src_offset,
|
||||||
__global uchar *mat_dst0, int dst0_step, int dst0_offset,
|
__global uchar *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global uchar *mat_dst1, int dst1_step, int dst1_offset,
|
__global uchar *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global uchar *mat_dst2, int dst2_step, int dst2_offset,
|
__global uchar *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
__global uchar *mat_dst3, int dst3_step, int dst3_offset,
|
__global uchar *mat_dst3, int dst3_step, int dst3_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
@ -166,7 +166,7 @@ __kernel void split_vector_C4_D0 (__global uchar *mat_src, int src_step, int s
|
|||||||
__kernel void split_vector_C3_D0 (__global uchar *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C3_D0 (__global uchar *mat_src, int src_step, int src_offset,
|
||||||
__global uchar *mat_dst0, int dst0_step, int dst0_offset,
|
__global uchar *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global uchar *mat_dst1, int dst1_step, int dst1_offset,
|
__global uchar *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global uchar *mat_dst2, int dst2_step, int dst2_offset,
|
__global uchar *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -288,8 +288,8 @@ __kernel void split_vector_C2_D0 (__global uchar *mat_src, int src_step, int s
|
|||||||
int dst1_end = mad24(y, dst1_step, dst1_offset + dst_step1);
|
int dst1_end = mad24(y, dst1_step, dst1_offset + dst_step1);
|
||||||
int dst1_idx = mad24(y, dst1_step, dst1_offset + x & (int)0xfffffffc);
|
int dst1_idx = mad24(y, dst1_step, dst1_offset + x & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
||||||
int src2_index_fix = src_idx_1 < 0 ? 0 : src_idx_1;
|
int src2_index_fix = src_idx_1 < 0 ? 0 : src_idx_1;
|
||||||
uchar8 src_data_0 = vload8(0, mat_src + src_idx_0);
|
uchar8 src_data_0 = vload8(0, mat_src + src_idx_0);
|
||||||
uchar8 src_data_1 = vload8(0, mat_src + src_idx_1);
|
uchar8 src_data_1 = vload8(0, mat_src + src_idx_1);
|
||||||
if(src_idx_0 == -6)
|
if(src_idx_0 == -6)
|
||||||
@ -328,7 +328,7 @@ __kernel void split_vector_C2_D0 (__global uchar *mat_src, int src_step, int s
|
|||||||
__kernel void split_vector_C4_D1 (__global char *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C4_D1 (__global char *mat_src, int src_step, int src_offset,
|
||||||
__global char *mat_dst0, int dst0_step, int dst0_offset,
|
__global char *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global char *mat_dst1, int dst1_step, int dst1_offset,
|
__global char *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global char *mat_dst2, int dst2_step, int dst2_offset,
|
__global char *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
__global char *mat_dst3, int dst3_step, int dst3_offset,
|
__global char *mat_dst3, int dst3_step, int dst3_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
@ -439,7 +439,7 @@ __kernel void split_vector_C4_D1 (__global char *mat_src, int src_step, int sr
|
|||||||
__kernel void split_vector_C3_D1 (__global char *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C3_D1 (__global char *mat_src, int src_step, int src_offset,
|
||||||
__global char *mat_dst0, int dst0_step, int dst0_offset,
|
__global char *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global char *mat_dst1, int dst1_step, int dst1_offset,
|
__global char *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global char *mat_dst2, int dst2_step, int dst2_offset,
|
__global char *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -560,8 +560,8 @@ __kernel void split_vector_C2_D1 (__global char *mat_src, int src_step, int sr
|
|||||||
int dst1_start = mad24(y, dst1_step, dst1_offset);
|
int dst1_start = mad24(y, dst1_step, dst1_offset);
|
||||||
int dst1_end = mad24(y, dst1_step, dst1_offset + dst_step1);
|
int dst1_end = mad24(y, dst1_step, dst1_offset + dst_step1);
|
||||||
int dst1_idx = mad24(y, dst1_step, dst1_offset + x & (int)0xfffffffc);
|
int dst1_idx = mad24(y, dst1_step, dst1_offset + x & (int)0xfffffffc);
|
||||||
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
||||||
int src2_index_fix = src_idx_1 < 0 ? 0 : src_idx_1;
|
int src2_index_fix = src_idx_1 < 0 ? 0 : src_idx_1;
|
||||||
char8 src_data_0 = vload8(0, mat_src + src_idx_0);
|
char8 src_data_0 = vload8(0, mat_src + src_idx_0);
|
||||||
char8 src_data_1 = vload8(0, mat_src + src_idx_1);
|
char8 src_data_1 = vload8(0, mat_src + src_idx_1);
|
||||||
if(src_idx_0 == -6)
|
if(src_idx_0 == -6)
|
||||||
@ -599,7 +599,7 @@ __kernel void split_vector_C2_D1 (__global char *mat_src, int src_step, int sr
|
|||||||
__kernel void split_vector_C4_D2 (__global ushort *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C4_D2 (__global ushort *mat_src, int src_step, int src_offset,
|
||||||
__global ushort *mat_dst0, int dst0_step, int dst0_offset,
|
__global ushort *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global ushort *mat_dst1, int dst1_step, int dst1_offset,
|
__global ushort *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global ushort *mat_dst2, int dst2_step, int dst2_offset,
|
__global ushort *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
__global ushort *mat_dst3, int dst3_step, int dst3_offset,
|
__global ushort *mat_dst3, int dst3_step, int dst3_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
@ -630,7 +630,7 @@ __kernel void split_vector_C4_D2 (__global ushort *mat_src, int src_step, int
|
|||||||
int dst3_end = mad24(y, dst3_step, dst3_offset + dst_step1);
|
int dst3_end = mad24(y, dst3_step, dst3_offset + dst_step1);
|
||||||
int dst3_idx = mad24(y, dst3_step, dst3_offset + (x << 1) & (int)0xfffffffc);
|
int dst3_idx = mad24(y, dst3_step, dst3_offset + (x << 1) & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
||||||
ushort8 src_data0 = vload8(0,(__global ushort *)((__global char *)mat_src + src_idx_0));
|
ushort8 src_data0 = vload8(0,(__global ushort *)((__global char *)mat_src + src_idx_0));
|
||||||
if(src_idx_0 == -6)
|
if(src_idx_0 == -6)
|
||||||
src_data0.s01234567 = src_data0.s67012345;
|
src_data0.s01234567 = src_data0.s67012345;
|
||||||
@ -674,7 +674,7 @@ __kernel void split_vector_C4_D2 (__global ushort *mat_src, int src_step, int
|
|||||||
__kernel void split_vector_C3_D2 (__global ushort *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C3_D2 (__global ushort *mat_src, int src_step, int src_offset,
|
||||||
__global ushort *mat_dst0, int dst0_step, int dst0_offset,
|
__global ushort *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global ushort *mat_dst1, int dst1_step, int dst1_offset,
|
__global ushort *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global ushort *mat_dst2, int dst2_step, int dst2_offset,
|
__global ushort *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -760,22 +760,22 @@ __kernel void split_vector_C2_D2 (__global ushort *mat_src, int src_step, int
|
|||||||
int dst1_end = mad24(y, dst1_step, dst1_offset + dst_step1);
|
int dst1_end = mad24(y, dst1_step, dst1_offset + dst_step1);
|
||||||
int dst1_idx = mad24(y, dst1_step, dst1_offset + (x << 1) & (int)0xfffffffc);
|
int dst1_idx = mad24(y, dst1_step, dst1_offset + (x << 1) & (int)0xfffffffc);
|
||||||
|
|
||||||
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
||||||
int src2_index_fix = src_idx_1 < 0 ? 0 : src_idx_1;
|
int src2_index_fix = src_idx_1 < 0 ? 0 : src_idx_1;
|
||||||
ushort4 src_data_0 = vload4(0, (__global ushort *)((__global char *)mat_src + src1_index_fix));
|
ushort4 src_data_0 = vload4(0, (__global ushort *)((__global char *)mat_src + src1_index_fix));
|
||||||
ushort4 src_data_1 = vload4(0, (__global ushort *)((__global char *)mat_src + src2_index_fix));
|
ushort4 src_data_1 = vload4(0, (__global ushort *)((__global char *)mat_src + src2_index_fix));
|
||||||
if(src_idx_0 < 0)
|
if(src_idx_0 < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src_idx_0 == -2) ? src_data_0.zwxy : src_data_0.yzwx;
|
tmp.xyzw = (src_idx_0 == -2) ? src_data_0.zwxy : src_data_0.yzwx;
|
||||||
src_data_0.xyzw = (src_idx_1 == -1) ? src_data_0.wxyz:tmp.xyzw;
|
src_data_0.xyzw = (src_idx_1 == -1) ? src_data_0.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src_idx_1 < 0)
|
if(src_idx_1 < 0)
|
||||||
{
|
{
|
||||||
ushort4 tmp;
|
ushort4 tmp;
|
||||||
tmp.xyzw = (src_idx_1 == -2) ? src_data_1.zwxy : src_data_1.yzwx;
|
tmp.xyzw = (src_idx_1 == -2) ? src_data_1.zwxy : src_data_1.yzwx;
|
||||||
src_data_1.xyzw = (src_idx_1 == -1) ? src_data_1.wxyz : tmp.xyzw;
|
src_data_1.xyzw = (src_idx_1 == -1) ? src_data_1.wxyz : tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
ushort2 dst0_data = *((__global ushort2 *)((__global char *)mat_dst0 + dst0_idx));
|
ushort2 dst0_data = *((__global ushort2 *)((__global char *)mat_dst0 + dst0_idx));
|
||||||
ushort2 dst1_data = *((__global ushort2 *)((__global char *)mat_dst1 + dst1_idx));
|
ushort2 dst1_data = *((__global ushort2 *)((__global char *)mat_dst1 + dst1_idx));
|
||||||
@ -795,7 +795,7 @@ __kernel void split_vector_C2_D2 (__global ushort *mat_src, int src_step, int
|
|||||||
__kernel void split_vector_C4_D3 (__global short *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C4_D3 (__global short *mat_src, int src_step, int src_offset,
|
||||||
__global short *mat_dst0, int dst0_step, int dst0_offset,
|
__global short *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global short *mat_dst1, int dst1_step, int dst1_offset,
|
__global short *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global short *mat_dst2, int dst2_step, int dst2_offset,
|
__global short *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
__global short *mat_dst3, int dst3_step, int dst3_offset,
|
__global short *mat_dst3, int dst3_step, int dst3_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
@ -825,7 +825,7 @@ __kernel void split_vector_C4_D3 (__global short *mat_src, int src_step, int s
|
|||||||
int dst3_start = mad24(y, dst3_step, dst3_offset);
|
int dst3_start = mad24(y, dst3_step, dst3_offset);
|
||||||
int dst3_end = mad24(y, dst3_step, dst3_offset + dst_step1);
|
int dst3_end = mad24(y, dst3_step, dst3_offset + dst_step1);
|
||||||
int dst3_idx = mad24(y, dst3_step, dst3_offset + (x << 1) & (int)0xfffffffc);
|
int dst3_idx = mad24(y, dst3_step, dst3_offset + (x << 1) & (int)0xfffffffc);
|
||||||
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
||||||
short8 src_data0 = vload8(0,(__global short *)((__global char *)mat_src + src_idx_0));
|
short8 src_data0 = vload8(0,(__global short *)((__global char *)mat_src + src_idx_0));
|
||||||
|
|
||||||
if(src_idx_0 == -6)
|
if(src_idx_0 == -6)
|
||||||
@ -870,7 +870,7 @@ __kernel void split_vector_C4_D3 (__global short *mat_src, int src_step, int s
|
|||||||
__kernel void split_vector_C3_D3 (__global short *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C3_D3 (__global short *mat_src, int src_step, int src_offset,
|
||||||
__global short *mat_dst0, int dst0_step, int dst0_offset,
|
__global short *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global short *mat_dst1, int dst1_step, int dst1_offset,
|
__global short *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global short *mat_dst2, int dst2_step, int dst2_offset,
|
__global short *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -956,22 +956,22 @@ __kernel void split_vector_C2_D3 (__global short *mat_src, int src_step, int s
|
|||||||
int dst1_start = mad24(y, dst1_step, dst1_offset);
|
int dst1_start = mad24(y, dst1_step, dst1_offset);
|
||||||
int dst1_end = mad24(y, dst1_step, dst1_offset + dst_step1);
|
int dst1_end = mad24(y, dst1_step, dst1_offset + dst_step1);
|
||||||
int dst1_idx = mad24(y, dst1_step, dst1_offset + (x << 1) & (int)0xfffffffc);
|
int dst1_idx = mad24(y, dst1_step, dst1_offset + (x << 1) & (int)0xfffffffc);
|
||||||
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
int src1_index_fix = src_idx_0 < 0 ? 0 : src_idx_0;
|
||||||
int src2_index_fix = src_idx_1 < 0 ? 0 : src_idx_1;
|
int src2_index_fix = src_idx_1 < 0 ? 0 : src_idx_1;
|
||||||
short4 src_data_0 = vload4(0, (__global short *)((__global char *)mat_src + src_idx_0));
|
short4 src_data_0 = vload4(0, (__global short *)((__global char *)mat_src + src_idx_0));
|
||||||
short4 src_data_1 = vload4(0, (__global short *)((__global char *)mat_src + src_idx_1));
|
short4 src_data_1 = vload4(0, (__global short *)((__global char *)mat_src + src_idx_1));
|
||||||
if(src_idx_0 < 0)
|
if(src_idx_0 < 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = (src_idx_0 == -2) ? src_data_0.zwxy : src_data_0.yzwx;
|
tmp.xyzw = (src_idx_0 == -2) ? src_data_0.zwxy : src_data_0.yzwx;
|
||||||
src_data_0.xyzw = (src_idx_0 == -1) ? src_data_0.wxyz:tmp.xyzw;
|
src_data_0.xyzw = (src_idx_0 == -1) ? src_data_0.wxyz:tmp.xyzw;
|
||||||
}
|
}
|
||||||
if(src_idx_1< 0)
|
if(src_idx_1< 0)
|
||||||
{
|
{
|
||||||
short4 tmp;
|
short4 tmp;
|
||||||
tmp.xyzw = ( src_idx_1== -2) ? src_data_1.zwxy : src_data_1.yzwx;
|
tmp.xyzw = ( src_idx_1== -2) ? src_data_1.zwxy : src_data_1.yzwx;
|
||||||
src_data_1.xyzw = ( src_idx_1== -1) ? src_data_1.wxyz : tmp.xyzw;
|
src_data_1.xyzw = ( src_idx_1== -1) ? src_data_1.wxyz : tmp.xyzw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
short2 dst0_data = *((__global short2 *)((__global char *)mat_dst0 + dst0_idx));
|
short2 dst0_data = *((__global short2 *)((__global char *)mat_dst0 + dst0_idx));
|
||||||
@ -992,7 +992,7 @@ __kernel void split_vector_C2_D3 (__global short *mat_src, int src_step, int s
|
|||||||
__kernel void split_vector_C4_D4 (__global int *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C4_D4 (__global int *mat_src, int src_step, int src_offset,
|
||||||
__global int *mat_dst0, int dst0_step, int dst0_offset,
|
__global int *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global int *mat_dst1, int dst1_step, int dst1_offset,
|
__global int *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global int *mat_dst2, int dst2_step, int dst2_offset,
|
__global int *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
__global int *mat_dst3, int dst3_step, int dst3_offset,
|
__global int *mat_dst3, int dst3_step, int dst3_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
@ -1019,7 +1019,7 @@ __kernel void split_vector_C4_D4 (__global int *mat_src, int src_step, int src
|
|||||||
__kernel void split_vector_C3_D4 (__global int *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C3_D4 (__global int *mat_src, int src_step, int src_offset,
|
||||||
__global int *mat_dst0, int dst0_step, int dst0_offset,
|
__global int *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global int *mat_dst1, int dst1_step, int dst1_offset,
|
__global int *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global int *mat_dst2, int dst2_step, int dst2_offset,
|
__global int *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1068,7 +1068,7 @@ __kernel void split_vector_C2_D4 (__global int *mat_src, int src_step, int src
|
|||||||
__kernel void split_vector_C4_D5 (__global float *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C4_D5 (__global float *mat_src, int src_step, int src_offset,
|
||||||
__global float *mat_dst0, int dst0_step, int dst0_offset,
|
__global float *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global float *mat_dst1, int dst1_step, int dst1_offset,
|
__global float *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global float *mat_dst2, int dst2_step, int dst2_offset,
|
__global float *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
__global float *mat_dst3, int dst3_step, int dst3_offset,
|
__global float *mat_dst3, int dst3_step, int dst3_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
@ -1096,7 +1096,7 @@ __kernel void split_vector_C4_D5 (__global float *mat_src, int src_step, int s
|
|||||||
__kernel void split_vector_C3_D5 (__global float *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C3_D5 (__global float *mat_src, int src_step, int src_offset,
|
||||||
__global float *mat_dst0, int dst0_step, int dst0_offset,
|
__global float *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global float *mat_dst1, int dst1_step, int dst1_offset,
|
__global float *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global float *mat_dst2, int dst2_step, int dst2_offset,
|
__global float *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1146,7 +1146,7 @@ __kernel void split_vector_C2_D5 (__global float *mat_src, int src_step, int s
|
|||||||
__kernel void split_vector_C4_D6 (__global double *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C4_D6 (__global double *mat_src, int src_step, int src_offset,
|
||||||
__global double *mat_dst0, int dst0_step, int dst0_offset,
|
__global double *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global double *mat_dst1, int dst1_step, int dst1_offset,
|
__global double *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global double *mat_dst2, int dst2_step, int dst2_offset,
|
__global double *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
__global double *mat_dst3, int dst3_step, int dst3_offset,
|
__global double *mat_dst3, int dst3_step, int dst3_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
@ -1174,7 +1174,7 @@ __kernel void split_vector_C4_D6 (__global double *mat_src, int src_step, int
|
|||||||
__kernel void split_vector_C3_D6 (__global double *mat_src, int src_step, int src_offset,
|
__kernel void split_vector_C3_D6 (__global double *mat_src, int src_step, int src_offset,
|
||||||
__global double *mat_dst0, int dst0_step, int dst0_offset,
|
__global double *mat_dst0, int dst0_step, int dst0_offset,
|
||||||
__global double *mat_dst1, int dst1_step, int dst1_offset,
|
__global double *mat_dst1, int dst1_step, int dst1_offset,
|
||||||
__global double *mat_dst2, int dst2_step, int dst2_offset,
|
__global double *mat_dst2, int dst2_step, int dst2_offset,
|
||||||
int rows, int cols, int dst_step1)
|
int rows, int cols, int dst_step1)
|
||||||
|
|
||||||
{
|
{
|
Loading…
x
Reference in New Issue
Block a user