mirror of
https://github.com/opencv/opencv.git
synced 2024-11-29 05:29:54 +08:00
Thrust allocator for temporary storage used with thrust algorithms.
This commit is contained in:
parent
e04f372083
commit
da93a5527d
@ -54,6 +54,15 @@
|
|||||||
|
|
||||||
namespace cv { namespace cuda { namespace device
|
namespace cv { namespace cuda { namespace device
|
||||||
{
|
{
|
||||||
|
struct CV_EXPORTS ThrustAllocator
|
||||||
|
{
|
||||||
|
typedef uchar value_type;
|
||||||
|
|
||||||
|
virtual __device__ __host__ uchar* allocate(size_t numBytes) = 0;
|
||||||
|
virtual __device__ __host__ void free(uchar* ptr) = 0;
|
||||||
|
static ThrustAllocator& getAllocator();
|
||||||
|
static void setAllocator(ThrustAllocator* allocator);
|
||||||
|
};
|
||||||
#define OPENCV_CUDA_LOG_WARP_SIZE (5)
|
#define OPENCV_CUDA_LOG_WARP_SIZE (5)
|
||||||
#define OPENCV_CUDA_WARP_SIZE (1 << OPENCV_CUDA_LOG_WARP_SIZE)
|
#define OPENCV_CUDA_WARP_SIZE (1 << OPENCV_CUDA_LOG_WARP_SIZE)
|
||||||
#define OPENCV_CUDA_LOG_MEM_BANKS ((__CUDA_ARCH__ >= 200) ? 5 : 4) // 32 banks on fermi, 16 on tesla
|
#define OPENCV_CUDA_LOG_MEM_BANKS ((__CUDA_ARCH__ >= 200) ? 5 : 4) // 32 banks on fermi, 16 on tesla
|
||||||
|
@ -50,11 +50,52 @@
|
|||||||
|
|
||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
#include "opencv2/cudev.hpp"
|
#include "opencv2/cudev.hpp"
|
||||||
|
#include "opencv2/core/cuda/utility.hpp"
|
||||||
|
|
||||||
using namespace cv;
|
using namespace cv;
|
||||||
using namespace cv::cuda;
|
using namespace cv::cuda;
|
||||||
using namespace cv::cudev;
|
using namespace cv::cudev;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
class DefaultThrustAllocator: public cv::cuda::device::ThrustAllocator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
__device__ __host__ uchar* allocate(size_t numBytes)
|
||||||
|
{
|
||||||
|
#ifndef __CUDA_ARCH__
|
||||||
|
uchar* ptr;
|
||||||
|
CV_CUDEV_SAFE_CALL(cudaMalloc(&ptr, numBytes));
|
||||||
|
return ptr;
|
||||||
|
#else
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
__device__ __host__ void free(uchar* ptr)
|
||||||
|
{
|
||||||
|
#ifndef __CUDA_ARCH__
|
||||||
|
CV_CUDEV_SAFE_CALL(cudaFree(ptr));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
};
|
||||||
|
DefaultThrustAllocator defaultThrustAllocator;
|
||||||
|
cv::cuda::device::ThrustAllocator* g_thrustAllocator = &defaultThrustAllocator;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
cv::cuda::device::ThrustAllocator& cv::cuda::device::ThrustAllocator::getAllocator()
|
||||||
|
{
|
||||||
|
return *g_thrustAllocator;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cv::cuda::device::ThrustAllocator::setAllocator(cv::cuda::device::ThrustAllocator* allocator)
|
||||||
|
{
|
||||||
|
if(allocator == NULL)
|
||||||
|
g_thrustAllocator = &defaultThrustAllocator;
|
||||||
|
else
|
||||||
|
g_thrustAllocator = allocator;
|
||||||
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
class DefaultAllocator : public GpuMat::Allocator
|
class DefaultAllocator : public GpuMat::Allocator
|
||||||
|
Loading…
Reference in New Issue
Block a user