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

unified-runtime编译与验证

unified-runtime编译与验证

  • 一.创建容器
  • 二.编译unified-runtime
  • 三.生成一个cuda ptx kernel
  • 四.API测试

unified-runtime编译与验证

一.创建容器

docker run --gpus all --shm-size=32g -ti \-e NVIDIA_VISIBLE_DEVICES=all --privileged --net=host \--rm -it \-v $PWD:/home \-w /home ghcr.io/intel/llvm/ubuntu2204_build /bin/bash

二.编译unified-runtime

git clone https://github.com/oneapi-src/unified-runtime
cd unified-runtime
mkdir build
cd build
cmake -DUR_BUILD_ADAPTER_CUDA=ON -DUR_BUILD_ADAPTER_NATIVE_CPU=ON -DUMF_DISABLE_HWLOC=ON ..
make

三.生成一个cuda ptx kernel

tee cuda_copy.cu<<-'EOF'
#include <iostream>
#include <cuda_runtime.h>
#include <iostream>
#include <vector>
#include <stdio.h>
#include <assert.h>
#include <cstdio>
#include <cuda.h>__global__ void kernel_copy(float *input,float *output)
{unsigned int tid  = threadIdx.x + blockIdx.x * blockDim.x;output[tid]=input[tid];
}
EOF
/usr/local/cuda/bin/nvcc -std=c++17 -dc -lineinfo -arch=sm_86 -ptx cuda_copy.cu -o cuda_copy.ptx

四.API测试

