Intel oneAPI笔记(2)--jupyter官方文档(oneAPI_Intro)学习笔记

前言

本文是对jupyterlab中oneAPI_Essentials/01_oneAPI_Intro文档的学习记录,包含对SYCL、DPC++ extends SYCL、oneAPI Programming models等介绍和SYCL代码的初步演示等内容

oneAPI编程模型综述

oneAPI编程模型提供了一个全面而统一的开发人员工具组合,可以跨硬件目标使用,包括一系列跨越多个工作负载域的性能库,这些库包括针对每个目标体系结构定制编码的函数,因此相同的函数调用可以在支持的体系结构中提供优化性能

多体系结构编程挑战

目前,在以数据为中心的领域,专用工作负载正在增长。每种以数据为中心的硬件通常需要使用不同的语言和库进行编程,因为没有通用的编程语言或 API,这需要维护单独的代码库。开发人员必须学习一整套不同的工具,因为跨平台的工具支持不一致。为每个硬件平台开发软件需要单独的投资,并且几乎无法重用该工作以针对不同的体系结构。

oneAPI的引入

oneAPI作为一种统一编程模型,包括表达并行性的统一和简化的语言和库,它有着很好的开放性,可以与现有的HPC编程模型相互操作

一个简单的例子

%%writefile lab/simple.cpp
//==============================================================
// Copyright © Intel Corporation
//
// SPDX-License-Identifier: MIT
// =============================================================
#include <sycl/sycl.hpp>
using namespace sycl;
static const int N = 16;
int main(){//# define queue which has default device associated for offloadqueue q;std::cout << "Device: " << q.get_device().get_info<info::device::name>() << "\n";//# Unified Shared Memory Allocation enables data access on host and deviceint *data = malloc_shared<int>(N, q);//# Initializationfor(int i=0; i<N; i++) data[i] = i;//# Offload parallel computation to deviceq.parallel_for(range<1>(N), [=] (id<1> i){data[i] *= 2;}).wait();//# Print Outputfor(int i=0; i<N; i++) std::cout << data[i] << "\n";free(data, q);return 0;
}

这是一个简单的SYCL编程例子,第一行%%writefile lab/simple.cpp的作用是,当将这个代码在jupyter lab中的一个cell中点运行时,将会把除了这一行的代码之外的所有代码保存在jupyterlab的/lab(相对路径)的位置的simple.cpp文件当中

也就是说,运行这个之后只会把代码保存在一个文件中:

之后,在下一个cell中运行这段代码,才是对上面的代码的真正运行:

! chmod 755 q; chmod 755 run_simple.sh;if [ -x "$(command -v qsub)" ]; then ./q run_simple.sh; else ./run_simple.sh; fi

运行结果

 

SYCL

sycl代表了一项行业标准化工作,包括对c++数据并行编程的支持,被概括为“面向opencl的c++单源异构编程”。sycl是一个基于opencl的跨平台的抽象层,它使异构处理器的代码能够使用c++以“单一源”风格编写,使编译器能够分析和优化整个程序,而不管代码要在哪个设备上运行

与opencl不同,sycl包含模板和lambda函数,使高级应用程序软件能够清晰地编码,并优化内核代码的加速。

数据并行c++(dpc++)是一个api实现的sycl编译器。利用了现代c++的生产力优势和熟悉的结构,并结合了数据并行性和异构编程的sycl标准

sycl是一种单源语言,其中主机代码和异构加速器内核可以混合在同一源文件中。程序员可以使用熟悉的c++和代用附加功能的库结构,如用于工作定位的队列,用于数据管理的缓冲区,以及用于并行性的parallel_for来指示应该卸载哪部分的计算和数据

oneAPI编程模型

·平台模型

oneAPI的平台模型基于SYCL平台模型,指定一个主机控制一个或多个设备。主机是计算机,通常是基于cpu的系统,执行程序主要部分

每个设备是一个加速器,一个包含计算资源的专用组件,它可以快速执行操作的子集,通常比cpu更快。每个设备包含一个或多个计算单元,每个计算单元包含一个或处理单元,处理单元是单独的计算引擎

·执行模型

执行模型基于SYCL执行模型,它定义并指定代码(称为内核)如何在设备上执行并于控制主机交互,主机执行模型通过命令组在主机和设备之间协调执行和数据管理。命令组是像内核调用和访问器这样的命令的分组,被提交到队列中执行

执行模型指定了如何在访问器上完成计算,从小的一维数据到大的多维数据集的计算分布在nd范围、工作组、子组的层次结构中,都是在工作提交到命令队列时指定的

