forked from opencv/opencv
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request opencv#1083 from jet47:cuda-device-layer
- Loading branch information
Showing
93 changed files
with
20,508 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
if(NOT HAVE_CUDA) | ||
ocv_module_disable(cudev) | ||
endif() | ||
|
||
set(the_description "CUDA device layer") | ||
|
||
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4189 /wd4505 -Wundef -Wmissing-declarations -Wunused-function -Wunused-variable) | ||
|
||
ocv_add_module(cudev) | ||
|
||
file(GLOB_RECURSE lib_hdrs "include/opencv2/*.hpp") | ||
|
||
add_custom_target(${the_module} SOURCES ${lib_hdrs}) | ||
|
||
if(ENABLE_SOLUTION_FOLDERS) | ||
set_target_properties(${the_module} PROPERTIES FOLDER "modules") | ||
endif() | ||
|
||
foreach(var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG) | ||
# we remove /EHa as it generates warnings under windows | ||
string(REPLACE "/EHa" "" ${var} "${${var}}") | ||
|
||
# we remove -ggdb3 flag as it leads to preprocessor errors when compiling CUDA files (CUDA 4.1) | ||
string(REPLACE "-ggdb3" "" ${var} "${${var}}") | ||
|
||
# we remove -Wsign-promo as it generates warnings under linux | ||
string(REPLACE "-Wsign-promo" "" ${var} "${${var}}") | ||
|
||
# we remove -fvisibility-inlines-hidden because it's used for C++ compiler | ||
# but NVCC uses C compiler by default | ||
string(REPLACE "-fvisibility-inlines-hidden" "" ${var} "${${var}}") | ||
endforeach() | ||
|
||
if(BUILD_TESTS) | ||
add_subdirectory(test) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
/*M/////////////////////////////////////////////////////////////////////////////////////// | ||
// | ||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. | ||
// | ||
// By downloading, copying, installing or using the software you agree to this license. | ||
// If you do not agree to this license, do not download, install, | ||
// copy or use the software. | ||
// | ||
// | ||
// License Agreement | ||
// For Open Source Computer Vision Library | ||
// | ||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. | ||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved. | ||
// Copyright (C) 2013, OpenCV Foundation, all rights reserved. | ||
// Third party copyrights are property of their respective owners. | ||
// | ||
// Redistribution and use in source and binary forms, with or without modification, | ||
// are permitted provided that the following conditions are met: | ||
// | ||
// * Redistribution's of source code must retain the above copyright notice, | ||
// this list of conditions and the following disclaimer. | ||
// | ||
// * Redistribution's in binary form must reproduce the above copyright notice, | ||
// this list of conditions and the following disclaimer in the documentation | ||
// and/or other materials provided with the distribution. | ||
// | ||
// * The name of the copyright holders may not be used to endorse or promote products | ||
// derived from this software without specific prior written permission. | ||
// | ||
// This software is provided by the copyright holders and contributors "as is" and | ||
// any express or implied warranties, including, but not limited to, the implied | ||
// warranties of merchantability and fitness for a particular purpose are disclaimed. | ||
// In no event shall the Intel Corporation or contributors be liable for any direct, | ||
// indirect, incidental, special, exemplary, or consequential damages | ||
// (including, but not limited to, procurement of substitute goods or services; | ||
// loss of use, data, or profits; or business interruption) however caused | ||
// and on any theory of liability, whether in contract, strict liability, | ||
// or tort (including negligence or otherwise) arising in any way out of | ||
// the use of this software, even if advised of the possibility of such damage. | ||
// | ||
//M*/ | ||
|
||
#pragma once | ||
|
||
#ifndef __OPENCV_CUDEV_HPP__ | ||
#define __OPENCV_CUDEV_HPP__ | ||
|
||
#include "cudev/common.hpp" | ||
|
||
#include "cudev/util/atomic.hpp" | ||
#include "cudev/util/limits.hpp" | ||
#include "cudev/util/saturate_cast.hpp" | ||
#include "cudev/util/simd_functions.hpp" | ||
#include "cudev/util/tuple.hpp" | ||
#include "cudev/util/type_traits.hpp" | ||
#include "cudev/util/vec_math.hpp" | ||
#include "cudev/util/vec_traits.hpp" | ||
|
||
#include "cudev/functional/color_cvt.hpp" | ||
#include "cudev/functional/functional.hpp" | ||
#include "cudev/functional/tuple_adapter.hpp" | ||
|
||
#include "cudev/warp/reduce.hpp" | ||
#include "cudev/warp/scan.hpp" | ||
#include "cudev/warp/shuffle.hpp" | ||
#include "cudev/warp/warp.hpp" | ||
|
||
#include "cudev/block/block.hpp" | ||
#include "cudev/block/dynamic_smem.hpp" | ||
#include "cudev/block/reduce.hpp" | ||
#include "cudev/block/scan.hpp" | ||
#include "cudev/block/vec_distance.hpp" | ||
|
||
#include "cudev/grid/copy.hpp" | ||
#include "cudev/grid/glob_reduce.hpp" | ||
#include "cudev/grid/histogram.hpp" | ||
#include "cudev/grid/integral.hpp" | ||
#include "cudev/grid/pyramids.hpp" | ||
#include "cudev/grid/reduce_to_vec.hpp" | ||
#include "cudev/grid/split_merge.hpp" | ||
#include "cudev/grid/transform.hpp" | ||
#include "cudev/grid/transpose.hpp" | ||
|
||
#include "cudev/ptr2d/constant.hpp" | ||
#include "cudev/ptr2d/deriv.hpp" | ||
#include "cudev/ptr2d/extrapolation.hpp" | ||
#include "cudev/ptr2d/glob.hpp" | ||
#include "cudev/ptr2d/gpumat.hpp" | ||
#include "cudev/ptr2d/interpolation.hpp" | ||
#include "cudev/ptr2d/lut.hpp" | ||
#include "cudev/ptr2d/mask.hpp" | ||
#include "cudev/ptr2d/remap.hpp" | ||
#include "cudev/ptr2d/resize.hpp" | ||
#include "cudev/ptr2d/texture.hpp" | ||
#include "cudev/ptr2d/traits.hpp" | ||
#include "cudev/ptr2d/transform.hpp" | ||
#include "cudev/ptr2d/warping.hpp" | ||
#include "cudev/ptr2d/zip.hpp" | ||
|
||
#include "cudev/expr/binary_func.hpp" | ||
#include "cudev/expr/binary_op.hpp" | ||
#include "cudev/expr/color.hpp" | ||
#include "cudev/expr/deriv.hpp" | ||
#include "cudev/expr/expr.hpp" | ||
#include "cudev/expr/per_element_func.hpp" | ||
#include "cudev/expr/reduction.hpp" | ||
#include "cudev/expr/unary_func.hpp" | ||
#include "cudev/expr/unary_op.hpp" | ||
#include "cudev/expr/warping.hpp" | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
/*M/////////////////////////////////////////////////////////////////////////////////////// | ||
// | ||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. | ||
// | ||
// By downloading, copying, installing or using the software you agree to this license. | ||
// If you do not agree to this license, do not download, install, | ||
// copy or use the software. | ||
// | ||
// | ||
// License Agreement | ||
// For Open Source Computer Vision Library | ||
// | ||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. | ||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved. | ||
// Copyright (C) 2013, OpenCV Foundation, all rights reserved. | ||
// Third party copyrights are property of their respective owners. | ||
// | ||
// Redistribution and use in source and binary forms, with or without modification, | ||
// are permitted provided that the following conditions are met: | ||
// | ||
// * Redistribution's of source code must retain the above copyright notice, | ||
// this list of conditions and the following disclaimer. | ||
// | ||
// * Redistribution's in binary form must reproduce the above copyright notice, | ||
// this list of conditions and the following disclaimer in the documentation | ||
// and/or other materials provided with the distribution. | ||
// | ||
// * The name of the copyright holders may not be used to endorse or promote products | ||
// derived from this software without specific prior written permission. | ||
// | ||
// This software is provided by the copyright holders and contributors "as is" and | ||
// any express or implied warranties, including, but not limited to, the implied | ||
// warranties of merchantability and fitness for a particular purpose are disclaimed. | ||
// In no event shall the Intel Corporation or contributors be liable for any direct, | ||
// indirect, incidental, special, exemplary, or consequential damages | ||
// (including, but not limited to, procurement of substitute goods or services; | ||
// loss of use, data, or profits; or business interruption) however caused | ||
// and on any theory of liability, whether in contract, strict liability, | ||
// or tort (including negligence or otherwise) arising in any way out of | ||
// the use of this software, even if advised of the possibility of such damage. | ||
// | ||
//M*/ | ||
|
||
#pragma once | ||
|
||
#ifndef __OPENCV_CUDEV_BLOCK_BLOCK_HPP__ | ||
#define __OPENCV_CUDEV_BLOCK_BLOCK_HPP__ | ||
|
||
#include "../common.hpp" | ||
|
||
namespace cv { namespace cudev { | ||
|
||
struct Block | ||
{ | ||
__device__ __forceinline__ static uint blockId() | ||
{ | ||
return (blockIdx.z * gridDim.y + blockIdx.y) * gridDim.x + blockIdx.x; | ||
} | ||
|
||
__device__ __forceinline__ static uint blockSize() | ||
{ | ||
return blockDim.x * blockDim.y * blockDim.z; | ||
} | ||
|
||
__device__ __forceinline__ static uint threadLineId() | ||
{ | ||
return (threadIdx.z * blockDim.y + threadIdx.y) * blockDim.x + threadIdx.x; | ||
} | ||
}; | ||
|
||
template <class It, typename T> | ||
__device__ __forceinline__ static void blockFill(It beg, It end, const T& value) | ||
{ | ||
uint STRIDE = Block::blockSize(); | ||
It t = beg + Block::threadLineId(); | ||
|
||
for(; t < end; t += STRIDE) | ||
*t = value; | ||
} | ||
|
||
template <class OutIt, typename T> | ||
__device__ __forceinline__ static void blockYota(OutIt beg, OutIt end, T value) | ||
{ | ||
uint STRIDE = Block::blockSize(); | ||
uint tid = Block::threadLineId(); | ||
value += tid; | ||
|
||
for(OutIt t = beg + tid; t < end; t += STRIDE, value += STRIDE) | ||
*t = value; | ||
} | ||
|
||
template <class InIt, class OutIt> | ||
__device__ __forceinline__ static void blockCopy(InIt beg, InIt end, OutIt out) | ||
{ | ||
uint STRIDE = Block::blockSize(); | ||
InIt t = beg + Block::threadLineId(); | ||
OutIt o = out + (t - beg); | ||
|
||
for(; t < end; t += STRIDE, o += STRIDE) | ||
*o = *t; | ||
} | ||
|
||
template <class InIt, class OutIt, class UnOp> | ||
__device__ __forceinline__ static void blockTransfrom(InIt beg, InIt end, OutIt out, const UnOp& op) | ||
{ | ||
uint STRIDE = Block::blockSize(); | ||
InIt t = beg + Block::threadLineId(); | ||
OutIt o = out + (t - beg); | ||
|
||
for(; t < end; t += STRIDE, o += STRIDE) | ||
*o = op(*t); | ||
} | ||
|
||
template <class InIt1, class InIt2, class OutIt, class BinOp> | ||
__device__ __forceinline__ static void blockTransfrom(InIt1 beg1, InIt1 end1, InIt2 beg2, OutIt out, const BinOp& op) | ||
{ | ||
uint STRIDE = Block::blockSize(); | ||
InIt1 t1 = beg1 + Block::threadLineId(); | ||
InIt2 t2 = beg2 + Block::threadLineId(); | ||
OutIt o = out + (t1 - beg1); | ||
|
||
for(; t1 < end1; t1 += STRIDE, t2 += STRIDE, o += STRIDE) | ||
*o = op(*t1, *t2); | ||
} | ||
}} | ||
|
||
#endif |
Oops, something went wrong.