当前位置: 首页 > news >正文

百色网站免费建设1号网站建设 高端网站建设

百色网站免费建设,1号网站建设 高端网站建设,wordpress模板 购买,旅游网站模板设计前言 本文是对jupyterlab中oneAPI_Essentials/03_Unified_Shared_Memory文档的学习记录#xff0c;主要包含对统一共享内存的讲解 USM概述 USM (Unified Shared Memory)是SYCL中基于指针的内存管理。对于使用malloc或new来分配数据的C和C程序员来说应该很熟悉。当将现有的C…前言 本文是对jupyterlab中oneAPI_Essentials/03_Unified_Shared_Memory文档的学习记录主要包含对统一共享内存的讲解 USM概述 USM (Unified Shared Memory)是SYCL中基于指针的内存管理。对于使用malloc或new来分配数据的C和C程序员来说应该很熟悉。当将现有的C/ C代码移植到SYCL时USM简化了程序员的开发 使用USM开发人员可以在主机和设备代码中引用相同的内存对象 Types of USM 统一共享内存为管理内存提供了显式和隐式模型 USM初始化下面的初始化显示了使用malloc_shared共享分配的示例“q”队列参数提供了有关内存可访问的设备的信息 下面是在host上分配内存的方法 释放USM 数据隐式移动 下面的SYCL代码显示了使用malloc_shared的USM的实现其中数据在主机和设备之间隐式地移动。可以用最少的代码快速获得功能开发人员不必担心在主机和设备之间移动内存 #include sycl/sycl.hpp using namespace sycl;static const int N 16;int main() {queue q;std::cout Device : q.get_device().get_infoinfo::device::name() \n;//# USM allocation using malloc_sharedint *data malloc_sharedint(N, q);//# Initialize data arrayfor (int i 0; i N; i) data[i] i;//# Modify data array on deviceq.parallel_for(range1(N), [](id1 i) { data[i] * 2; }).wait();//# print outputfor (int i 0; i N; i) std::cout data[i] \n;free(data, q);return 0; } 运行结果 数据显示移动 下面的SYCL代码显示了使用malloc_device的USM实现其中主机和设备之间的数据移动应该由开发人员使用memcpy显式地完成 #include sycl/sycl.hpp using namespace sycl;static const int N 16;int main() {queue q;std::cout Device : q.get_device().get_infoinfo::device::name() \n;//# initialize data on hostint *data static_castint *(malloc(N * sizeof(int)));for (int i 0; i N; i) data[i] i;//# Explicit USM allocation using malloc_deviceint *data_device malloc_deviceint(N, q);//# copy mem from host to deviceq.memcpy(data_device, data, sizeof(int) * N).wait();//# update device memoryq.parallel_for(range1(N), [](id1 i) { data_device[i] * 2; }).wait();//# copy mem from device to hostq.memcpy(data, data_device, sizeof(int) * N).wait();//# print outputfor (int i 0; i N; i) std::cout data[i] \n;free(data_device, q);free(data);return 0; } 运行结果 代码解释 本代码让数据在主机区和设备区显示移动提高了开发人员对数据的可控性 首先本代码使用malloc在主机分配内存然后给这些内存赋值然后使用malloc_device在设备区分配内存然后把主机区的内存拷贝到设备区的这些内存中然后在设备区加速处理这些数据之后再拷贝到主机区的原内存中最后使用cout输出 USM的优势 SYCL*缓冲区功能强大且优雅但是在c程序中用缓冲区替换所有指针和数组可能会给程序员带来负担因此在这种情况下可以考虑使用USM 1.当把c代码移植到sycl时想要尽可能更改少的代码 2.当需要控制数据移动时使用显式USM分配 3.在移植代码时使用共享分配可以快速获得功能 Data dependency in USM 程序员可以显式地使用wait对象也可以使用命令组中的depends_on方法来指定在任务开始之前必须完成的事件列表 在下面的示例中两个内核任务正在更新相同的数据数组这两个内核可以同时执行并且可能导致错误的结果 Different options to manage data dependency when using USM wait() 在内核任务上使用q.wait()来等待下一个依赖的任务可以开始但是它会阻塞主机上的执行 in_order queue property 为队列使用in_order 队列属性这将序列化所有内核任务。注意即使队列没有数据依赖关系执行也不会重叠 depends_on 在命令组中使用h.depends_on(e)方法来指定任务开始之前必须完成的事件 简化版 Code Example: USM and Data dependency 这个例子主要演示了上面三种方法的使用 初始代码 想要修改上面代码只需下面三种方法三选一 使用wait 使用in_order queue property 使用depends_on 运行结果 Lab Exercise: Unified Shared Memory 实验要求 下面是我已经补全的代码和运行结果 #include sycl/sycl.hpp #include cmath using namespace sycl; static const int N 1024; int main() {queue q;std::cout Device : q.get_device().get_infoinfo::device::name() \n;//intialize 2 arrays on hostint *data1 static_castint *(malloc(N * sizeof(int)));int *data2 static_castint *(malloc(N * sizeof(int)));for (int i 0; i N; i) {data1[i] 25;data2[i] 49;}//# STEP 1 : Create USM device allocation for data1 and data2//# YOUR CODE GOES HEREint *data_device1 malloc_deviceint(N, q);int *data_device2 malloc_deviceint(N, q);//# STEP 2 : Copy data1 and data2 to USM device allocation//# YOUR CODE GOES HERE q.memcpy(data_device1, data1, sizeof(int) * N).wait();q.memcpy(data_device2, data2, sizeof(int) * N).wait();//# STEP 3 : Write kernel code to update data1 on device with sqrt of valueq.parallel_for(N, [](auto i) { //# YOUR CODE GOES HERE data_device1[i] (int)std::sqrt(float(data_device1[i]));}).wait();//# STEP 3 : Write kernel code to update data2 on device with sqrt of valueq.parallel_for(N, [](auto i) { //# YOUR CODE GOES HERE data_device2[i] (int)std::sqrt(float(data_device2[i]));}).wait();//# STEP 5 : Write kernel code to add data2 on device to data1q.parallel_for(N, [](auto i) { //# YOUR CODE GOES HERE data_device1[i] data_device2[i];}).wait();//# STEP 6 : Copy data1 on device to host//# YOUR CODE GOES HERE q.memcpy(data1, data_device1, sizeof(int) * N).wait();//# verify resultsint fail 0;for (int i 0; i N; i) if(data1[i] ! 12) {fail 1; break;}if(fail 1) std::cout FAIL; else std::cout PASS;std::cout \n;//# STEP 7 : Free USM device allocations//# YOUR CODE GOES HEREfree(data_device1, q);free(data_device2, q);free(data1);free(data2);//# STEP 8 : Add event based kernel dependency for the Steps 2 - 6return 0; } 运行结果 注 这里可能转成double或者什么也不转都会报错我电脑对这一块好像仅支持单精度只能转成float才能运行具体原理也不理解
http://www.zqtcl.cn/news/148415/