需要注意的是,实际的内核代码代表一个工作项执行的工作,内核之外的代码控制的是执行多少并行性,工作的数量和分配时由nd范围和工作组的规格来控制

下图描述nd范围、工作组、子组和工作项之间的关系,总工作量是由工作组大小指定,该实例显示了x*y*z的nd范围大小,x’*y’*z’的工作组大小和x’的子组大小。因此有(x*y*z)/(x’*y’*z’)大小的工作组和(x*y*z)/x’大小的子组

·存储模型

基于SYCl*内存模式,它定义了主机和设备如何与内存交互,它协调主机和设备之间的内存分配和管理。内存模型是一种抽象,其目的是概括和适应不同的主机和设备配置。

在这个模型中,内存驻留在主机或设备上,由主机或设备拥有,并通过声明一个内存对象来指定。有两种不同类型的内存对象,缓冲器和镜像。这些内存对象再主机和设备之间的交互通过访问器(accessor)完成,访问器传达了期望的访问设置,例如主机和设备,以及特定的访问模式,例如读和写

考虑这样一种情况,内存通过传统的malloc调用在主机上分配,一旦在主机上分配了内存,就会创建一个缓冲区对象,它使主机分配的内存能够和设备通信,缓冲区类将该类型的项的类型和数量通信给设备进行计算,一旦主机上创建了缓冲区,设备上运行的访问类型就通过访问器accessor对象进行通信。

内核编程模型

支持主机和设备之间的显示并行性,这种并行性之所以显式,是因为程序员决定哪些代码在主机和设备上执行,它不是自动的,内核代码在加速器上执行。

采用oneAPI编程模型的程序支持单一源,这意味着主机代码和设备代码可以在同一个源文件中,但是,在语言一致性和语言特性方面,主机代码和设备代码中接受的源代码存在差异

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/131741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读—— BiFormer(cvpr2023)

论文&#xff1a;https://arxiv.org/abs/2303.08810 github&#xff1a;GitHub - rayleizhu/BiFormer: [CVPR 2023] Official code release of our paper "BiFormer: Vision Transformer with Bi-Level Routing Attention" 一、介绍 1、要解决的问题&#xff1a;t…

0002Java安卓程序设计-基于Uniapp+springboot菜谱美食饮食健康管理App

文章目录 开发环境 《[含文档PPT源码等]精品基于Uniappspringboot饮食健康管理App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 功能介绍&#xff…

ES-初识ES

文章目录 介绍ElasticSearchElasticSearch的主要功能ElasticSearch的主要特性ElasticSearch的家族成员LogStashKibanaBeats ELK&#xff08;ElasticSearch LogStash Kibana&#xff09;的应用场景与数据库集成指标采集/日志分析 安装和配置ElasticSearch一、安装1、下载ES安装…

深度学习实战:基于TensorFlow与OpenCV的手语识别系统

文章目录 写在前面基于TensorFlow与OpenCV的手语识别系统安装环境一、导入工具库二、导入数据集三、数据预处理四、训练模型基于CNN基于LeNet5基于ResNet50 五、模型预测基于OpenCV 写在后面 写在前面 本期内容&#xff1a;基于TensorFlow与OpenCV的手语识别系统 实验环境&…

lv9 嵌入式开发 数据库sqlite

1 数据库基本概念 数据&#xff08;Data&#xff09; 能够输入计算机并能被计算机程序识别和处理的信息集合 数据库 &#xff08;Database&#xff09; 数据库是在数据库管理系统管理和控制之下&#xff0c;存放在存储介质上的数据集合 2 常用的数据库 大型数据库…

过了面试,后面的在线测评还会刷人吗?

过了面试&#xff0c;后面的在线测评还会刷人吗&#xff1f;完全有可能刷&#xff0c;如果不是为了刷&#xff0c;何必要给你做线上测评&#xff0c;我说的有道理不&#xff1f; 好吧&#xff0c;说到为什么在线测评要刷人&#xff0c;怎么刷&#xff1f; 怎么才能确保不被刷&…

Idea 对容器中的 Java 程序断点远程调试

第一种&#xff1a;简单粗暴型 直接在java程序中添加log.info()&#xff0c;根据需要打印信息然后打包覆盖&#xff0c;根据日志查看相关信息 第二种&#xff1a;远程调试 在IDEA右上角点击编辑配置设置相关参数在Dockerfile中加入 "-jar", "-agentlib:jdwp…

【移远QuecPython】EC800M物联网开发板的硬件PWM和PWM输出BUG

