Skip to content

Commit

Permalink
Enable AscendC kernel operator
Browse files Browse the repository at this point in the history
AscendC is an extended syntax for the C/C++ language that can be used to
write operators that run on Ascend NPU.

This commit introduce an operator(threshold) written in AscendC. Others
can refer to this to implement other operators.

AscendC can implement efficient fusion operators according to needs, in
this case, threshold execution speed increased by nearly 4 times.

Co-authored-by: CaoMengqing <[email protected]>
  • Loading branch information
hipudding and MengqingCao committed Dec 28, 2023
1 parent c7602a8 commit 401eff9
Show file tree
Hide file tree
Showing 15 changed files with 706 additions and 92 deletions.
6 changes: 6 additions & 0 deletions modules/cannops/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,9 @@ ocv_include_directories(${CMAKE_SOURCE_DIR}/modules/ts/include)
ocv_add_accuracy_tests(DEPENDS_ON opencv_cannops)
ocv_add_perf_tests(DEPENDS_ON opencv_cannops)
ocv_add_samples(opencv_cannops)

# compile ascnedc kernels.
add_subdirectory(ascendc_kernels)
ocv_include_directories(${CMAKE_BINARY_DIR}/include/ascendc_kernels)
ocv_target_link_libraries(opencv_cannops PRIVATE ascendc_kernels)
ocv_target_link_libraries(opencv_test_cannops PRIVATE ascendc_kernels)
17 changes: 17 additions & 0 deletions modules/cannops/ascendc_kernels/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
set(SOC_VERSION "ascend310p3" CACHE STRING "system on chip type")
set(ASCEND_CANN_PACKAGE_PATH "/usr/local/Ascend/ascend-toolkit/latest" CACHE PATH "ASCEND CANN package installation directory")
set(RUN_MODE "npu" CACHE STRING "run mode: npu/sim/cpu")

if(EXISTS ${ASCEND_CANN_PACKAGE_PATH}/compiler/tikcpp/ascendc_kernel_cmake)
set(ASCENDC_CMAKE_DIR ${ASCEND_CANN_PACKAGE_PATH}/compiler/tikcpp/ascendc_kernel_cmake)
elseif(EXISTS ${ASCEND_CANN_PACKAGE_PATH}/ascendc_devkit/tikcpp/samples/cmake)
set(ASCENDC_CMAKE_DIR ${ASCEND_CANN_PACKAGE_PATH}/ascendc_devkit/tikcpp/samples/cmake)
else()
message(FATAL_ERROR "ascendc_kernel_cmake does not exist, please check whether the compiler package is installed.")
endif()

include(${ASCENDC_CMAKE_DIR}/ascendc.cmake)

ascendc_library(ascendc_kernels STATIC
threshold_opencv_kernel.cpp
)
22 changes: 22 additions & 0 deletions modules/cannops/ascendc_kernels/kernel_tiling_types.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#ifndef KERNEL_TILING_H
#define KERNEL_TILING_H

/*
* threshType:
* THRESH_BINARY = 0,
* THRESH_BINARY_INV = 1,
* THRESH_TRUNC = 2,
* THRESH_TOZERO = 3,
* THRESH_TOZERO_INV = 4,
*/
#pragma pack(push, 8)
struct ThresholdOpencvTilingData
{
float maxVal;
float thresh;
uint32_t totalLength;
uint8_t threshType;
uint8_t dtype;
};
#pragma pack(pop)
#endif // KERNEL_TILING_H
Loading

0 comments on commit 401eff9

Please sign in to comment.