tee um_query_device.cpp<<-'EOF'
#include <iostream>
#include <memory>
#include <stdlib.h>
#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
#include "ur_api.h"#define ur_check(call) \do { \ur_result_t error = call; \if (error != UR_RESULT_SUCCESS) { \fprintf(stderr, " error in file '%s' in line %i: %d.\n", __FILE__, __LINE__,error); \exit(EXIT_FAILURE); \} \} while (0)constexpr unsigned PAGE_SIZE = 4096;
template <typename T, size_t N> struct alignas(PAGE_SIZE) AlignedArray {T data[N];
};int main(int, char *[]) {ur_result_t status;ur_check(urLoaderInit(0, nullptr));std::cout << "Platform initialized.\n";uint32_t adapterCount = 0;std::vector<ur_adapter_handle_t> adapters;uint32_t platformCount = 0;std::vector<ur_platform_handle_t> platforms;ur_check(urAdapterGet(0, nullptr, &adapterCount));adapters.resize(adapterCount);ur_check(urAdapterGet(adapterCount, adapters.data(), nullptr));ur_check(urPlatformGet(adapters.data(), adapterCount, 1, nullptr,&platformCount));platforms.resize(platformCount);ur_check(urPlatformGet(adapters.data(), adapterCount, platformCount,platforms.data(), nullptr));for (auto p : platforms) {ur_api_version_t api_version = {};ur_check(urPlatformGetApiVersion(p, &api_version));std::cout << "API version: " << UR_MAJOR_VERSION(api_version) << "."<< UR_MINOR_VERSION(api_version) << std::endl;uint32_t deviceCount = 0;ur_check(urDeviceGet(p, UR_DEVICE_TYPE_GPU, 0, nullptr, &deviceCount));std::vector<ur_device_handle_t> devices(deviceCount);ur_check(urDeviceGet(p, UR_DEVICE_TYPE_GPU, deviceCount, devices.data(),nullptr));for (auto d : devices) {ur_device_type_t device_type = UR_DEVICE_TYPE_ALL;ur_check(urDeviceGetInfo(d, UR_DEVICE_INFO_TYPE, sizeof(ur_device_type_t),static_cast<void *>(&device_type), nullptr));static const size_t DEVICE_NAME_MAX_LEN = 1024;char device_name[DEVICE_NAME_MAX_LEN] = {0};ur_check(urDeviceGetInfo(d, UR_DEVICE_INFO_NAME, DEVICE_NAME_MAX_LEN - 1,static_cast<void *>(&device_name), nullptr));if (device_type == UR_DEVICE_TYPE_GPU) {std::cout << "Found a " << device_name << " gpu.\n";}ur_context_handle_t hContext;ur_check(urContextCreate(1, &d, nullptr, &hContext));std::ifstream inputFile("cuda_copy.ptx");std::ostringstream buffer;buffer << inputFile.rdbuf(); std::string fileContent = buffer.str();inputFile.close();ur_program_handle_t hProgram;ur_check(urProgramCreateWithBinary(hContext, d, fileContent.length(), (const uint8_t *)fileContent.c_str(),nullptr,&hProgram));constexpr int a_size = 32;AlignedArray<float, a_size> a, b;for (auto i = 0; i < a_size; ++i) {a.data[i] = a_size - i;b.data[i] = 0;}status=urProgramBuild(hContext, hProgram, nullptr);ur_mem_handle_t dA, dB;ur_check(urMemBufferCreate(hContext, UR_MEM_FLAG_READ_WRITE,a_size * sizeof(int), nullptr, &dA));ur_check(urMemBufferCreate(hContext, UR_MEM_FLAG_READ_WRITE,a_size * sizeof(int), nullptr, &dB));ur_kernel_handle_t hKernel;ur_check(urKernelCreate(hProgram, "_Z11kernel_copyPfS_", &hKernel));ur_check(urKernelSetArgMemObj(hKernel, 0, nullptr, dA));ur_check(urKernelSetArgMemObj(hKernel, 1, nullptr, dB));ur_queue_handle_t queue;ur_check(urQueueCreate(hContext, d, nullptr, &queue));ur_check(urEnqueueMemBufferWrite(queue, dA, true, 0, a_size * sizeof(float),a.data, 0, nullptr, nullptr));ur_check(urEnqueueMemBufferWrite(queue, dB, true, 0, a_size * sizeof(float),b.data, 0, nullptr, nullptr));const size_t gWorkOffset[] = {0, 0, 0};const size_t gWorkSize[] = {a_size, 1, 1};const size_t lWorkSize[] = {1, 1, 1};ur_event_handle_t event;ur_check(urEnqueueKernelLaunch(queue, hKernel, 3, gWorkOffset, gWorkSize,lWorkSize, 0, nullptr, &event));ur_check(urEnqueueMemBufferRead(queue, dB, true, 0, a_size * sizeof(int),b.data, 1, &event, nullptr));ur_check(urQueueFinish(queue));ur_check(urContextRelease(hContext));for (auto i = 0; i < a_size; ++i) {printf("%.2f\n",b.data[i]);}}}
out:for (auto adapter : adapters) {urAdapterRelease(adapter);}urLoaderTearDown();return status == UR_RESULT_SUCCESS ? 0 : 1;
}
EOF
g++ -o um_query_device um_query_device.cpp -I../include  -L lib -lur_loader -lpthread
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib ./um_query_device

相关文章:

unified-runtime编译与验证

unified-runtime编译与验证 一.创建容器二.编译unified-runtime三.生成一个cuda ptx kernel四.API测试 unified-runtime编译与验证 一.创建容器 docker run --gpus all --shm-size32g -ti \-e NVIDIA_VISIBLE_DEVICESall --privileged --nethost \--rm -it \-v $PWD:/home \-…...

【Python】最详细--基础语法

Python是一种强大且易于学习的编程语言&#xff0c;广泛用于各种应用程序的开发&#xff0c;如web开发、数据科学、人工智能等。以下是一些Python的基础知识&#xff1a; 1. Python的注释 Python的注释用于在代码中添加说明&#xff0c;以提高代码的可读性。注释在代码执行时…...

二叉树基础:什么样的二叉树适合用数组来存储?

二叉树基础:什么样的二叉树适合用数组来存储? 在计算机科学中,二叉树是一种非常重要的数据结构。它具有许多应用,如搜索、排序、表达式解析等。在存储二叉树时,我们可以使用多种方法,其中一种是使用数组。但是,并不是所有的二叉树都适合用数组来存储。那么,什么样的二…...

iTOP-RK3568开发板独立NPU通过算法加特应用到以下的场景

