直击昇腾硬件底层:PTO ISA为什么能帮你更快上手昇腾950?

news2026/4/28 1:41:54
当芯片越来越强程序员为什么反而更难掌控它2026年3月新一代昇腾950系列芯片逐渐浮出水面。如果把它摊开来看像不像一张密密麻麻的工业园区图32个矩阵运算单元、64个向量处理核心、1.6TB/s的DDR带宽、1728 TFlops的FP4算力。数字很耀眼硬件很凶猛。可问题也正出在这里芯片越强驾驭它的人却未必越轻松。为什么因为它不再是一座小作坊而是一整座高速运转的工厂。多级存储层级、片上片外互联、CCU 集合通信加速引擎、海量调度体系……每一个部件都在吞吐每一个环节都在争时延。于是矛盾出现了硬件强到离谱软件却很容易在门口打转。昇腾团队显然也看清了这一点。他们没有继续给复杂架构缝缝补补而是换了个思路给它设计一套可以直达底层、又足够好用的语言。这就是今天的主角PTO ISA。一、为什么要给芯片披一层“外衣”先把时间拨回去。昇腾源自达芬奇架构今已经演进了五六代。每一代物理指令集都在变化矩阵单元从 FP16 走到 FP8/FP6再走到昇腾950的 FP4向量单元也不再满足于规规矩矩的 SIMD引入了 SIMT 前端去处理 Gather/Scatter、多线程和控制流这些“难啃的骨头”。那问题来了底层每一代都在变程序员难道每一代都要从头学一遍当然能学但代价高。传统做法是手写算子用更底层的 Ascend C 去榨干性能。可这种方式往往意味着大量模板代码、繁重迁移成本以及每次芯片迭代都要跟着“重打一遍地基”。所以华为的选择很直接在物理指令集之上再封装一层虚拟指令集并全面开源。注意它不是那种把硬件包得严严实实的“厚外衣”。PTO 更像是一件剪裁精准的外套——不掩盖肌肉不模糊骨架而是把底层能力按程序员能理解、能调用的方式重新组织起来。说白了底下还是那个强悍甚至有点“生猛”的达芬奇硬件上面却终于能说人话了。更关键的是这件“外衣”还有一个很重的承诺跨代兼容。里面的零件可以换外面的接口不变。对开发者来说这不是锦上添花这是能不能长期写、敢不敢重投入的分水岭。二、一套“外衣”为什么想跑遍所有平台PTO-ISA 的设计目标非常清楚优先级甚至有点“逆潮流”兼容性 易用性 性能有人可能会问性能不是第一位吗恰恰相反。因为现实很残酷你连稳定可用、可迁移都做不到谈性能很多时候只是纸面上的豪言。在硬件层面PTO 想做的是同一套指令集服务器能跑超节点能跑手机能跑甚至汽车也能跑。这不是“一个接口适配万物”的空口号而是试图在不同设备形态之间维持一种足够稳定的编程抽象。在编程语言层面PTO 目前已支持两套框架PyPTOMPMD 模式多个核跑不同程序底层直通 PTO-ISATileLangSPMD 模式多个核跑相同程序同时支持 Ascend C 和 PTO-ISA 后端一个更像多兵种联合作战一个更像整齐编队协同推进。表面打法不同底层吃的却是同一套 PTO 指令。这意味着什么意味着程序员面对的不再是每个平台一张脸、每代芯片一套脾气而是终于有机会站在一个相对稳定的“中枢接口”上做事。三、为什么理解 PTO得先把芯片看成一座“物流城市”1. 冯·诺依曼架构为什么说像从小农经济走向工业文明最早的处理器很像一个小村庄计算核心和存储之间只靠一条“乡间小路”连接。路窄、车少、节奏慢也就凑合能过日子。可一旦算力上去这条路立刻堵死。怎么办答案不是喊口号而是修仓库、修干线、修中转站。于是多级存储层级出现了。把它想象成一座工业城市就容易多了这里有个显然易见的原则近距离用电动三轮车、中距离用大卡车、远距离用轮船集装箱。到计算卡上近距离挪一挪32bit 标量就行跨卡搬运你还拿着小盒子一点点运那不是算力不够是人在拖后腿。跨卡这种场景必须上兆级别的大块数据才能把通信时延摊薄。总结一下距离越远搬的数据块就必须越大。这是什么这就是 Tiling 的本质。不是玄学不是术语堆砌而是一次很朴素的工程判断路远就得装满车再出发。2. 达芬奇架构的“天才设计”妙在哪里达芬奇架构下最关键的一点洞察矩阵运算的数据复用潜力太大了大到值得专门为它造一套机制。怎么理解把矩阵乘法想成一个魔方。左矩阵的一块数据放在 L0A 里稳稳不动右矩阵的数据从 L0B 一股股灌进来结果则不断累加到 L0C。这样一来原本需要反复搬运的一边数据被固定住了带宽压力立刻减轻效率自然上去。当这一边的数据用完了怎么办再换另一边固定。这不就是流水作业的极致版本吗不是“每次都重新搬全套”而是尽可能让贵的数据多待一会儿、多复用几次。这套思路说到底不是花哨而是狠把带宽当黄金把复用当纪律。也正因为如此达芬奇架构后续每一代演进本质上都没有脱离这条主线。3. 昇腾950为什么像32座城市组成的超级国家到了昇腾950规模彻底上去了。32个矩阵单元每个都像一座独立运转的工业小城64个向量单元承担更通用、更灵活的向量计算CCU 集合通信加速引擎像高速公路网和港口系统负责更远距离的数据协同STARS 启明星调度系统像中央调度塔台安排任务和流量统一调度、全局一致性书同文、车同轨大家遵守同样的 Cache Line 规格复杂吗当然复杂。但复杂不是原罪。真正麻烦的是如果没有合适的抽象复杂就会直接砸到程序员头上。PTO 存在的意义恰恰就是把这种复杂度重新编排让人能下场、能调优、能持续写。四、PTO-ISA到底像什么像一套集装箱调度系统1. 多种粒度的指令为什么重要PTO 指令集本质上是一套分层的集装箱调度语言pto.load # 标量指令32bit最细粒度 pto.vload # 向量指令256B处理一维数据 pto.tload # 块/Tile 指令64KB处理二维矩阵块 pto.tget # GM → 更远层级512KB大块搬运看起来像几条指令实则是在回答一个核心问题同样是“搬数据”你到底是在搬一粒沙还是在调一整个集装箱编程的本质也因此被重新显形你要设计的不只是算子逻辑而是集装箱的大小、形状、内容物以及它在不同港口之间的转运顺序。2. 数据流为什么是五步走以矩阵乘法为例数据在芯片里的旅程大致如下GM (全局内存) ↓ tload64KB Tile 块加载 Mat TileL1 Buffer ↓ textract抽取成更小块 L0A L0B一级仓库喂给矩阵单元 ↓ matmul矩阵乘累加到 L0C L0C ↓ tstore结果写回 GM这条路径看上去清楚真正的难点却藏在背后每一层仓库之间接受的数据块大小不一样吞吐节奏也不一样。所以程序员真的要管这么多吗是也不是。是因为你必须理解层级结构否则性能优化无从谈起。不是因为 PTO 的目的正是让你直击硬件逻辑而不是陷进每个同步细节的泥潭里。3. SIMD SIMT为什么能放进同一个框架昇腾950的向量单元支持两种并行范式SIMD规整向量计算适合连续 Tile 数据写法接近普通 for 循环SIMT处理不规则并行如 Gather/Scatter、控制流通过 parallel for 组织以往很多架构里这两套东西像两种方言彼此隔着一道墙。PTO 的做法是别分家直接让它们在同一个程序里交织。也就是说规整计算和不规则控制不再非要二选一。这就是华为所谓的新同构架构——不是把一切揉成一团而是在同一框架里让不同并行模式各安其位、各尽其职。4. 三层调度为什么说“你能控到哪一层全看你敢不敢下潜”PTO 暴露了三个层级的调度接口层级接口调度力度最上层任务调度接口任务级中间层块间 Pipeline块级自动插 set/wait最底层向量微指令指令级软向量排流水这套设计有意思的地方在于它没有假装“人人都只需要高层抽象”。相反它承认现实有人要快上手有人要抠极限。所以你可以怎么选想先跑起来就站在高层让系统替你自动排流水。想把性能榨到最后一滴就往下潜自己排、自己控、自己对每一拍时序负责。这不是单纯的易用性设计而是一种很有锋芒的工程态度简单可以有但别拿简单阉割掉专业能力。五、实战手搓 Matmul 与 FlashAttentionPTO 到底能打到什么程度最有说服力的从来不是概念而是结果。Step 1为什么说 30 多行代码就能“开箱见山”用 PyPTO 写一个矩阵乘三十多行 Python 代码编译后就能直接在昇腾950上运行a_l1 pto.alloc_tile(tile_buf_a_l1) b_l1 pto.alloc_tile(tile_buf_b_l1) a_l0 pto.alloc_tile(tile_buf_a_l0) b_l0 pto.alloc_tile(tile_buf_b_l0) c_l0 pto.alloc_tile(tile_buf_c) for li in pto.range(bid, core_loop, num_blocks): m_idx li // n_loop n_idx li % n_loop m_offset m_idx * c128 n_offset n_idx * c256 pto.load(sv_a0, a_l1) for k_idx in pto.range(c0, k_dtile_num, c1): k_offset k_idx * c_kd is_first_k_tile k_idx c0 for phase in range(8): if phase % 4 0: b_half phase // 4 h_off const(b_half * K_TILE) pto.load(sv_b, b_l1) pto.extract(a_l1, c0, a_col, a_l0) pto.extract(b_l1, b_row, c0, b_l0) if phase 0: pto.matmul(c_l0, a_l0, b_l0, c_l0) else: pto.matmul_acc(c_l0, a_l0, b_l0, c_l0) if k_idx c1 k_dtile_num: pto.load(sv_a_next, a_l1) pto.store(c_l0, sv_c)性能呢开箱约 40%对比对象是专家手写 Ascend C 的极致算子。40% 算高吗如果拿“极限性能”做标尺它当然不是终点。但如果你想到这只是几十行 Python、而且是直接打到昇腾950底层那它已经不仅仅是“能跑”而是说明这条抽象路径是成立的。Step 2矩阵单元为什么会空转因为你让它“饿着肚子干活”泳道图一看就明白矩阵单元大约有 50% 的时间在空转。它不是不想算而是在等数据。问题出在哪答案很朴素计算和搬运是串行的。你在算的时候没有顺手把下一块数据提前运过来。于是算完就停停完再等等完再算。硬件再猛也经不起这么“喂一口、停一下”。解决办法是什么Double Buffer在 PTO 里直接声明两个 Tile形成双缓冲一个在算一个在装。更关键的是PTOAS 编译器会自动帮你排好流水线。程序员不需要手动去插那些令人头皮发麻的同步指令。只要把a_l1 pto.alloc_tile(tile_buf_a_l1) b_l1 pto.alloc_tile(tile_buf_b_l1) a_l0 pto.alloc_tile(tile_buf_a_l0) b_l0 pto.alloc_tile(tile_buf_b_l0) c_l0 pto.alloc_tile(tile_buf_c)改成a_l1 [pto.alloc_tile(tile_buf_a_l1), pto.alloc_tile(tile_buf_a_l1)] b_l1 [pto.alloc_tile(tile_buf_b_l1), pto.alloc_tile(tile_buf_b_l1)] a_l0 [pto.alloc_tile(tile_buf_a_l0), pto.alloc_tile(tile_buf_a_l0)] b_l0 [pto.alloc_tile(tile_buf_b_l0), pto.alloc_tile(tile_buf_b_l0)] c_l0 pto.alloc_tile(tile_buf_c)在 PyPTO 里写乒乓 buffer本质上不是让程序员去手工拉时序图而是只需要把意图说清楚剩下的流水由编译器去排。效果如何小矩阵性能直接抬到 80% 左右。这一步很说明问题很多时候性能差不是因为算子不聪明而是因为数据没跟上。算力像一头猛兽你却拿细水管喂它怪谁不过乒乓 buffer 解决了小矩阵大矩阵还没彻底过关。为什么因为 16384×16384 的 float16 矩阵数据规模大约 256 MiB远超 L2 缓存。局部流水线优化到这里就开始撞墙了。Step 3Swizzle 优化为什么叫“扭秧歌的达芬奇”这时候就要上更有画面感的招数Swizzle 优化。名字听着像玩笑原理却很硬矩阵遍历不再“一条道走到黑”而是走到 L2 容量边界就折返让数据块尽量在 L2 内部就地算完、就地释放减少缓存冲突。换句话说它不再让数据块在缓存里横冲直撞而是让它们沿着更聪明的路径转身、回摆、再推进。展开来看轨迹像麻花像扭动也难怪大家管它叫“扭秧歌”。用 PyPTO 实现代码并不夸张def swizzle_nz(li, m_loop, n_loop, c_swizzle, c_swizzle_m1, c1, c2): tile_block_loop (n_loop c_swizzle_m1) // c_swizzle tile_block_span c_swizzle * m_loop tile_block_idx li // tile_block_span in_tile_block_idx li % tile_block_span is_last_block tile_block_idx (tile_block_loop - c1) n_col_tail n_loop - c_swizzle * tile_block_idx n_col s.select(is_last_block, n_col_tail, c_swizzle) m_idx in_tile_block_idx // n_col n_idx tile_block_idx * c_swizzle (in_tile_block_idx % n_col) odd_block (tile_block_idx % c2) c1 flipped_m_idx m_loop - m_idx - c1 m_idx s.select(odd_block, flipped_m_idx, m_idx) return m_idx, n_idx加上 Swizzle 之后结果很直接大矩阵性能也基本追平了手写极致算子。这里真正值得注意的不只是“性能追平”四个字而是它说明了一件事PTO 不是只能拿来写原型它也能承载真正深入的性能优化。进阶挑战Flash Attention为什么更像一场立体会战Flash Attention 的难点在于什么不在某一个算子本身而在于Cube 矩阵计算和Vector 操作比如 Softmax高频交替。如果把它们老老实实串行写出来会发生什么很简单Cube 等 VectorVector 等 Cube彼此轮流站岗。硬件不是没活干而是总在排队。优化思路也因此很明确把内层循环做成细粒度流水让数据块持续注入让 Cube 和 Vector 尽量并行工作。PTO 的编译器为什么能在这里发挥作用因为它拥有强约束数据块对齐、没有指针乱飞、没有非法操作。这些约束不是“束手束脚”而是给编译器腾出了大胆优化的空间。某种意义上它可以模拟乱序 CPU 的思路对不同数据块做时间评估然后自动排出更优流水。这点很重要。因为真实高性能 Flash Attention 的依赖关系并不优雅甚至可以说相当缠绕。继续手工一层层抠成本极高心智负担也极重。而 PTO 的价值正在于把优化问题从“全靠人工死磕”推进到“编译器与 AI Agent 可以共同介入”。篇幅有限感兴趣大家可关注 https://gitcode.com/cann/pto-isa/tree/master/demos/baseline/flash_atten六、One More ThingAI Agent 为什么能在半小时里写出一套算子这部分可能才是最有冲击力的。Claude Code 直接使用 PTO 指令集写算子再与专家手写的 Ascend C 算子对比结果如下怎么看这些数字先说结论Cube 和 Vector 类算子离极手写限性能还有距离但是已经接近一半的性能。计算通讯融合类算子更是已经做到90%。总体来看这已经不是“能试试”而是足以支撑算法研发先导阶段的理论验证和快速迭代。更关键的不是百分比本身而是时间——整个过程只用了 30 分钟代码同时跑在昇腾910和950上功能和精度全部正确。这意味着什么意味着昇腾算子的开发正在从“先攒一堆底层专家再花很久把第一版做出来”转向另一种范式先让 AI Agent 在 PTO 这套可控抽象上快速生成可用代码再由人类专家把关键路径继续压到极致。这是替代专家吗不是。这是把专家从“重复搭脚手架”的劳动里解放出来让他们把精力投向真正值钱的地方调度策略、内存布局、性能边界和体系结构级优化。说得更锋利一点如果一套底层抽象不能被 AI Agent 理解和操作它在未来的软件生产方式里很可能就不够先进。而 PTO显然已经在往这个方向走。结语回到最开始那个问题当芯片复杂到程序员难以驾驭我们到底该怎么办答案不是一味降低门槛更不是把硬件能力藏起来假装简单。真正有效的做法是用更好的抽象去驯服复杂度同时把通往极限性能的路保留下来。PTO-ISA 做的正是这件事。它像给昇腾芯片穿上了一套合身的西装骨架没变力量没减动作却更容易被理解、被编排、被复用。在直播展示的 Matmul 场景里100 多行 Python 代码就能一步步把性能逼近手写实现。这不是单纯“开发更省事”而是说明一种新的开发范式正在成形——技术门槛没有被粗暴抹平生产效率却被显著抬高。而当 AI Agent 真正进入主战场这套范式的价值恐怕才刚刚露出刀锋。资源链接GitCode PTO-ISA https://gitcode.com/cann/pto-isaGitHub PTO-ISA https://github.com/PTO-ISA/pto-isaGitHub PTOAShttps://github.com/PTO-ISA/PTOAS飞书社区群微信社群

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…