【移远QuecPython】EC800M物联网开发板的硬件PWM和PWM输出BUG 文章目录 导入库初始化PWM开启PWMPWM硬件BUG附录&#xff1a;列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 导入库 from misc import PWM_V2或者 from misc import PWM但我觉得PWM_V2好用 初…

Adobe:受益于人工智能,必被人工智能反噬

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;Adobe(ADBE)受益于生成式人工智能的兴起&#xff0c;其一直能实现两位数的收入增长就证明了这一点。 &#xff08;2&#xff09;在生成式人工智能兴起时&#xff0c;该公司就快…

基于若依的ruoyi-nbcio流程管理系统增加仿钉钉流程设计(六)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 这节主要讲条件节点与并发节点的有效性检查&#xff0c;主要是增加这两个节点的子节点检查&#xff0c;因为…

【从零开始学习Redis | 第五篇】基于布隆过滤器解决Redis的穿透问题

前言&#xff1a; 在如今的开发中&#xff0c;使用缓存中间件Redis已经成为一项很广泛的技术&#xff0c;Redis的高性能大大优化了我们的服务器性能&#xff0c;缓解了在高并发的情况下服务器的压力。它基于缓存的形式&#xff0c;在内存中保存数据&#xff0c;减少对磁盘的IO操…

听GPT 讲Rust源代码--library/std(15)

题图来自 An In-Depth Comparison of Rust and C[1] File: rust/library/std/src/os/wasi/io/fd.rs 文件路径&#xff1a;rust/library/std/src/os/wasi/io/fd.rs 该文件的作用是实现与文件描述符&#xff08;File Descriptor&#xff09;相关的操作&#xff0c;具体包括打开文…

✔ ★【备战实习(面经+项目+算法)】 11.5学习

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…

MFC 基础篇(一)

目录 一.SDK编程 二.为什么要学MFC&#xff1f; 三.MFC能做什么&#xff1f; 四.MFC开发环境搭建 五.MFC项目创建 六.消息映射机制 一.SDK编程 Application Programming Interface 应用程序编程接口。 Software Development Kit 软件开发工具包&#xff0c;一般会包括A…

【入门Flink】- 04Flink部署模式和运行模式【偏概念】

部署模式 在一些应用场景中&#xff0c;对于集群资源分配和占用的方式&#xff0c;可能会有特定的需求。Flink为各种场景提供了不同的部署模式&#xff0c;主要有以下三种&#xff1a;会话模式&#xff08;Session Mode&#xff09;、单作业模式&#xff08;Per-Job Mode&…

小程序如何设置用户同意服务协议并上传头像和昵称

为了保护用户权益和提供更好的用户体验&#xff0c;设置一些必填项和必读协议是非常必要的。首先&#xff0c;用户必须阅读服务协议。服务协议是明确规定用户和商家之间权益和义务的文件。通过要求用户在下单前必须同意协议&#xff0c;可以确保用户在使用服务之前了解并同意相…

分析:如何多线程运行测试用例

这是时常被问到的问题&#xff0c;尤其是UI自动化的运行&#xff0c;过程非常耗时&#xff0c;所以&#xff0c;所以多线程不失为一种首先想到的解决方案。 多线程是针对的测试用例&#xff0c;所以和selenium没有直接关系&#xff0c;我们要关心的是单元测试框架。 unittest …

[GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等

SSTI模板注入-中括号、args、下划线、单双引号、os、request、花括号、数字被过滤绕过&#xff08;ctfshow web入门370&#xff09;-CSDN博客 ssti板块注入 正好不会 {%%}的内容 学习一下 经过测试 发现过滤了 {{}} 那么我们就开始吧 我们可以通过这个语句来查询是否存在ss…

免费亲人微信聊天记录提取软件新版本v1.1,使用说明,注意事项 2023.11.06

V 1.1 优化了备份速度&#xff0c;新增了备份消息类型的选型&#xff0c;可以选择仅仅备份文本&#xff0c;或者文本与音频&#xff0c;或者文本音频视频图片。 有什么办法可以导出与某个人的微信聊天记录&#xff1f; 只想导出与某个微信好友的聊天记录&#xff0c;有办法做到…

运维知识点-MySQL从小白到入土

MySQL从小白到入土 mysql 服务器安装windows mysql 服务漏洞复现-mysql jdbc反序列化-权限绕过 mysql 服务器安装 https://dev.mysql.com/downloads/mysql/https://www.cnblogs.com/xiaostudy/p/12262804.html 点餐小程序腾讯云服务器安装mysql8 windows mysql 服务 net sta…