iTOP-3568开发板采用瑞芯微RK3568处理器&#xff0c;内部集成了四核64位Cortex-A55处理器。主频高达2.0Ghz&#xff0c;RK809动态调频。集成了双核心架构GPU&#xff0c;ARM G52 2EE、支持OpenGLES1.1/2.0/3.2、OpenCL2.0、Vulkan1.1、内嵌高性能2D加速硬件。 内置独立NPU,算力…...

Java基于SpringBoot微信小程序的跳蚤市场系统设计与实现(lw+数据库+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...

【分布式微服务云原生】《Redis 的高效之道:线程模型、IO 模型与 Reactor 模型全解析》

标题&#xff1a;《分布式缓存Redis 的高效之道&#xff1a;线程模型、IO 模型与 Reactor 模型全解析》 摘要&#xff1a;本文深入探讨分布式缓存 Redis 的 I线程模型、IO 模型以及 Reactor 模型。详细介绍了 Redis 在不同版本中的线程变化、IO 模型的特点和工作流程&#xff…...

科研类型PPT的制作技巧

目录 科研类型PPT的制作技巧 荣誉: 首页:ppt开头结尾 小标题 重点标记:加粗红色下划线 使用三线表 图片,文本排版 一、明确目的与受众分析 二、基础设计原则 三、内容组织与呈现 四、绘图与模型制作 五、其他注意事项 科研类型PPT的制作技巧 荣誉: 首页:ppt开…...

rom定制系列------小米6x_MIUI14_安卓13刷机包修改写入以及功能定制 界面预览

在接待一些定制化系统中。有很多工作室或者一些特殊行业的友友需要在已有固件基础上简略修改其中的功能。方便使用。例如usb调试默认开启。usb安装设置以及usb安装与内置删减一些app的定制服务。今天给友友预览其中小米6X此款机型定制相关的一些界面与功能演示。 定制机型以及…...

线性代数基础02

目录 1.向量 1.1向量的定义 1.2向量的运算 1.2.1向量加法 1.2.2向量数乘 1.2.3向量点积 1.3矩阵的特征值和特征向量 1.4向量的模 1.4.1向量的模的定义 1.4.2向量的模的几何解释 1.4.3向量的模的性质 1.5向量的内积 1.5.1向量的内积的定义 1.5.2向量的内积的几何解…...

「4.4」祖孙询问

「4.4」祖孙询问 题目描述 已知一棵 n 个节点的有根树。有 m 个询问&#xff0c;每个询问给出了一对节点的编号 x 和 y&#xff0c;询问 x 与 y 的祖孙关系。 输入格式 输入第一行包括一个整数 n 表示节点个数&#xff1b; 接下来 n 行每行一对整数对 a 和 b 表示 a 和 b 之…...

Datawhale 组队学习 文生图 Prompt攻防 task03随笔

这期我们从不同角度切入探讨赛题的进阶思路 思路1&#xff1a;对比不同大模型 首先我们可以选择尝试不同的大模型&#xff0c;使用更复杂的大模型可以提高文本改写的质量和效果。随着模型大小的增加&#xff0c;其表示能力也随之增强&#xff0c;能够捕捉更细微的语言特征和语…...

游戏投屏软件有哪些?分享这10款比较好用的!

说到投屏&#xff0c;这个事情我还是比较有发言权的&#xff01; 一般手机下载个APP&#xff0c;然后就可以通过WiFi、蓝牙或者USB进行连接投屏啦&#xff0c;下面是国内比较主流的一些游戏投屏软件&#xff0c;可以根据他们的优缺点进行选择哦&#xff01; 01.幕连 国内首款…...

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十六集(下篇):制作小BOSS龙牙哥

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作小BOSS龙牙哥 1.导入素材制作动画2.制作两种攻击行为3.制作从惊醒到转身到走路or跑步行为总结 前言 hello大家好久没见&#xff0c;之所以隔了一天时间…...

顺序表算法题【不一样的解法!】

本章概述 算法题1算法题2算法题3彩蛋时刻&#xff01;&#xff01;&#xff01; 算法题1 力扣&#xff1a;移除元素 我们先来看这个题目的要求描述&#xff1a; 把与val相同数值的元素移除掉&#xff0c;忽略元素的相对位置变化&#xff0c;然后返回剩下与val值不同的元素个数…...

VuePress的基本常识

今天大概了解了一下Vuepress&#xff0c;感觉很棒&#xff0c;看着极其简单&#xff0c;自己也想做一个&#xff0c;后续我大概率也会做一个用Vuepress为基础做的博客网站&#xff0c;很酷~ 哈哈哈&#xff0c;下面是我今天学习Vuepress的一些内容&#xff0c;简单分享下&#…...

深入解析Vue2与Vue3的区别与Vue3的提升

Vue.js作为一款流行的前端框架&#xff0c;自发布以来&#xff0c;凭借其简洁的语法、灵活的组件化和高效的性能&#xff0c;赢得了众多开发者的喜爱。随着Vue3的发布&#xff0c;许多新特性和新功能也应运而生。那么&#xff0c;Vue2与Vue3究竟有哪些区别呢&#xff1f;Vue3又…...

认识python数据分析

Python作为一种高效、灵活且易于学习的编程语言&#xff0c;在数据分析领域展现出了强大的应用潜力。 从数据清洗、预处理到复杂的统计分析、可视化及机器学习模型的构建&#xff0c;Python提供了丰富的库和框架&#xff0c;极大地简化了数据分析的流程&#xff0c;提高了工作…...

以太网交换安全:MAC地址漂移与检测(实验:二层环路+网络攻击)

一、什么是MAC地址漂移&#xff1f; MAC地址漂移是指网络中设备的MAC地址在运行过程中发生变化的现象。 MAC地址是用于唯一标识网络中的设备。 MAC地址漂移是指交换机上一个VLAN内有两个端口学习到同一个MAC地址&#xff0c;后学习到的MAC地址表项覆盖原MAC地址表项的现象。…...

NeRF三维重建—神经辐射场Neural Radiance Field(二)体渲染相关

NeRF三维重建—神经辐射场Neural Radiance Field&#xff08;二&#xff09;体渲染相关 粒子采集部分 粒子采集的部分我们可以理解为&#xff0c;在已知粒子的情况下&#xff0c;对图片进行渲染的一个正向的过程。 空间坐标(x,y,z&#xff09;发射的光线通过相机模型成为图片上…...

软件测试工程师:如何写出好的测试用例?

软件测试用例(Test Case)是软件测试过程中的一种详细文档或描述&#xff0c;用于描述在特定条件下&#xff0c;对软件系统或组件进行测试的步骤、输入数据、预期输出和预期行为。编写高质量的测试用例是确保软件质量的关键步骤之一。以下是一些编写优秀测试用例的建议&#xff…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

OpenGL-什么是软OpenGL/软渲染/软光栅?

‌软OpenGL&#xff08;Software OpenGL&#xff09;‌或者软渲染指完全通过CPU模拟实现的OpenGL渲染方式&#xff08;包括几何处理、光栅化、着色等&#xff09;&#xff0c;不依赖GPU硬件加速。这种模式通常性能较低&#xff0c;但兼容性极强&#xff0c;常用于不支持硬件加速…...

Cursor AI 账号纯净度维护与高效注册指南

Cursor AI 账号纯净度维护与高效注册指南&#xff1a;解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后&#xff0c;许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...

深入理解 C++ 左值右值、std::move 与函数重载中的参数传递

在 C 编程中&#xff0c;左值和右值的概念以及std::move的使用&#xff0c;常常让开发者感到困惑。特别是在函数重载场景下&#xff0c;如何合理利用这些特性来优化代码性能、确保语义正确&#xff0c;更是一个值得深入探讨的话题。 在开始之前&#xff0c;先提出几个问题&…...

若依项目部署--传统架构--未完待续

若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加&#xff0c;传统开发模式存在效率低&#xff0c;重复劳动多等问题。若依项目通过整合主流技术框架&…...

代理服务器-LVS的3种模式与调度算法

作者介绍&#xff1a;简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Web服务器&#xff0c;其中以Nginx为主&#xff0c;本章我们来讲解几个代理软件&#xff1a…...