加速图像处理的神器: INTEL ISPC编译器基于CMAKE快速创建VISUAL STUDIO项目

Posted 帅的发光发亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加速图像处理的神器: INTEL ISPC编译器基于CMAKE快速创建VISUAL STUDIO项目相关的知识,希望对你有一定的参考价值。

INTEL ISPC编译器基于CMAKE快速创建VISUAL STUDIO项目

把ISPC集成进Visual Studio项目的方法很多,最简单的是把ISPC编译命令设置在Pre-Build Event或者Custom Build Tool里面,例如这篇文章 将英特尔 SPMD 程序编译器(ispc)集成至 Microsoft Visual Studio。这种比较适合把ISPC整合进现有的项目里。

下面介绍利用ISPC 自带例程的cmake来创建项目。

ISPC例程的文件结构

ISPC release包解压缩以后有个examples目录
examples 根目录下

  • CMakeLists.txt, 这个是创建整个solution的总入口
  • tasksys.cpp, timing.h 是让ISPC程序可以创建多任务来充分利用CPU多核的代码

examples\\simple…mandelbrot等目录

  • 每个目录下都是一个单独ISPC测试项目的所有代码

examples\\cmake目录

  • AddISPCExample.cmake 是供当前solution下各个项目添加配置ISPC文件的cmake脚本

配置我们的项目

这里我们需要借用一些example目录里面的脚本

首先创建一个项目目录 ispc_cmake

  1. 将examples目录里的CMakeLists.txt, tasksys.cpp, timing.h拷贝到ispc_cmake目录下
  2. 将examples目录下的cmake目录拷贝到ispc_cmake目录下
  3. 在这个目录下新建一个目录kmeans_ispc,用来放项目的文件, 我借用了ISPC开发包的examples\\simple项目来测试,所以把examples\\simple下的CMakeLists.txt,simple.cpp, simple.ispc复制到ispc_cmake\\kmeans_ispc目录里

ispc_cmake下面文件:

kmeans_ispc下面文件:

接下来修改ispc_cmake目录下的CmakeLists.txt

cmake_minimum_required(VERSION 3.12)
 
# 这里是VS solution的名字
set (PROJECT_NAME ispc_cmake)
project($PROJECT_NAME)
 
include($CMAKE_CURRENT_SOURCE_DIR/cmake/AddISPCExample.cmake)
 
if(WIN32)
    add_compile_definitions(WIN32)
    add_compile_options(/EHsc)
endif()
 
if (ISPC_BUILD)
    set (ISPC_EXECUTABLE $<TARGET_FILE:ispc>)
    set (EXAMPLES_ROOT $CMAKE_SOURCE_DIR/examples)
else()
    find_program (ISPC_EXECUTABLE ispc)
    if (NOT ISPC_EXECUTABLE)
        message(FATAL_ERROR "Failed to find ispc" )
    endif()
    set (EXAMPLES_ROOT $CMAKE_CURRENT_SOURCE_DIR)
endif()
 
# 这里放我们项目目录的名字
add_subdirectory(kmeans_ispc)

修改ispc_cmake\\kmeans_ispc目录下的CmakeLists.txt

# 这里需要ISPC编译器编译的文件的名字
set (ISPC_SRC_NAME "simple")
 
# 测试的cpp文件的名字
set (TARGET_SOURCES $CMAKE_CURRENT_SOURCE_DIR/simple.cpp)
 
# 这里告诉ISPC生成哪些平台的代码,包括了sse2/ssd4/avx1/avx2/avx512
set (ISPC_IA_TARGETS "sse2-i32x4,sse4-i32x8,avx1-i32x8,avx2-i32x8,avx512knl-i32x16,avx512skx-i32x16" CACHE STRING "ISPC IA targets")
 
set (ISPC_ARM_TARGETS "neon" CACHE STRING "ISPC ARM targets")
 
# 这里NAME是VS里面project的名字
# USE_COMMON_SETTINGS, 这个参数告诉cmake把tasksys.cpp也编译进去
add_ispc_example(NAME "ispc_kmeans"
              ISPC_IA_TARGETS $ISPC_IA_TARGETS
              ISPC_ARM_TARGETS $ISPC_ARM_TARGETS
              ISPC_SRC_NAME $ISPC_SRC_NAME
              TARGET_SOURCES $TARGET_SOURCES
              USE_COMMON_SETTINGS)

CMAKE生成项目,编译

命令行下进入ispc_test目录,运行:

mkdir build
cd build
cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release

就可以在build\\kmeans_ispc\\Release目录下得到ispc_kmeans.exe

这时候用VS打开build目录下的ispc_cmake.sln

就可以像开发普通C++项目一样随意修改和编译cpp和ispc文件了,

运行也是一样 Shift+F5

以上是关于加速图像处理的神器: INTEL ISPC编译器基于CMAKE快速创建VISUAL STUDIO项目的主要内容,如果未能解决你的问题,请参考以下文章

加速图像处理的神器: INTEL ISPC编译器 迁移图像旋转算法 - ISPC单精度 从单核 到 多核

加速图像处理的神器: INTEL ISPC编译器 迁移图像旋转算法 - ISPC单精度 从单核 到 多核

加速图像处理的神器: INTEL ISPC编译器 迁移图像旋转算法 - ISPC单精度 从单核 到 多核

加速图像处理的神器: INTEL ISPC 编译器迁移图像旋转算法 - 从 ISPC双精度到 ISPC单精度

加速图像处理的神器: INTEL ISPC 编译器迁移图像旋转算法 - 从 ISPC双精度到 ISPC单精度

加速图像处理的神器: INTEL ISPC 编译器迁移图像旋转算法 - 从 ISPC双精度到 ISPC单精度