|
|
|
@ -46,6 +46,85 @@ using namespace cv; |
|
|
|
|
using namespace cv::gpu; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace
|
|
|
|
|
{ |
|
|
|
|
template <typename Comparer> |
|
|
|
|
bool compare(const std::string& str, int x, Comparer cmp) |
|
|
|
|
{ |
|
|
|
|
if (str.find_first_not_of(" ") == string::npos) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
std::stringstream stream(str); |
|
|
|
|
int val; |
|
|
|
|
|
|
|
|
|
while (!stream.eof()) |
|
|
|
|
{ |
|
|
|
|
stream >> val; |
|
|
|
|
if (cmp(val, x)) |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::builtWith(cv::gpu::GpuFeature feature) |
|
|
|
|
{ |
|
|
|
|
if (feature == NATIVE_DOUBLE) |
|
|
|
|
return hasEqualOrGreater(1, 3); |
|
|
|
|
if (feature == ATOMICS) |
|
|
|
|
return hasEqualOrGreater(1, 1); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::has(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return hasPtx(major, minor) || hasBin(major, minor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasPtx(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return ::compare(CUDA_ARCH_PTX, major * 10 + minor, std::equal_to<int>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasBin(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return ::compare(CUDA_ARCH_BIN, major * 10 + minor, std::equal_to<int>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasEqualOrLessPtx(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return ::compare(CUDA_ARCH_PTX, major * 10 + minor,
|
|
|
|
|
std::less_equal<int>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasEqualOrGreater(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return hasEqualOrGreaterPtx(major, minor) || |
|
|
|
|
hasEqualOrGreaterBin(major, minor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasEqualOrGreaterPtx(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return ::compare(CUDA_ARCH_PTX, major * 10 + minor,
|
|
|
|
|
std::greater_equal<int>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasEqualOrGreaterBin(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return ::compare(CUDA_ARCH_BIN, major * 10 + minor,
|
|
|
|
|
std::greater_equal<int>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if !defined (HAVE_CUDA) |
|
|
|
|
|
|
|
|
|
CV_EXPORTS int cv::gpu::getCudaEnabledDeviceCount() { return 0; } |
|
|
|
@ -57,13 +136,6 @@ CV_EXPORTS int cv::gpu::getNumberOfSMs(int /*device*/) { throw_nogpu(); return 0 |
|
|
|
|
CV_EXPORTS void cv::gpu::getGpuMemInfo(size_t& /*free*/, size_t& /*total*/) { throw_nogpu(); }
|
|
|
|
|
CV_EXPORTS bool cv::gpu::hasNativeDoubleSupport(int /*device*/) { throw_nogpu(); return false; } |
|
|
|
|
CV_EXPORTS bool cv::gpu::hasAtomicsSupport(int /*device*/) { throw_nogpu(); return false; } |
|
|
|
|
CV_EXPORTS bool cv::gpu::hasPtxVersion(int major, int minor) { throw_nogpu(); return false; } |
|
|
|
|
CV_EXPORTS bool cv::gpu::hasLessOrEqualPtxVersion(int major, int minor) { return false; } |
|
|
|
|
CV_EXPORTS bool cv::gpu::hasGreaterOrEqualPtxVersion(int major, int minor) { return false; } |
|
|
|
|
CV_EXPORTS bool cv::gpu::hasCubinVersion(int major, int minor) { return false; } |
|
|
|
|
CV_EXPORTS bool cv::gpu::hasGreaterOrEqualCubinVersion(int major, int minor) { return false; } |
|
|
|
|
CV_EXPORTS bool cv::gpu::hasVersion(int major, int minor) { return false; } |
|
|
|
|
CV_EXPORTS bool cv::gpu::hasGreaterOrEqualVersion(int major, int minor) { return false; } |
|
|
|
|
CV_EXPORTS bool cv::gpu::isCompatibleWith(int device) { throw_nogpu(); return false; } |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -139,85 +211,6 @@ CV_EXPORTS bool cv::gpu::hasAtomicsSupport(int device) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace
|
|
|
|
|
{ |
|
|
|
|
template <typename Comparer> |
|
|
|
|
bool compare(const std::string& str, int x, Comparer cmp) |
|
|
|
|
{ |
|
|
|
|
if (str.find_first_not_of(" ") == string::npos) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
std::stringstream stream(str); |
|
|
|
|
int val; |
|
|
|
|
|
|
|
|
|
while (!stream.eof()) |
|
|
|
|
{ |
|
|
|
|
stream >> val; |
|
|
|
|
if (cmp(val, x)) |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::builtWith(cv::gpu::GpuFeature feature) |
|
|
|
|
{ |
|
|
|
|
if (feature == NATIVE_DOUBLE) |
|
|
|
|
return hasEqualOrGreater(1, 3); |
|
|
|
|
if (feature == ATOMICS) |
|
|
|
|
return hasEqualOrGreater(1, 1); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::has(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return hasPtx(major, minor) || hasBin(major, minor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasPtx(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return ::compare(CUDA_ARCH_PTX, major * 10 + minor, std::equal_to<int>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasBin(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return ::compare(CUDA_ARCH_BIN, major * 10 + minor, std::equal_to<int>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasEqualOrLessPtx(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return ::compare(CUDA_ARCH_PTX, major * 10 + minor,
|
|
|
|
|
std::less_equal<int>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasEqualOrGreater(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return hasEqualOrGreaterPtx(major, minor) || |
|
|
|
|
hasEqualOrGreaterBin(major, minor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasEqualOrGreaterPtx(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return ::compare(CUDA_ARCH_PTX, major * 10 + minor,
|
|
|
|
|
std::greater_equal<int>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::TargetArchs::hasEqualOrGreaterBin(int major, int minor) |
|
|
|
|
{ |
|
|
|
|
return ::compare(CUDA_ARCH_BIN, major * 10 + minor,
|
|
|
|
|
std::greater_equal<int>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool cv::gpu::isCompatibleWith(int device) |
|
|
|
|
{ |
|
|
|
|
// According to the CUDA C Programming Guide Version 3.2: "PTX code
|
|
|
|
|