oneAPI官方HelloWorld代码小结
oneAPI环境搭建
要跑通官方给出的入门代码“大向量加法”,首先需要搭建oneAPI相关环境。首先可以到官方的oneAPI网站进行下载,搜索引擎搜索“oneAPI”后选择官方的这个网站即可。进入之后选择Get the Toolkits
并选择Intel@ oneAPI Base Toolkit
后,点击下载即可。
在Windows
系统中,官方文档中提供了三种程序运行的方法,分别是在Visual Studio
中命令行进行程序运行或者通过图形界面进行程序运,最后是在Visual Studio Code
中进行程序运行。本文通过Visual Studio
中的图形界面进行官方代码的选择与运行。不过这里需要注意,若是先安装的oneAPI,再安装的VS2022,有可能出现教程之外的情况,因此建议若无VS2022先进行对应的安装。
上述步骤完成后就可以通过VS的“扩展”中选择“Intel”,选择“Browse Intel oneAPI samples … ”,选择之后会弹出如下图所示的窗口,第一个便是本文运行的程序,向量求和,选择后点击OK。
选择OK后便会跳转到一个md文件,并会生产相关文件夹,我们点击“开始不调试”后便会出现下列结果。说明我们上述的环境配置和程序运行成功了。
代码分析
接下来我们打开它生成的代码来进行一些分析。首先要说明的是该代码使用了SYCL
,这是一种用于编写异构计算的开发框架和编程模型。
代码首先包含了SYCL的相关头文件,并使用using namespace sycl;
语句引入了sycl
命名空间,并定义了用于控制执行次数和向量大小的全局变量,使用typedef
关键字为std::vector<int>
定义了一个名为IntVector
的别名。其中num_repetitions
指的是重复执行的次,数vector_size
是向量的大小。
之后定义了一个异常处理器,用于捕获并处理SYCL中的异常。在这个处理器中,将异常输出到控制台,并终止程序的执行。
下面代码段定义了一个名为VectorAdd
的函数,用于在SYCL设备上执行向量加法操作。该函数接收一个SYCL队列对象q
,以及两个输入向量a_vector
和b_vector
,以及一个输出向量sum_parallel
。在函数中,首先创建了用于存储数据的缓冲区对象,并使用访问器(accessor
)来访问缓冲区中的数据。然后,通过使用queue
对象的submit
方法将并行执行的任务提交到队列中,并使用parallel_for
方法在设备上执行向量加法操作。最后,使用q.wait()
方法等待所有任务完成。
最后,主函数首先根据命令行参数设置重复执行次数和向量大小。然后创建输入和输出向量对象,并使用InitializeVector
函数初始化输入向量。接下来,创建SYCL队列对象,并输出所使用的设备信息和向量大小。然后,调用VectorAdd
函数执行向量加法操作。之后,使用顺序方式计算向量和,并与并行计算的结果进行验证。最后,打印部分向量加法的结果,并清空向量对象。(代码过长不贴了)
以上就是Intel oneAPI
官方入门程序的代码小结。