英特尔oneAPI—爱恨情仇之谁与争锋

目录

话题一:以数据为中心的时代需要什么?

话题二:什么是英特尔oneAPI? 

话题三:英特尔oneAPI的亮点

话题四:英特尔oneAPI的作用

话题五:英特尔oneAPI的使用

话题六:英特尔oneAPI未来可期


英特尔oneAPI—爱恨情仇之谁与争锋_第1张图片

 (官网的页面) 

​​​​​提到英特尔oneAPI,很多人可能会是疑问的表情,不要担心,今天小编就以初学者的身份,通过以下六个话题,带大家走进英特尔oneAPI的世界。


话题一:以数据为中心的时代需要什么?

英特尔oneAPI—爱恨情仇之谁与争锋_第2张图片

在现在这个以数据为中心的时代,CPU、GPU、FPGA等硬件平台对开发者维护的需求愈发强烈,但是每个独立的代码库需要不同的语言、库、软件工具等进行编程。许多数据密集型、复杂的工作负载,需要CPU、GPU、AI加速器、FPGA等多种架构之间组合,这样的复杂和耗费时间的工作过程,是每一个程序员内心深处无可奈何的痛。


话题二:什么是英特尔oneAPI? 

英特尔oneAPI—爱恨情仇之谁与争锋_第3张图片

 官网的页面

英特尔oneAPI 是一项行业倡议,旨在创建一个开放、基于标准的跨架构编程模型,使其可提供跨加速器架构的通用开发人员体验,从而在面对大量跨架构(CPU、GPU、FPGA 和其他加速器)的、以数据为中心的工作负载时,简化开发工作。

英特尔oneAPI包括跨架构语言 Data Parallel C ++(基于 ISO C ++ 和 Khronos Group 的 SYCL)、高级库和社区扩展。


话题三:英特尔oneAPI的亮点

1.跨架构、跨厂商的开放标准

基于这些标准,oneAPI编程简化了软件的开发流程,无需特定的编程语言或供应商,就能提供加速计算的性能,且允许集成现有代码。

2.独特的英特尔® oneAPI 基础工具包

英特尔oneAPI—爱恨情仇之谁与争锋_第4张图片

官网的页面

英特尔使用英特尔® oneAPI 工具包创建了 oneAPI 产品实现,帮助开发人员针对英特尔® CPU、GPU 和 FPGA 高效地构建、分析和优化高性能、跨架构的应用程序。

3.尖端的编译器、库和调试工具等

英特尔oneAPI拥有并具备:

英特尔oneAPI—爱恨情仇之谁与争锋_第5张图片

官网的页面

(1)直接编程的英特尔® oneAPI DPC++/C++ 编译器

DPC++ 是 C++ 的演化版本,结合了 SYCL 和社区增强功能。它支持跨目标硬件重用代码,帮助跨 CPU、GPU 和 FPGA 架构实现高生产力和高性能,同时允许特定于加速器的调优。

英特尔oneAPI—爱恨情仇之谁与争锋_第6张图片

 oneAPI DPC++官方参考文档 

--------------有需要读者,可以私聊获取--------------

例:要为DPC++应用启用OpenMP卸载,请使用以下命令调用编译器:

DPC PP-fiopen MP-fopenmp-targets = < arch >(Linux)
DPC PP-cl/qi openmp/Qopenmp-targets:< arch >(Windows)

(2) 基于 API 编程的库

强大的库(包含深度学习、数学以及视频和媒体处理)针对特定领域的功能进行了预优化,并通过定制的编码加速计算密集型工作负载

(3)探查应用、设计建议和调试所需的工具

英特尔® Vtune™ Profiler 可用于快速查找CPU、GPU 和 FPGA 系统中的性能瓶颈英特尔® Advisor 用于实现高效矢量化、线程化和加速器卸载英特尔® Distribution for GDB 用于高效排除代码故障


话题四:英特尔oneAPI的作用

