Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
422f802e
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
422f802e
编写于
8月 04, 2020
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #17922 from joy2myself:build_riscv_with_c++_intrin
上级
11eff8ba
ff4c3873
变更
9
展开全部
显示空白变更内容
内联
并排
Showing
9 changed file
with
1782 addition
and
0 deletion
+1782
-0
cmake/OpenCVCompilerOptimizations.cmake
cmake/OpenCVCompilerOptimizations.cmake
+11
-0
cmake/checks/cpu_rvv.cpp
cmake/checks/cpu_rvv.cpp
+23
-0
modules/core/include/opencv2/core/cv_cpu_dispatch.h
modules/core/include/opencv2/core/cv_cpu_dispatch.h
+8
-0
modules/core/include/opencv2/core/cv_cpu_helper.h
modules/core/include/opencv2/core/cv_cpu_helper.h
+21
-0
modules/core/include/opencv2/core/cvdef.h
modules/core/include/opencv2/core/cvdef.h
+4
-0
modules/core/include/opencv2/core/hal/intrin.hpp
modules/core/include/opencv2/core/hal/intrin.hpp
+4
-0
modules/core/include/opencv2/core/hal/intrin_rvv.hpp
modules/core/include/opencv2/core/hal/intrin_rvv.hpp
+1678
-0
modules/core/src/system.cpp
modules/core/src/system.cpp
+6
-0
platforms/linux/riscv64-clang.toolchain.cmake
platforms/linux/riscv64-clang.toolchain.cmake
+27
-0
未找到文件。
cmake/OpenCVCompilerOptimizations.cmake
浏览文件 @
422f802e
...
...
@@ -49,6 +49,7 @@ list(APPEND CPU_ALL_OPTIMIZATIONS "AVX512_COMMON;AVX512_KNL;AVX512_KNM;AVX512_SK
list
(
APPEND CPU_ALL_OPTIMIZATIONS NEON VFPV3 FP16
)
list
(
APPEND CPU_ALL_OPTIMIZATIONS MSA
)
list
(
APPEND CPU_ALL_OPTIMIZATIONS VSX VSX3
)
list
(
APPEND CPU_ALL_OPTIMIZATIONS RVV
)
list
(
REMOVE_DUPLICATES CPU_ALL_OPTIMIZATIONS
)
ocv_update
(
CPU_VFPV3_FEATURE_ALIAS
""
)
...
...
@@ -102,6 +103,8 @@ ocv_optimization_process_obsolete_option(ENABLE_NEON NEON OFF)
ocv_optimization_process_obsolete_option
(
ENABLE_VSX VSX ON
)
ocv_optimization_process_obsolete_option
(
ENABLE_RVV RVV OFF
)
macro
(
ocv_is_optimization_in_list resultvar check_opt
)
set
(
__checked
""
)
set
(
__queue
${
ARGN
}
)
...
...
@@ -366,6 +369,14 @@ elseif(PPC64LE)
set
(
CPU_DISPATCH
"VSX3"
CACHE STRING
"
${
HELP_CPU_DISPATCH
}
"
)
set
(
CPU_BASELINE
"VSX"
CACHE STRING
"
${
HELP_CPU_BASELINE
}
"
)
elseif
(
RISCV
)
ocv_update
(
CPU_RVV_TEST_FILE
"
${
OpenCV_SOURCE_DIR
}
/cmake/checks/cpu_rvv.cpp"
)
ocv_update
(
CPU_KNOWN_OPTIMIZATIONS
"RVV"
)
ocv_update
(
CPU_RVV_FLAGS_ON
""
)
set
(
CPU_DISPATCH
"RVV"
CACHE STRING
"
${
HELP_CPU_DISPATCH
}
"
)
set
(
CPU_BASELINE
"RVV"
CACHE STRING
"
${
HELP_CPU_BASELINE
}
"
)
endif
()
# Helper values for cmake-gui
...
...
cmake/checks/cpu_rvv.cpp
0 → 100644
浏览文件 @
422f802e
#include <stdio.h>
#if defined(__riscv)
# include <riscv_vector.h>
# define CV_RVV 1
#endif
#if defined CV_RVV
int
test
()
{
const
float
src
[]
=
{
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
};
vfloat32m1_t
val
=
vle32_v_f32m1
((
const
float
*
)(
src
));
return
(
int
)
vfmv_f_s_f32m1_f32
(
val
);
}
#else
#error "RISC-V vector extension(RVV) is not supported"
#endif
int
main
()
{
printf
(
"%d
\n
"
,
test
());
return
0
;
}
modules/core/include/opencv2/core/cv_cpu_dispatch.h
浏览文件 @
422f802e
...
...
@@ -168,6 +168,10 @@
# include <wasm_simd128.h>
#endif
#if defined CV_CPU_COMPILE_RVV
# define CV_RVV 1
#endif
#endif // CV_ENABLE_INTRINSICS && !CV_DISABLE_OPTIMIZATION && !__CUDACC__
#if defined CV_CPU_COMPILE_AVX && !defined CV_CPU_BASELINE_COMPILE_AVX
...
...
@@ -343,3 +347,7 @@ struct VZeroUpperGuard {
#ifndef CV_WASM_SIMD
# define CV_WASM_SIMD 0
#endif
#ifndef CV_RVV
# define CV_RVV 0
#endif
modules/core/include/opencv2/core/cv_cpu_helper.h
浏览文件 @
422f802e
...
...
@@ -483,5 +483,26 @@
#endif
#define __CV_CPU_DISPATCH_CHAIN_VSX3(fn, args, mode, ...) CV_CPU_CALL_VSX3(fn, args); __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_ ## mode(fn, args, __VA_ARGS__))
#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && defined CV_CPU_COMPILE_RVV
# define CV_TRY_RVV 1
# define CV_CPU_FORCE_RVV 1
# define CV_CPU_HAS_SUPPORT_RVV 1
# define CV_CPU_CALL_RVV(fn, args) return (cpu_baseline::fn args)
# define CV_CPU_CALL_RVV_(fn, args) return (opt_RVV::fn args)
#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && defined CV_CPU_DISPATCH_COMPILE_RVV
# define CV_TRY_RVV 1
# define CV_CPU_FORCE_RVV 0
# define CV_CPU_HAS_SUPPORT_RVV (cv::checkHardwareSupport(CV_CPU_RVV))
# define CV_CPU_CALL_RVV(fn, args) if (CV_CPU_HAS_SUPPORT_RVV) return (opt_RVV::fn args)
# define CV_CPU_CALL_RVV_(fn, args) if (CV_CPU_HAS_SUPPORT_RVV) return (opt_RVV::fn args)
#else
# define CV_TRY_RVV 0
# define CV_CPU_FORCE_RVV 0
# define CV_CPU_HAS_SUPPORT_RVV 0
# define CV_CPU_CALL_RVV(fn, args)
# define CV_CPU_CALL_RVV_(fn, args)
#endif
#define __CV_CPU_DISPATCH_CHAIN_RVV(fn, args, mode, ...) CV_CPU_CALL_RVV(fn, args); __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_ ## mode(fn, args, __VA_ARGS__))
#define CV_CPU_CALL_BASELINE(fn, args) return (cpu_baseline::fn args)
#define __CV_CPU_DISPATCH_CHAIN_BASELINE(fn, args, mode, ...) CV_CPU_CALL_BASELINE(fn, args)
/* last in sequence */
modules/core/include/opencv2/core/cvdef.h
浏览文件 @
422f802e
...
...
@@ -272,6 +272,8 @@ namespace cv {
#define CV_CPU_VSX 200
#define CV_CPU_VSX3 201
#define CV_CPU_RVV 210
// CPU features groups
#define CV_CPU_AVX512_SKX 256
#define CV_CPU_AVX512_COMMON 257
...
...
@@ -324,6 +326,8 @@ enum CpuFeatures {
CPU_VSX
=
200
,
CPU_VSX3
=
201
,
CPU_RVV
=
210
,
CPU_AVX512_SKX
=
256
,
//!< Skylake-X with AVX-512F/CD/BW/DQ/VL
CPU_AVX512_COMMON
=
257
,
//!< Common instructions AVX-512F/CD for all CPUs that support AVX-512
CPU_AVX512_KNL
=
258
,
//!< Knights Landing with AVX-512F/CD/ER/PF
...
...
modules/core/include/opencv2/core/hal/intrin.hpp
浏览文件 @
422f802e
...
...
@@ -199,6 +199,7 @@ using namespace CV_CPU_OPTIMIZATION_HAL_NAMESPACE;
# undef CV_VSX
# undef CV_FP16
# undef CV_MSA
# undef CV_RVV
#endif
#if (CV_SSE2 || CV_NEON || CV_VSX || CV_MSA || CV_WASM_SIMD) && !defined(CV_FORCE_SIMD128_CPP)
...
...
@@ -226,6 +227,9 @@ using namespace CV_CPU_OPTIMIZATION_HAL_NAMESPACE;
#elif CV_WASM_SIMD && !defined(CV_FORCE_SIMD128_CPP)
#include "opencv2/core/hal/intrin_wasm.hpp"
#elif CV_RVV && !defined(CV_FORCE_SIMD128_CPP)
#include "opencv2/core/hal/intrin_rvv.hpp"
#else
#include "opencv2/core/hal/intrin_cpp.hpp"
...
...
modules/core/include/opencv2/core/hal/intrin_rvv.hpp
0 → 100644
浏览文件 @
422f802e
此差异已折叠。
点击以展开。
modules/core/src/system.cpp
浏览文件 @
422f802e
...
...
@@ -399,6 +399,8 @@ struct HWFeatures
g_hwFeatureNames
[
CPU_AVX512_CNL
]
=
"AVX512-CNL"
;
g_hwFeatureNames
[
CPU_AVX512_CLX
]
=
"AVX512-CLX"
;
g_hwFeatureNames
[
CPU_AVX512_ICL
]
=
"AVX512-ICL"
;
g_hwFeatureNames
[
CPU_RVV
]
=
"RVV"
;
}
void
initialize
(
void
)
...
...
@@ -597,6 +599,10 @@ struct HWFeatures
have
[
CV_CPU_VSX3
]
=
(
CV_VSX3
);
#endif
#if defined __riscv && defined __riscv_vector
have
[
CV_CPU_RVV
]
=
true
;
#endif
bool
skip_baseline_check
=
false
;
#ifndef NO_GETENV
if
(
getenv
(
"OPENCV_SKIP_CPU_BASELINE_CHECK"
))
...
...
platforms/linux/riscv64-clang.toolchain.cmake
0 → 100644
浏览文件 @
422f802e
set
(
CMAKE_SYSTEM_NAME Linux
)
set
(
CMAKE_SYSTEM_PROCESSOR riscv64
)
set
(
RISCV_CLANG_BUILD_ROOT /opt/rvv-llvm CACHE PATH
"Path to CLANG for RISC-V cross compiler build directory"
)
set
(
RISCV_GCC_INSTALL_ROOT /opt/RISCV CACHE PATH
"Path to GCC for RISC-V cross compiler installation directory"
)
set
(
CMAKE_SYSROOT
${
RISCV_GCC_INSTALL_ROOT
}
/sysroot CACHE PATH
"RISC-V sysroot"
)
set
(
CLANG_TARGET_TRIPLE riscv64-unknown-linux-gnu
)
set
(
CMAKE_C_COMPILER
${
RISCV_CLANG_BUILD_ROOT
}
/bin/clang
)
set
(
CMAKE_C_COMPILER_TARGET
${
CLANG_TARGET_TRIPLE
}
)
set
(
CMAKE_CXX_COMPILER
${
RISCV_CLANG_BUILD_ROOT
}
/bin/clang++
)
set
(
CMAKE_CXX_COMPILER_TARGET
${
CLANG_TARGET_TRIPLE
}
)
set
(
CMAKE_ASM_COMPILER
${
RISCV_CLANG_BUILD_ROOT
}
/bin/clang
)
set
(
CMAKE_ASM_COMPILER_TARGET
${
CLANG_TARGET_TRIPLE
}
)
# Don't run the linker on compiler check
set
(
CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY
)
set
(
CMAKE_C_FLAGS
"-march=rv64gcv --gcc-toolchain=
${
RISCV_GCC_INSTALL_ROOT
}
-w
${
CMAKE_C_FLAGS
}
"
)
set
(
CMAKE_CXX_FLAGS
"-march=rv64gcv --gcc-toolchain=
${
RISCV_GCC_INSTALL_ROOT
}
-w
${
CXX_FLAGS
}
"
)
set
(
CMAKE_FIND_ROOT_PATH
${
CMAKE_SYSROOT
}
)
set
(
CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER
)
set
(
CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY
)
set
(
CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY
)
set
(
CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录