加速图像处理的神器: 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

 

非常的方便 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值