Linux RT 调度器的 select_task_rq:RT 任务的CPU选择

news2026/5/1 23:54:26
简介在 Linux 多核 SMP 架构下调度器不只是简单完成任务时间片分配与优先级抢占任务创建、唤醒场景下的 CPU 核选择是决定实时系统延迟、缓存命中率、系统负载均衡的核心环节。select_task_rq 作为调度类统一抽象接口是内核为任务选定运行 CPU 的入口函数而select_task_rq_rt是 RT 实时调度类专属实现专门负责 SCHED_FIFO、SCHED_RR 类型实时任务的核选择决策。工业控制、车载自动驾驶、工业网关、宇航级嵌入式设备、音视频低延迟处理等场景均高度依赖 Linux RT 实时调度能力。这类场景对任务调度抖动、上下文切换延迟、缓存失效开销极其敏感。如果 RT 任务 CPU 选核策略不合理会出现高优先级任务被绑定在满载核心、跨核缓存频繁刷新、任务频繁迁移抖动、多核负载失衡等问题直接导致业务超时、控制逻辑错乱、实时性指标不达标。对于底层内核开发、嵌入式驱动工程师、实时系统架构师、Linux 运维调优人员来说吃透select_task_rq_rt底层逻辑能从根源上理解 RT 任务选核、负载均衡、缓存局部性兼顾的设计思想可自主定制调度亲和策略、优化实时任务部署架构、排查调度延迟疑难问题同时也是撰写内核调度相关论文、技术报告、方案设计的核心理论支撑点。本文从资深内核工程师视角结合内核源码、实战调试、代码示例完整拆解该函数运行机制剥离碎片化网上解读还原原生内核设计逻辑。核心概念1. RT 实时任务基础特性Linux 内核调度类按优先级排序stop deadline RT CFS idleRT 调度类优先级远高于普通 CFS 任务。调度策略SCHED_FIFO先来先服务、SCHED_RR时间片轮转静态优先级范围 1~99数值越大优先级越高抢占特性高优先级 RT 任务可无条件抢占低优先级 RT 任务和所有 CFS 普通任务不依赖时间片运行约束默认不主动让出 CPU除非任务阻塞、主动休眠或被更高优先级任务抢占。2. select_task_rq 核心定位内核调度框架为不同调度类抽象统一接口struct sched_class其中select_task_rq是函数指针各调度类自行实现专属选核逻辑CFS 调度类select_task_rq_fair侧重负载均衡与能效调度RT 调度类select_task_rq_rt侧重实时性优先、缓存局部性次之、轻度负载均衡调用场景仅在新任务创建 (FORK)、任务唤醒 (WAKE)两大核心场景触发其余负载均衡迁移场景不走该接口。3. 关键术语释义rt_rq每个 CPU 运行队列struct rq内嵌的 RT 专属运行队列维护当前 CPU 上所有就绪 RT 任务sd_flag调度域标志区分选核触发场景SD_BALANCE_FORK任务创建、SD_BALANCE_WAKE任务唤醒缓存局部性任务尽量绑定上次运行的 CPU利用 L1/L2/L3 缓存热数据减少跨核缓存刷新开销CPU 优先级掩码内核为每个 CPU 维护实时任务负载优先级筛选低负载、可即时抢占的候选 CPU任务亲和性cpumask掩码限定任务允许运行的 CPU 核心选核逻辑必须严格遵从亲和性配置。环境准备1. 软硬件环境要求环境类型版本 / 配置说明操作系统Ubuntu 20.04 / CentOS 7开启 PREEMPT-RT 实时补丁内核版本 5.4/5.10 LTS硬件平台X86_64 多核 CPU4 核及以上便于观察多核选核与负载均衡ARM64 开发板树莓派 4、飞腾均可适配开发工具gcc 9.0、gdb、kgdb、perf、trace-cmd、内核源码树 5.4.150辅助工具sysctl、taskset、chrt、ps、top、htop 调度调试工具2. 环境配置步骤安装编译依赖工具链# Ubuntu 环境 sudo apt update sudo apt install gcc make libncurses5-dev bison flex libssl-dev gdb perf trace-cmd # CentOS 环境 sudo yum install gcc make ncurses-devel bison flex openssl-devel gdb perf作用安装内核编译、源码调试、调度轨迹抓取全套依赖适配内核源码编译与动态调试。下载对应内核源码并切换到 5.4 版本git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git cd linux git checkout v5.4.150作用选用工业界最常用的 5.4 LTS 内核select_task_rq_rt逻辑稳定无大幅重构适合学习与工程落地。开启 PREEMPT-RT 实时配置在内核make menuconfig中开启Kernel Features - Preemption Model - Fully Preemptible Kernel (RT)保存配置后编译安装内核重启系统生效。调试环境配置# 允许非root用户抓取调度轨迹 sudo sysctl kernel.perf_event_paranoid-1 # 关闭CPU节能调频避免干扰RT调度延迟 sudo echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor应用场景select_task_rq_rt的 CPU 选核逻辑是所有 Linux 实时业务的底层支撑落地场景高度聚焦工业实时与低延迟场景。在车载自动驾驶域控制器中底盘控制、雷达数据解析、车身姿态计算等高优先级 RT 任务依靠该函数合理分配到空闲核心避免与娱乐系统任务争抢 CPU保障控制指令毫秒级响应在工业 PLC、运动控制网关场景多轴电机同步控制任务创建和唤醒时选核逻辑优先绑定本地缓存核心降低调度抖动保证运动控制插补算法稳定运行在宇航嵌入式设备、轨道交通信号系统中严苛的实时性要求不允许任务跨核频繁迁移select_task_rq_rt兼顾亲和性与负载均衡规避多核调度失衡引发的系统异常此外在音视频实时编码、低延迟网络服务器场景唤醒 RT 任务时优先选择低负载核心平衡缓存命中与多核负载兼顾性能与延迟表现。实际案例与步骤步骤 1内核源码定位 select_task_rq_rt 函数1.1 源码路径与核心框架内核源码路径kernel/sched/rt.c调度类结构体中 RT 调度类的接口绑定// kernel/sched/rt.c const struct sched_class rt_sched_class { .next fair_sched_class, .enqueue_task enqueue_task_rt, .dequeue_task dequeue_task_rt, .pick_next_task pick_next_task_rt, .select_task_rq select_task_rq_rt, // RT任务选核入口 .migrate_task_rq migrate_task_rq_rt, };代码说明该结构体是 RT 调度类的方法集select_task_rq_rt作为专属选核接口被内核调度框架在 FORK、WAKE 场景自动调用。1.2 select_task_rq_rt 主干源码精简剖析static int select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int wake_flags) { struct rq *rq; bool sync !!(wake_flags WF_SYNC); // 场景1非创建、非唤醒场景直接返回原CPU不重新选核 if (sd_flag ! SD_BALANCE_FORK sd_flag ! SD_BALANCE_WAKE) return cpu; rq cpu_rq(cpu); // 快速路径优先保持当前CPU利用缓存局部性 // 检查任务亲和性、当前CPU是否可承载该RT任务 if (rt_task_can_keep_cpu(p, cpu)) return cpu; // 慢速路径遍历调度域寻找最优候选CPU // 规则1.遵从cpumask亲和性 2.选择负载最低RT核心 3.可被当前任务即时抢占 cpu find_lowest_rt_rq_cpu(p, cpu); return cpu; }代码逐行注释首先判断调度域标志只处理任务创建、任务唤醒两种场景其余场景直接复用原有 CPU获取当前 CPU 对应的运行队列rq绑定调度队列资源快速路径优先复用原 CPU最大化保留 CPU 缓存热数据这是 RT 调度优先策略若无法保留原 CPU则遍历调度域筛选负载最低、优先级匹配、符合亲和性的目标 CPU 返回。步骤 2关键辅助函数源码解析2.1 rt_task_can_keep_cpu 缓存局部性校验static inline bool rt_task_can_keep_cpu(struct task_struct *p, int cpu) { // 1. 检查任务CPU亲和性是否允许运行在当前CPU if (!cpumask_test_cpu(cpu, p-cpus_allowed)) return false; // 2. 检查当前CPU运行的RT任务优先级是否低于当前任务 if (rt_rq_curr_prio(cpu) p-prio) return false; // 3. 无强制迁移标记允许保留当前CPU return !task_migration_pending(p); }作用实现缓存局部性优先策略只要亲和性允许、当前 CPU 任务优先级更低、无强制迁移就不切换 CPU减少缓存失效开销。2.2 find_lowest_rt_rq_cpu 最优 CPU 筛选static int find_lowest_rt_rq_cpu(struct task_struct *p, int prev_cpu) { int i, target_cpu prev_cpu; int min_prio RT_MAX_PRIO; struct rq *rq; // 遍历所有在线CPU for_each_online_cpu(i) { // 跳过不符合任务亲和性的CPU if (!cpumask_test_cpu(i, p-cpus_allowed)) continue; rq cpu_rq(i); // 获取该CPU上当前运行RT任务的优先级 int curr_prio rt_rq_curr_prio(i); // 筛选优先级更低、负载更轻的CPU if (curr_prio min_prio) { min_prio curr_prio; target_cpu i; } } return target_cpu; }逻辑说明遍历所有在线 CPU严格遵从任务亲和性选出当前运行 RT 任务优先级最低的核心将当前 RT 任务分配过去实现RT 任务负载均衡同时保证高优先级任务可即时抢占目标 CPU。步骤 3实战命令观测 RT 任务选核行为3.1 编写 RT 测试程序绑定 SCHED_FIFO 策略// rt_test.c 实时任务测试代码 #include stdio.h #include stdlib.h #include unistd.h #include sched.h #include pthread.h #define RT_PRIO 80 // 设置高RT优先级 void *rt_task_func(void *arg) { struct sched_param param; param.sched_priority RT_PRIO; // 设置为SCHED_FIFO实时调度策略 if (sched_setscheduler(0, SCHED_FIFO, param) 0) { perror(sched_setscheduler failed); return NULL; } // 死循环模拟实时业务运算 while(1) { usleep(1000); } return NULL; } int main() { pthread_t tid; pthread_create(tid, NULL, rt_task_func, NULL); pthread_join(tid, NULL); return 0; }编译与运行命令gcc rt_test.c -o rt_test -lpthread sudo ./rt_test3.2 查看 RT 任务调度与 CPU 绑定情况# 查看进程调度策略与运行CPU ps -o pid,psr,cmd,cls -p $(pidof rt_test) # 实时监控各CPU负载与RT任务分布 htop # 抓取调度轨迹跟踪select_task_rq_rt调用过程 sudo trace-cmd record -p function -l select_task_rq_rt sudo trace-cmd report作用通过工具观测 RT 任务创建时select_task_rq_rt如何自动分配 CPU、是否复用原有核心、负载均衡后的核分布状态。3.3 手动设置 CPU 亲和性验证选核逻辑# 将RT任务绑定到CPU0、CPU1 sudo taskset -c 0,1 ./rt_test观测结果select_task_rq_rt只会在 0、1 核心中选择不会跨越亲和性掩码分配到其他 CPU验证内核亲和性约束优先级高于负载均衡。步骤 4内核日志打印调试跟踪选核流程修改select_task_rq_rt函数添加内核打印自定义调试日志static int select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int wake_flags) { int new_cpu; pr_info(select_task_rq_rt: task%s, pid%d, orig_cpu%d, sd_flag%d\n, p-comm, p-pid, cpu, sd_flag); // 原有逻辑不变 if (sd_flag ! SD_BALANCE_FORK sd_flag ! SD_BALANCE_WAKE) { pr_info(select_task_rq_rt: skip reselect, return cpu%d\n, cpu); return cpu; } if (rt_task_can_keep_cpu(p, cpu)) { pr_info(select_task_rq_rt: keep local cpu%d for cache\n, cpu); return cpu; } new_cpu find_lowest_rt_rq_cpu(p, cpu); pr_info(select_task_rq_rt: reselect cpu from %d to %d\n, cpu, new_cpu); return new_cpu; }重新编译内核并安装运行 RT 测试程序后查看日志dmesg | grep select_task_rq_rt可清晰看到任务创建、唤醒时的原始 CPU、是否复用本地核、重新选核的切换过程完整还原函数执行链路。常见问题与解答Q1为什么 RT 任务不会像 CFS 任务一样频繁跨核负载迁移A1select_task_rq_rt设计核心是实时性 缓存局部性 负载均衡CFS 的select_task_rq_fair会主动做全局负载均衡、频繁迁移任务而 RT 任务仅在创建和唤醒时选核运行过程中极少主动迁移优先保证缓存热命中和调度低抖动避免跨核迁移带来的延迟波动。Q2设置了 CPU 亲和性后select_task_rq_rt 为什么还会在指定核内切换A2亲和性只是允许运行的 CPU 范围不是强制绑定固定核。当亲和性掩码包含多个 CPU 时若原 CPU 上运行更高优先级 RT 任务rt_task_can_keep_cpu校验失败会自动在亲和性范围内选择负载最低的 CPU属于正常选核逻辑。如需固定不切换可将亲和性只设置单个 CPU 核心。Q3开启 PREEMPT-RT 补丁后select_task_rq_rt 逻辑有无变化A3主体选核框架完全不变PREEMPT-RT 仅增强内核态抢占能力不修改 RT 任务 CPU 选核策略仅在调度域负载阈值、任务抢占时机上做微调学习和工程适配无需改动select_task_rq_rt核心逻辑。Q4如何排查 RT 任务调度延迟过大、抖动严重的问题A4首先通过trace-cmd抓取select_task_rq_rt调用轨迹查看是否频繁跨核选核其次检查是否大量高优先级 RT 任务扎堆绑定同一 CPU导致选核无空闲核心最后通过taskset手动拆分任务亲和性干预选核范围平衡多核负载。Q5sd_flag 除了 FORK 和 WAKE 还有哪些取值为什么其他场景不重新选核A5还有SD_BALANCE_IDLE、SD_BALANCE_EXEC等标识这类场景多为普通负载均衡、进程执行替换RT 任务对调度稳定性要求极高重新选核会破坏缓存局部性、引入调度抖动内核设计直接复用原有 CPU不做二次选核。实践建议与最佳实践RT 任务部署优先遵循缓存局部性业务架构设计时尽量将有数据交互的 RT 任务绑定同一 CPU 或同簇 CPU让select_task_rq_rt走快速路径复用本地核最大化 L2/L3 缓存命中率降低调度延迟。高优先级 RT 任务分散绑定多核避免 99、95 等高优先级任务集中在同一个 CPU 核心否则后续 RT 任务选核时无空闲低负载核心会被迫抢占业务任务引发控制逻辑卡顿手动通过taskset拆分亲和性辅助内核选核均衡负载。调试优先使用 trace-cmd 而非内核打印频繁添加pr_info内核打印会干扰 RT 调度延迟生产环境严禁使用开发调试阶段用trace-cmd抓取函数调用轨迹无侵入式分析select_task_rq_rt执行流程。禁止对 RT 任务开启 CPU 调频节能CPU 节能调频会改变核心性能、引入调度延迟波动建议所有 RT 业务核心固定为performance高性能模式保证select_task_rq_rt选核后的任务执行稳定性。二次定制调度策略的开发规范如需修改select_task_rq_rt实现自研选核逻辑必须保留亲和性校验、缓存局部性快速路径两大基础规则只扩展负载筛选、优先级分组逻辑避免破坏内核 RT 调度基础架构。内核版本选型建议工业、宇航、车载项目优先选用 5.4、5.10 LTS 内核select_task_rq_rt逻辑成熟稳定社区补丁适配完善避免使用 5.15 以上新版本调度类接口有小幅重构兼容性较差。总结与应用场景本文从底层概念、环境搭建、源码剖析、代码实战、调试方法、问题排障、最佳实践全维度深度拆解了 Linux RT 调度器select_task_rq核心函数select_task_rq_rt的设计思想与运行逻辑。核心要点可概括三点一是该函数仅服务于 RT 任务创建、唤醒两大场景非必要不重新选核二是选核策略优先级为实时性优先、缓存局部性次之、轻度多核负载均衡三是严格遵从 CPU 亲和性约束通过快速路径复用本地核、慢速路径筛选最优核的双层逻辑平衡延迟与负载。select_task_rq_rt作为 Linux 实时调度的底层基石所有低延迟、高可靠的实时业务都依赖其 CPU 选核机制落地。除前文提到的车载自动驾驶、工业 PLC 运动控制、宇航嵌入式设备、轨道交通信号系统外在 5G 基站实时数据处理、金融低延迟交易服务器、医疗设备实时控制、音视频实时编解码等场景中吃透该函数逻辑都是系统调优、架构设计、故障排查的必备能力。开发者可基于本文源码示例、调试方法自行在内核中新增日志、修改选核策略、定制业务专属 RT 调度逻辑将理论知识落地到实际项目开发、内核论文撰写、实时系统方案设计中同时可依托本文框架延伸学习pick_next_task_rt、migrate_task_rq_rt等关联函数完整构建 Linux RT 调度子系统知识体系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2573466.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…