相关文章:

  • 朋友 合同 网站制作手机网站建设服务商
  • 链接分析属于网站开发棋牌软件开发定制
  • top域名的网站搭建网站步骤
  • 个人网站建设背景和目的海南省网站
  • 山西成宁做的网站义乌网站建设优化排名
  • 东莞网站建设公司辉煌大厦阿里云服务器官方网站
  • 域名注册网站制作自己建网站需要钱吗
  • 东莞市房管局官方网站域名查询ip网站
  • 织梦模板添加网站地图温州做网站掌熊号
  • 怎样凡科建设网站建立网站的步骤
  • 模板类网站建设中国都有哪些网站
  • 深圳百度推广网站建设深圳电器网站建设
  • 响应式网站有什么区别官方app
  • 手机网站建设哪里好网站架构设计师待遇怎么样
  • 静态网站设计wordpress网页视频播放器
  • 打电话做网站的话术网站安全维护方案
  • 变更备案网站可以访问吗google浏览器下载安装
  • 网站空间更换网站开发的服务器是什么
  • 网站 网页玉溪建设网站
  • 江西宜春市城市建设档案馆网站朋友圈广告30元1000次
  • 响应式网站 分辨率惊艳的网站
  • 苏州网站公司排名前十最好看的视频免费下载
  • 快速设计一个网站wordpress4.9.6
  • 网站建立教学深圳宝安网站建设公司推荐
  • 深圳企业网站建设制作公司叶县红色家园网站建设
  • 网站制作报价被哪些因素影响建设银行官方网站首页个人登录
  • 免费网站怎么建谁能给个网站谢谢
  • 吴忠网站建设家里面的服务器可以做网站吗
  • 这是我自己做的网站做网站前台要学什么课程
  • 程序网站开发建设隔离变压器移动网站