首页 > 其他分享 >在CMake中配置使用Intel One API的注意事项

在CMake中配置使用Intel One API的注意事项

时间:2023-10-18 12:33:43浏览次数:45  
标签:CMAKE Intel oneAPI API Build CMake Heroius compiler

环境

  • Intel One API 2023.2
  • CMake 3.27.7
  • Visual Studio 2022 Community (with C++ desktop)

样例

程序代码

1 #include <iostream>
2 
3 int main()
4 {
5     std::cout << "Hello, CMake!" << std::endl;
6     std::cin.get();
7     return 0;
8 }
HelloCMake.cpp

MakeList

 1 cmake_minimum_required(VERSION 3.23)
 2 
 3 # Heroius: set() function should be called before project() to take effect, otherwise default compilers will be used.
 4 
 5 # specify Intel oneAPI compiler
 6 # Heroius: use '/' instead of '\\' in file paths to avoid incorrect mutiple letter escaping.
 7 # Heroius: however these compiler flags seem only placeholders and not used at all.
 8 set(CMAKE_C_COMPILER "C:/Program Files (x86)/Intel/oneAPI/compiler/latest/windows/bin/dpcpp.exe" CACHE STRING "" FORCE)
 9 set(CMAKE_CXX_COMPILER "C:/Program Files (x86)/Intel/oneAPI/compiler/latest/windows/bin/dpcpp.exe" CACHE STRING "" FORCE)
10 
11 # Heroius: the toolchain string determines used c++ compiler, but leaves c compiler unset.
12 set(CMAKE_GENERATOR_TOOLSET "Intel(R) oneAPI DPC++ Compiler 2023")
13 
14 # Heroius: skip c compiler checking, since c compiler is just a mock.
15 set(CMAKE_C_COMPILER_WORKS TRUE)
16 
17 # Set the project name and version
18 # Heroius: move project() instruction here to make flags take effect.
19 project(HelloCMake)
20 
21 # look for Intel oneAPI CMake toolchain files
22 # Heroius: strange error occurs if c compiler checking is not skipped.
23 find_package(IntelSYCL REQUIRED)
24 
25 # Add the executable
26 add_executable(HelloCMake HelloCMake.cpp)
27 
28 # Heroius: there should be a way that can include sycl libs to generation path, so that the app can run itself.
29 # add_sycl_to_target(TARGET HelloCMake SOURCES HelloCMake.cpp)
30 
31 set_target_properties(HelloCMake PROPERTIES
32     RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin
33     RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin
34     # ... add other configurations if needed
35 )
36 
37 # Set executable path
38 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
CMakeLists.txt

Configure脚本

 1 :: 设置 OPENCV_ROOT 环境变量
 2 Set OPENCV_ROOT=C:\OpenCV\Build
 3 :: 如果存在 Build,删除
 4 if exist Build rd /S /Q Build 
 5 :: 如果不存在 Build,创建
 6 if not exist Build md Build
 7 
 8 Call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 vs2022
 9 
10 :: 当前文件夹为 Source,子文件夹 .\Build 为构建目录
11 cmake -S . -B .\Build 
Configure.bat

编译脚本

1 :: 进入构建目录
2 cd Build
3 :: 构建,项目文件在当前目录
4 cmake --build .
5 pause
Build_CMake.bat

运行脚本

1 @ECHO OFF
2 
3 :: 加载ONEAPI环境,使得引用库在运行环境可见;将加载过程的输出重定向隐藏
4 Call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 vs2022 >NUL 2>&1
5 
6 cd ./build/bin/
7 
8 hellocmake.exe
Run_App.bat

注意事项

  • 要使用Intel One API,需要CMake版本不低于3.23
  • CMakeList中,在调用project()之前设置好编译器参数
  • Intel One API 2023.2 未提供专用于C的编译器,因此须跳过CMake中的C编译器检查
  • 实际确定编译器的是CMAKE_GENERATOR_TOOLSET变量,但是各编译器变量的设置也不能跳过
  • CMakeList中的路径变量,使用反斜杠作为路径分隔符,以避免多次转义导致的错误
  • 使用find_package(IntelSYCL REQUIRED)添加对Intel One API的引用
  • 生成的程序需要在One API环境运行,因在生成目录中没有复制必要的库文件(此问题或有其他解决方案,欢迎留言指正)

