英特尔oneAPI简介
Intel oneAPI是一个跨行业、开放、基于标准的统一的编程模型,旨在提供一个适用于各类计算架构的统一编程模型和应用程序接口。也就是说,应用程序的开发者只需要开发一次代码,就可以让代码在跨平台的异构系统上执行,底层的硬件架构可以是CPU、GPU、FPGA、神经网络处理器等。由此可见,使用oneAPI编写的程序既可以利用加速器提高程序性能,又具有可移植性。
一个oneAPI运行环境由一个主机和一系列设备组成。主机通常是一个多核CPU,而设备是一个或多个GPU、FPGA,或是其他加速器。主机的处理器也可以进行并行计算。
oneAPI为一系列的数据并行加速器提供了一个通用的开发者接口。
英特尔DevCloud简介
英特尔DevCloud是一个可以在线开发oneAPI程序的平台,DevCloud除了预装了oneAPI开发套件之外,还提供了有关oneAPI的教程,并且免费提供GPU、FPGA等加速器资源供我们使用,因此我们可以很方便地在DevCloud上学习oneAPI知识,并测试我们自己开发的oneAPI程序。
问题描述
有两个矩阵A,B
若A矩阵和B矩阵可以做乘法运算则必须满足A矩阵的列的数量等于B矩阵的行的数量
运算规则:结果矩阵中某行某列的数据为A的该行中的每个数字对应乘以B的该列的每个数字把结果相加
如今不妨假设两者都为n*n的矩阵,可得代码如下:
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
c[i][j]+=a[i][k]*b[k][j];
很容易发现,算法的时间复杂度为O(n^3),这使得当n来到1000这个数量级时花费时间就已经很难让人接受,考虑优化。
考虑并行化优化,可以看到一共三重循环,对于最里层循环,对结果产生的影响是不会相互关联的,此时便可通过英特尔oneAPI中给出方法将最内层循环进行并行处理,以达成O(n^2)的矩阵乘法。