英特尔oneAPI—爱恨情仇之谁与争锋_第7张图片

 (官网的页面)

说了这么多,有的人会说,“专业术语”听不懂,那我就用不专业的话浅谈一下作用~~~

英特尔oneAPI可以实现简化多架构编程的目的,即开发者可以自由选择架构,大大降低了使用不同的代码库、编程语言、编程工具和工作流程所带来的复杂性。

在英特尔® oneAPI 工具包的帮助下,可以创建一个新的、独立可迁移的跨架构代码库,极大简化了开发工作,并为多架构环境的部署提供灵活性。


话题五:英特尔oneAPI的使用

英特尔oneAPI—爱恨情仇之谁与争锋_第8张图片

                                                                                             关于并行编程、编译程序等的视频)

1.以下是(官网的示例编译代码):

#include  // std::vector()
#include  // std::rand()
#include 
#include "oneapi/mkl/blas.hpp"

int main(int argc, char* argv[]) {

    double alpha = 2.0;
    int n_elements = 1024;

    int incx = 1;
    std::vector x;
    x.resize(incx * n_elements);
    for (int i=0; i y;
    y.resize(incy * n_elements);
    for (int i=0; i x_buffer(x.data(), x.size());
    cl::sycl::buffer y_buffer(y.data(), y.size());

    // perform y = alpha*x + y
    try {
        oneapi::mkl::blas::axpy(my_queue, n_elements, alpha, x_buffer,
        incx, y_buffer, incy);
    }

    catch(cl::sycl::exception const& e) {
        std::cout << "\t\tCaught synchronous SYCL exception:\n"
                  << e.what() << std::endl;
    }

    std::cout << "The axpy (y = alpha * x + y) computation is complete!" << std::endl;

    // print y_buffer
    auto y_accessor = y_buffer.template
      get_access();
    std::cout << std::endl;
    std::cout << "y" << " = [ " << y_accessor[0] << " ]\n";
    std::cout << "    [ " << y_accessor[1*incy] << " ]\n";
    std::cout << "    [ " << "... ]\n";
    std::cout << std::endl;

    return 0;
}

2.根据案例进行个人小测试:

#include  
constexpr int N = 11; 
using namespace sycl; 
class IntelGPUSelector : public device_selector { 
public:
 int operator()(const device& Device) const override { 
  const std::string DeviceName = Device.get_info(); 
  const std::string DeviceVendor = Device.get_info();

  return Device.is_gpu() && (DeviceName.find("Intel") != std::string::npos) ? 100 : 0; 
  }
}; 

int main() {
 IntelGPUSelector d;
 queue q(d);
 int* data = malloc_shared(N, q);
 q.parallel_for(N, [=](auto i) {
 data[i] = i;
}).wait();
 for (int i = 0; i < N; i++) std::cout << data[i] << " "; 
 free(data, q); 
}

编译运行上面的代码,如果没有问题应该输出:

0 1 2 3 4 5 6 7 8 9 10

话题六:英特尔oneAPI未来可期

英特尔oneAPI—爱恨情仇之谁与争锋_第9张图片

官网的页面 

英特尔oneAPI是针对异构的架构(CPU、GPU、FPGA、其他加速器)部署中,会出现不同的架构需要独特的语言、工具和库的问题,为了减轻开发者工作量、方便开发者进行跨架构编程,充分利用跨架构的解决方案,高效地优化应用程序的性能的一个编程模型。

我坚信,在未来,英特尔oneAPI 必将实现更快的应用程序性能、更高的生产力和更大的创新。 其提供的高性能异构计算的统一编程,打造异构计算的新纪元。

本文参考英特尔官网、英特尔oneAPI网站等资源平台的一些论述,并通过CSDN活动页面、哔哩哔哩等平台获取部分参考知识。

你可能感兴趣的:(英特尔oneAPI,oneapi,编辑器,硬件架构,其他)