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

Metal 之旅之MTLLibrary

什么是MSL?

MSL是Metal Shading Language 的简称,为了更好的在GPU执行程序,苹果公司定义了一套类C++的语言(Metal Shading Language ),在GPU运行的程序都是用这个语言来编写的。

什么是MTLLibrary?

.metal后缀的文件编译后会生成metallib文件,MTLLibrary通过metallib文件来创建实例,提供了swift,oc调用metal文件中的函数能力,更多的可以看到做cpu与gpu通信的一个桥梁。

MTLLibrary加载的方式有哪些

MTLLibrary 加载的方式有很多种,这里给大家分享经常使用的两种方式

1,字符串方式加载

代码如下:

func createLibrary(_ device:MTLDevice) -> MTLLibrary?{let shader = """#include <metal_stdlib>using namespace metal;struct VertexIn {float4 position [[ attribute(0) ]];float4 color [[ attribute(1) ]];};struct VertexOut {float4 position [[position]];float4 color; // 确保输出与片段着色器的输入匹配};vertex VertexOut vertex_main(const VertexIn in [[stage_in]]) {VertexOut out;out.position = in.position;out.color = in.color; // 将颜色从输入复制到输出return out;}fragment float4 fragment_main([[stage_in]] VertexOut in) {// 直接使用顶点着色器传递过来的颜色值return in.color;}"""// metal使用shaderdo {let library = try device.makeLibrary(source: shader, options: nil)return library} catch let error {#if DEBUGfatalError()#endifreturn nil}}

特点:使用简单,无需额外创建metal文件,无需担心结构体,方法名重复,适合简单逻辑的处理,缺点是MSL语法错误没有高亮提示,不适合处理复杂逻辑,是运行时编译

2,metal文件方式加载

代码如下:


func createLibrary(_ device:MTLDevice) -> MTLLibrary?{//项目中已经有了metal文件了guard let libraryURL = Bundle.main.url(forResource: "default", withExtension: "metallib") else {return nil}let library = try! device.makeLibrary(URL: libraryURL)return library}

特点:适合复杂的业务场景,MSL能够高亮显示语法错误,每个业务模块都可以单独创建一个单独的metal文件,通过命令单独编译为独立的metallib文件,避免创建library对象时导入过多不需要的内容,编译好的metallib和在ipa包的目录下,每次创建library时不用再运行时编译了。

注意:默认情况下不论有多少个metal文件,打包时都会编译为默认的default.metallib文件,此时需要注意不同文件中结构体,函数名不要重复,如果通过命令行编译不同的metallib文件则不需要考虑这种问题,使用命令行编译metal文件参考这篇博客《使用 Metal 命令行来构建库》网址:https://blog.csdn.net/SkyNullCode/article/details/122190736

相关文章:

Metal 之旅之MTLLibrary

什么是MSL? MSL是Metal Shading Language 的简称&#xff0c;为了更好的在GPU执行程序&#xff0c;苹果公司定义了一套类C的语言&#xff08;Metal Shading Language &#xff09;&#xff0c;在GPU运行的程序都是用这个语言来编写的。 什么是MTLLibrary? .metal后缀的文件…...

第十二章 Redis短信登录实战(基于Session)

目录 一、User类 二、ThreadLocal类 三、用户业务逻辑接口 四、用户业务逻辑接口实现类 五、用户控制层 六、用户登录拦截器 七、拦截器配置类 八、隐藏敏感信息的代码调整 完整的项目资源共享地址&#xff0c;当中包含了代码、资源文件以及Nginx&#xff08;Wi…...

华为OD机试 - 九宫格游戏(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…...

Pytorch库中torch.normal()详解

torch.normal()用法 torch.normal()函数&#xff0c;用于生成符合正态分布&#xff08;高斯分布&#xff09;的随机数。在 PyTorch 中&#xff0c;这个函数通常用于生成 Tensor。 该函数共有四个方法&#xff1a; overload def normal(mean: Tensor, std: Tensor, *, generat…...

atcoder-374(a-e)

atcoder-374 文章目录 atcoder-374ABC简洁的写法正解 D正解 E A #include<bits/stdc.h>using namespace std;signed main() {string s;cin>>s;string strs.substr(s.size()-3);if(str "san") puts("Yes");else puts("No");return 0…...

idea2024设置中文

今天下载idea2024.2版本&#xff0c;发现已经装过中文插件&#xff0c;但是还是不显示中文&#xff0c;找了半天原来还需要设置中文选项 方案一 点击文件 -> 关闭项目 点击自定义 -> 选择语言 方案二 点击文件 -> 设置 外观与行为 -> 系统设置 -> 语言和地区…...

跨境电商独立站轮询收款问题

想必做跨境电商独立站的小伙伴&#xff0c;对于PayPal是再熟悉不过了&#xff0c;PayPal是一个跨国际贸易的支付平台&#xff0c;对于做独立站的朋友来说跨境收款绝大部分都是依赖PayPal以及Stripe条纹了。简单来说PayPal跟国内的支付宝有点类似&#xff0c;但是PayPal它是跨国…...

[OS] 3.Insert and Remove Kernel Module

Insert and Remove Kernel Module 1. 切换到 root 账户 $ sudo su作用&#xff1a;Linux 内核模块的加载和卸载需要超级用户权限&#xff0c;因此你必须以 root 用户身份进行操作。sudo su 命令允许你从普通用户切换到 root 账户&#xff0c;从而获得系统的最高权限&#xff…...

updatedb命令:更新locate数据库

一、命令简介 ​updatedb ​命令用于更新 locate ​命令使用的文件数据库&#xff0c;以便 locate ​命令能够快速定位文件。 ‍ 二、命令参数 命令格式 updatedb [选项]选项 ​-l​: 仅更新本地文件系统&#xff08;默认行为&#xff09;​-U​: 更新所有文件系统​-o D…...

分布式共识算法ZAB

文章目录 概述一、ZAB算法概述二、ZAB算法的核心特性三、ZAB算法的工作流程四、ZAB算法的优势与局限 其他共识算法 概述 分布式共识算法ZAB&#xff0c;全称Zookeeper Atomic Broadcast&#xff08;Zookeeper原子广播&#xff09;&#xff0c;是Zookeeper保证数据一致性的核心…...

程序化交易与非程序化交易者盈利能力孰优孰劣

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…...

【JavaEE】【多线程】进程与线程的概念

目录 进程系统管理进程系统操作进程进程控制块PCB关键属性cpu对进程的操作进程调度 线程线程与进程线程资源分配线程调度 线程与进程区别线程简单操作代码创建线程查看线程 进程 进程是操作系统对一个正在运行的程序的一种抽象&#xff0c;可以把进程看做程序的一次运行过程&a…...

LeetCode hot100---贪心算法专题(C++语言)

贪心算法 当前取最优&#xff0c;最终完成全局最优1、买卖股票的最佳时机 &#xff08;1&#xff09;题目描述以及输入输出 (1)题目描述: 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。(2)输入输出描述&#xff1a; 输入&…...

《PyTorch深度学习快速入门教程》学习笔记(第15周)

目录 摘要 Abstract 1. 安装Anaconda 2. 查看显卡驱动 3. 安装Pytorch 4. Pytorch加载数据 5. 常用数据集两种形式 6. 路径直接加载数据 7. Dataset加载数据 摘要 本周报的目的在于汇报《PyTorch深度学习快速入门教程》课程第一周的学习成果&#xff0c;主要聚焦于py…...

kubeadm部署k8s1.28.0主从集群(cri-dockerd)

1. kubernetes集群规划 主机IP主机名主机配置角色192.168.100.3master12C/4G管理节点192.168.100.4node12C/4G工作节点192.168.100.5node22C/4G工作节点 2. 集群前期环境准备 &#xff08;1&#xff09;初始化脚本 #!/bin/bash echo "——>>> 关闭防火墙与SE…...

C语言复习概要(四)

本文 1. 操作符的分类算术操作符关系操作符逻辑操作符 2. 二进制制和进制转换二进制与十六进制的表示进制转换算法 3. 原码、反码和补码原码反码补码 1. 操作符的分类 C语言中的操作符种类繁多&#xff0c;常用的主要操作符可以按照其功能进行如下分类&#xff1a; 算术操作符…...

【楚怡杯】职业院校技能大赛 “Python程序开发”数据清洗练习

题目&#xff1a; 将书名为‘一级建造师 2020教材 2020版一级建造师 建筑工程管理与实务’的作者&#xff08;空值&#xff09;改为 全国一级建造师执业资格考试用书编写委员会&#xff0c;‘出版日期’改为‘2020-05-01’将书名为‘中国共产党简史&#xff08;32开&#xff0…...

重学SpringBoot3-集成Redis(五)之布隆过滤器

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;五&#xff09;之布隆过滤器 1. 什么是布隆过滤器&#xff1f;基本概念适用场景 2. 使用 Redis 实现布隆过滤器项目依赖Redis 配置…...

BGP路由原理详解

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏 华为_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; 目录 一. BGP简介: 二. BGP报文中的角色 BGP的报文 BGP处理过程 BGP有限状态机 BGP属性 三. BGP作用 四. BGP选路 ​…...

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型)

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型&#xff09; 目录 Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型&#xff09; 1. 项目说明 2. 数据说明 &#xff08;1&#xff09;心跳信号分类预测数据集 3. 模型训练 &#xff08;1&#xff09;项目安装 &am…...

AI股市预测的可参考价值有几何?

1. AI技术在股市预测中的应用 首先&#xff0c;AI技术在股市预测中的应用主要包括机器学习、深度学习、自然语言处理&#xff08;NLP&#xff09;和量化金融模型等。机器学习算法能够处理和分析大量的金融数据&#xff0c;从中寻找模式和规律。而深度学习特别是在处理复杂的非线…...

【大数据应用开发】2023年全国职业院校技能大赛赛题第02套

需要技能竞赛软件测试资料的同学们可s聊我&#xff0c;详细了解 目录 任务A&#xff1a;大数据平台搭建&#xff08;容器环境&#xff09;&#xff08;15分&#xff09; 任务B&#xff1a;离线数据处理&#xff08;25分 任务C&#xff1a;数据挖掘&#xff08;10分&#xf…...

2. 将GitHub上的开源项目导入(clone)到(Linux)服务器上——深度学习·科研实践·从0到1

目录 1. 在github上搜项目 (以OpenOcc为例&#xff09; 2. 转移到码云Gitee上 3. 进入Linux服务器终端 (jupyter lab) 4. 常用Linux命令 5. 进入对应文件夹中导入项目(代码) 注意&#xff1a;系统盘和数据盘 1. 在github上搜项目 (以OpenOcc为例&#xff09; 把链接复制下…...

毕业设计项目——基于transformer的中文医疗领域命名实体识别(论文/代码)

完整的论文代码见文章末尾 以下为核心内容 摘要 近年来&#xff0c;随着深度学习技术的发展&#xff0c;基于Transformer和BERT的模型在自然语言处理领域取得了显著进展。在中文医疗领域&#xff0c;命名实体识别(Named Entity Recognition, NER)是一项重要任务&#xff0c;旨…...

电子信息类专业技术学习及比赛路线总结(大一到大三)

本文主要是总结到目前为止电子信息类的专业技能、比赛路线&#xff0c;以后会持续更新&#xff0c;希望能为那些热爱电子技术或渴望学习课本之外知识的小伙伴们提供帮助&#xff0c;参加学科竞赛和找工作必备。&#xff08;毕竟很多课本上的内容都没什么用 &#xff09; 1.单片…...

怎么将bash(sh)的所有输出保存到log/txt中?

tee 命令 这会将所有输出同时显示在屏幕上并追加到日志文件中。 bash your_script.sh 2>&1 | tee -a log_file.txt 其他方法不可用 只使用 >> 不会将除了print之外的所有保存 bash your_script.sh >> log_file.txt >> 和 2>&1一起只会保存在日…...

腾讯云服务器上使用Nginx部署的静态网站打开速度慢的原因分析及优化解决方案

目录 前言1. 网站打开速度慢的原因分析1.1 服务器配置不足1.2 网络延迟1.3 Nginx配置不合理1.4 静态资源未优化 2. 网站速度的测试与分析2.1 使用浏览器开发者工具分析2.2 在线工具测试 3. 网站优化的具体方法3.1 服务器配置优化3.2 CDN加速与DNS优化3.3 优化Nginx配置3.3.1 启…...

如何移除 iPhone 上的网络锁?本文筛选了一些适合您的工具

您是否对 iPhone 运营商的网络感到困惑&#xff1f;不用担心&#xff0c;我们将向您介绍 8 大免费 iPhone 解锁服务。这些工具可以帮助您移除 iPhone 上的网络锁&#xff0c;并使您能够永久在网络上使用您的设备。如果您想免费解锁 iPhone&#xff0c;请阅读本文并找到最适合您…...

深度学习:CycleGAN图像风格迁移转换

目录 基础概念 模型工作流程 循环一致性 几个基本概念 假图像&#xff08;Fake Image&#xff09; 重建图像&#xff08;Reconstructed Image&#xff09; 身份映射图像&#xff08;Identity Mapping Image&#xff09; CyclyGAN损失函数 对抗损失 身份鉴别损失 Cyc…...

pytorch和yolo区别

PyTorch与YOLO的区别&#xff1a;一个简明的科普 在深度学习的领域&#xff0c;有许多工具和框架帮助研究人员和开发者快速实现复杂的模型。其中&#xff0c;PyTorch与YOLO&#xff08;You Only Look Once&#xff09;是两个非常重要的名词。本文旨在探讨这两个技术之间的区别&…...