标签:CMAKE,Intel,oneAPI,API,Build,CMake,Heroius,compiler
From: https://www.cnblogs.com/heroius/p/17771800.html

相关文章

  • Flask一个文件快速起一个API接口服务
    fromflaskimportFlask,request,jsonifyapp=Flask(__name__)@app.route('/my_endpoint',methods=['POST'])defhandle_post_request():#在这里可以处理接收到的POST请求数据data=request.get_json()#获取POST请求中的JSON数据#返回指定内容......
  • IntellIJ Idea内存不足时怎么设置
    IntellIJIdea内存不足时怎么设置现在越来越多的人投入了IntellIJIdea的怀抱,它给我们的日常开发带来了诸多便利,但是由于对它的不熟悉,导致很多时候需要某些设置却不知道怎么去哪里设置,比如,在我们导入大项目时,IntellIJIdea向我们抛出了一个OutOfMemoryError......
  • Go - Creating a JSON Web Service API
    Problem: YouwanttocreateasimplewebserviceAPIthatreturnsJSON.Solution: Usethenet/httppackagetocreateawebserviceAPIandtheencoding/jsonpackagetoencodedatatobesentbackasJSON. You’llcreateawebserviceAPIthatreturnsa......
  • Apipost使用介绍
    相信无论是前端,还是后端的测试和开发人员,都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致,导致协作低效、频繁出问题,开发测试人员痛苦不堪。API管理的难点在哪?开发人员在Swagger定义好文档后,接口调试的时候还需要去Postman再定义一遍。前端......
  • Apipost使用介绍
    相信无论是前端,还是后端的测试和开发人员,都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致,导致协作低效、频繁出问题,开发测试人员痛苦不堪。API管理的难点在哪?开发人员在Swagger定义好文档后,接口调试的时候还需要去Postman再定义一遍。前......
  • Apifox设置登录脚本
    第一步,设置脚本consturl='/Platform/Login/Login'constcurUrl=pm.request.getBaseUrl();letbaseUrl=pm.environment.get("SYS");console.log('sd',baseUrl)constaccount=pm.environment.get("account");constpw......
  • Intel官方确认:“X代酷睿”终结!不再有15代
    Intel刚刚正式发布了代号RaptorLakeRefresh的第14代酷睿处理器,12月14日还会发布代号MeteorLake的全新第一代酷睿Ultra处理器。对于Intel这一次的品牌变化,很多玩家一直比较迷茫,毕竟目前正处于过渡阶段。在最新的QA解读中,Intel确认,RaptorLakeRefresh将是最后一代使用“X代酷......
  • Intel发布入门级至强E-2400:13代酷睿师弟、砍掉小核
    Intel刚刚推出了首批14代酷睿处理器,但是13代又有了新的衍生版,面向入门级服务器和工作站的至强E-2400系列。至强E系列的节奏一直很慢,基本两年一代:2019年的E-2200系列源自8/9代酷睿,2021年的E-2300系列来自11代酷睿。最新的至强E-2400系列还没有正式发布,官方产品库里也找不到,但是......
  • Util应用框架Web Api开发环境搭建
    要使用Util应用框架开发项目,首先需要搭建合适的开发环境.迈出第一步,对于很多.Net新人可能并不简单.如果你对.Net环境并不熟悉,请尽量按照本文档进行操作.操作系统请安装Windows10以上版本操作系统.你也可以使用MAC操作系统,但需要自行解决开发环境问题.安装VisualSt......
  • es - Kibana API - 批量插入
    (3).批量插入:POST_bulk{"index":{"_index":"books","_id":"19553"}}{"BookID":19552,"BookName":"C语言程序设计实验指导与习题解答","BookIntr":"导语_点评_推荐词","Book......