注册OneAPI并基于DevCloud开发Dpcpp程序
- 访问链接注册一个因特网账号。
- 进入POST data (intel.com)激活账号。
-
进入Overview | Intel® DevCloud,获取OneAPI。
点击右上角的Sign in
,之后注册一下即可。 -
成功获取后,点击
Get Started
。
划到最下面,有一个“Connect with JupyterLab*”模块,点击其中的
Launch JupyterLab*
然后就大功告成啦!
可以点击
openAPI_Essential
文件夹,从00_Introdution_to_Jupyter
开始,找到每个文件夹下面的.ipynb
文件进行查看、点击 ▹ \triangleright ▹ 运行代码,了解编译运行的方法。
实现向量加法
了解基本运行和编译后,可以快进到02_SYCL_Program_Structure
中,在最后有一个向量加法练习,可以先自己尝试一下,正确答案如下:
//# STEP 1 : Create second vector, initialize to 20 and print values
//# YOUR CODE GOES HERE
std::vector<int> vector2(N, 20);
std::cout<<"\nInput Vector2: ";
for (int i = 0; i < N; i++) std::cout << vector2[i] << " ";
//# STEP 2 : Create buffer for second vector
//# YOUR CODE GOES HERE
buffer vector2_buffer(vector2);
//# STEP 3 - add second accessor for second buffer
//# YOUR CODE GOES HERE
accessor vector2_accesor (vector2_buffer,h);
//# STEP 4 : Modify the code below to add the second vector to first one
vector1_accessor[index] += vector2_accessor[index];
如何写一个自己的HelloWorld文件?
首先,在02_SYCL_Program_Structure
文件夹下(其实可以是任何文件夹,了解到原理后可以自己尝试一下)创建一个hello.sh
文件,写入下面的代码:
#!/bin/bash
source /opt/intel/oneapi/setvars.sh > /dev/null 2>&1
/bin/echo "##" $(whoami) is compiling SYCL_Essentials Module2 -- SYCL Program Structure sample - 7 of 7 hello.cpp
icpx -fsycl src/hello.cpp
if [ $? -eq 0 ]; then ./a.out; fi
逐行进行分析一下代码:
-
#!/bin/bash
: 这是一个shebang指令,指示脚本使用bash解释器来执行。 -
source /opt/intel/oneapi/setvars.sh > /dev/null 2>&1
: 这行代码使用source
命令加载了/opt/intel/oneapi/setvars.sh
脚本。> /dev/null
和2>&1
是重定向语法,将脚本的输出和错误信息重定向到空设备,即将它们丢弃。 -
/bin/echo "##" $(whoami) is compiling SYCL_Essentials Module2 -- SYCL Program Structure sample - 7 of 7 hello.cpp
: 这行代码使用/bin/echo
命令打印一条带有用户名和编译信息的消息。 -
icpx -fsycl src/hello.cpp
: 这行代码调用了icpx
命令,并传递了一个参数-fsycl
和一个文件路径src/hello.cpp
。icpx
是用来编译dpcpp的编译器,由此可以对hello.cpp进行编译。 -
if [ $? -eq 0 ]; then ./a.out; fi
: 这是一个条件语句