LWN: 5.14 中支持了core scheduling!

一文搞懂core-scheduling核心机制 一文搞懂core scheduling的工作核心机制 阅读详情

关注了就能看到更多这么棒的文章哦~

Core scheduling lands in 5.14

By Jonathan Corbet
July 1, 2021
DeepL assisted translation
https://lwn.net/Articles/861251/

core scheduling 这个功能已经讨论了三年多了。对于那些需要这个功能的人来说,好消息是终于不用再继续等待了。它已经被合入了 mainline,会随着 5.14 内核版本发布。现在这项工作(可能)已经到达了最终版,我们有必要再看一下这项功能为什么是有意义的、它的工作机制是什么。core scheduling 功能并不适合每个人,但它对一些用户群体来说已经证明是很有用的了。

同步多线程(SMT,simultaneous multithreading,或称 "超线程,hyperthreading")是一种可以在一个处理器中实现两个或更多的在执行的线程的硬件功能,这样一来,单个 CPU 看起来就像是有一组 "sibling(兄弟)" 的 CPU。当其中一个兄弟 CPU 在执行时,其他的就必须等待了。SMT 很有用,因为 CPU 在等待某些 event 时经常会空闲下来,通常是在等待从内存获取到的数据。当一个 CPU 在等待时另一个就可以执行了。SMT 并不是对所有 workload 的性能都有提升,但对大多数 workload 来说它都是一个重大的改进。

SMT 中的这些兄弟 CPU 共享了 CPU 内部几乎所有硬件,其中也包括 CPU 在维护的这些 cache。这就提供了一种可能性,即其中一个 sibling CPU 可以通过观察 cache 中可以观察到的一些变动,从而提取来自另一个 sibling CPU 操作的数据。Spectre 硬件漏洞使得这个问题变得更加严重了,而且几乎没有办法解决。要想用目前的内核来安全地运行两个互不信任的进程的话,唯一可靠的办法就是完全禁用 SMT,这可是很多人(尤其是云计算供应商)明显感到很不爽的一种做法。

虽然人们可能会争辩说,云计算供应商总是看什么都不满意,不用去管他们的抱怨。但实际上如果有办法能让他们满意的话,那就非常有价值了。其中一种可能性就是允许他们在自己的系统上启用 SMT,同时又能避免他们的一些客户利用其缺陷来攻击其他人。只要能相互不信任的进程不在同一 CPU core 上同时运行,就可以实现这个效果了。云服务的客户经常同时有许多进程在运行(毕竟,大规模地向互联网用户发送垃圾邮件就需要很多并发活动)。如果这些进程可以被限制起来,使得任何一个 CPU core 中的所有 sibling CPU 都只会运行来自同一客户的进程的话,那么我们就可以避免某个垃圾邮件发送者来窃取另一位垃圾邮件发送者的客户列表了,当然也会保护了其他用户的私钥等重要信息。

core scheduling 就可以提供这种隔离。抽象来说,每个进程都被分配了一个 "cookie",代表了它的某种特性。比如可以给每个用户分配一个独特的 cookie。然后,scheduler 会确保实行一条规则:进程只有在具有相同的 cookie 值时才能共享 SMT core,换句话说,也就是只有在它们能相互信任的情况下。

更具体地来说,core scheduling 是通过 prctl() 系统调用来管理的,该系统调用通常定义如下:

int prctl(int option, unsigned long arg2, unsigned long arg3,
          unsigned long arg4, unsigned long arg5);

在 core-scheduling 这种操作的情况下,option 值为 PR_SCHED_CORE,其余参数定义为:

int prctl(PR_SCHED_CORE, int cs_command, pid_t pid, enum pid_type type,
    unsigned long *cookie);

通过 cs_command 可以选择四种可能的操作:

  • PR_SCHED_CORE_CREATE,使内核生成一个新的 cookie,并将其分配给进程号为 pid 的进程。type 参数控制这个分配动作的影响范围。例如,PIDTYPE_PID 就是指明只改变它所代表的进程,而 PIDTYPE_TGID 则将 cookie 分配给整个 thread group 线程组。cookie 参数的值必须为 NULL。

  • PR_SCHED_CORE_GET,查找 pid 对应的 cookie 值,将其存放在 cookie 中。注意,用户空间进程就算拿到 cookie 值,也没有太多用处,仅仅能够用来检查两个进程是否有相同的 cookie。

  • PR_SCHED_CORE_SHARE_TO,将调用者进程的 cookie 值分配给 pid(如上所述,也是使用 type 来控制影响范围)。

  • PR_SCHED_CORE_SHARE_FROM,根据 pid 获取 cookie 并将其分配给调用者进程。

当然,一个进程不能随意获取和分配 cookie,这里的判断条件跟一般人们考虑的 "这个进程能否对目标进程调用 trace() " 的条件差不多。它也不可能在用户空间生成 cookie 值,这个限制确保了不相关的进程只会获得完全不相同的 cookie 值。内核只允许 cookie 值在已经有一定程度相互信任的进程之间传播,这样一来就可以阻止恶意进程将自己的 cookie 改为跟目标进程一样的 cookie 值来进行攻击了。

每当一个 CPU 来执行 scheduler 代码时,会先挑出最高优先级的任务,按正常方式运行。如果 core scheduling 启用了,那么接下来就会向 sibling CPU 发送一个 IPI 中断(inter-processor interrupt),每个 sibling CPU 就会相应地来检查这个刚刚得到调度的进程的 cookie 值与本地已经在运行进程的 cookie 值是否相等。如果有必要的话,被中断打断的 CPU 就会切换到另一个拥有相同 cookie 的进程去执行,即使当前正在运行的进程具有更高的优先级也不影响这个结果。如果没有能互相信任的其他进程,那么这个 sibling CPU 就直接闲置下来,直到情况发生变化为止。如果可能的话,scheduler 会在各个 CPU 之间迁移进程来避免这个 sibling CPU 被强制空闲下来。

core scheduling 早期 patch 中的内核调度代码对整个系统来说会引起很大的开销。有时测出来甚至比完全禁用 SMT 更糟糕,这就违反了本来的目标了。不过,在那之后这部分代码已经经历了多次修订,现在显然表现得更好了。不过,毕竟这个机制在极端情况下会导致 CPU 明明有进程等着执行的情况下也会被闲置,因此这个方案总是会有代价的。由于这个原因,Linus Torvalds 也说 core scheduling "对大多数人来说基本没有意义"。不过,针对那些必须要关闭 SMT 不可的情况下,现在这个替代方案很可能是有好处的。

虽然,安全相关的使用场景在推动 core scheduling 的开发,但其实也有其他的场景也迫切希望能拥有这个功能。例如,运行实时进程的系统通常必须要禁用 SMT,因为当 CPU 在需要跟 sibling CPU 争夺硬件资源时,完全无法保证这个 response-time。core-scheduling 可以确保实时进程会独立拥有一个 CPU,同时系统的其他部分可以继续使用 SMT。还有其他情况一些情况也需要这种能控制同一 CPU 上的进程是否可以混合着运行的能力。

因此,尽管 core scheduling 对大多数 Linux 用户来说可能并没有什么用处,但还是有一些用户团体会很高兴看到这个功能最终进入了 mainline。对类似 scheduler 这样的核心、性能敏感的组件上添加这种复杂的逻辑,从来就不是一件容易的事情。但是,只要有足够的决心总能找到办法。参与到这个功能的开发中的开发者们肯定为推动这项工作的成功完成而得到了应有的 cookie。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

科研党必备:用Python+Excel批量下载文献的保姆级教程(附常见错误解决) 本文提供了一套利用Python和Excel实现外文文献批量下载的自动化解决方案。教程详细介绍了如何从数据库导出并清洗DOI信息,编写健壮的Python脚本进行批量下载,并包含错误处理与进阶优化技巧,旨在帮助科研人员将重复性劳动自动化,大幅提升文献收集效率。 阅读详情

相关推荐

AI系统架构设计实战:AI应用架构师的深度指南

核心概念:AI系统架构是指设计和组织人工智能系统各个组件(包括数据、算法、计算资源、集成接口等)的结构框架,以及这些组件之间的交互方式和原则。它为AI应用提供了技术蓝图,决定了系统的性能、可扩展性、可维护性和可靠性。数据的本质:数据是对客观事物的符号表示,是可识别的、抽象的符号。在AI系统中,数据不仅是输入,也是系统学习和改进的基础。数据就像AI系统的"燃料",其质量和数量直接决定了AI系统的能力边界。

AI天才研究院 1198

Core Scheduling

core scheduling是v5.14中新增的功能,为什么有core scheduling呢?因为当开启超线程(yperhreading)时,一个物理核就变成了两个逻辑核,但,这两个逻辑核还是要共享物理核的某些缓存的,而,这种共享会带来安全问题(例如:MDS、L1TF等)。core scheduling就是要解决 开启超线程(yperhreading)时所带来的安全问题。

溺水三千只取一瓢饮 1494

基于Harness Engineering构建AI Agent的全自动化CI_CD流水线

AI Agent的CI/CD是指对Agent的全生命周期资产(代码、Prompt、RAG知识库、模型权重、工具配置)进行持续集成、持续测试、持续发布和持续观测的自动化流程,核心目标是在保障发布质量的前提下,最大化提升Agent的迭代效率。

AI云原生与云计算技术学院 622

LWN: core scheduling的多种应用场景

点击上方蓝色“Linux News搬运工”关注我们~Many uses for Core schedulingByJonathan CorbetLPCkernel开发社...

Linux News搬运工 1045

File does not exist: /user/anonymous/.staging/job_1628851608378_6064/报错问题解决

user/admin/.staging/job_1571397171638_0001/job_1571397171638_0001_1.jhist 所以为什么没有下发,这里面jhist,只是被引发的错误,它还不是根本的错误。看到上面错误,我们就可以判断,这是网络问题,然而网络无非是ip地址,防火墙,端口,hosts等。我们正常的hosts是这样的。在回头复盘想想,我们找不到jhist,跟我们的网络问题二者是很难找到关联的,所以大家在遇到问题的时候,一定多排查和思考,而不是看到一个错误,就以为是它的问题。

石榴姐yyds 2170

Codex 接入国产大模型指南:客户端与 CLI 双端实战

CC Switch是目前最流行的 Codex / Claude Code 模型切换工具,内置了协议转换功能,支持几乎所有主流国产模型。核心原理Codex → 本地 8317 端口(CC Switch)→ 协议转换 → 国产模型 API整个过程对 Codex 完全透明,Codex 以为自己在跟标准的 Responses API 对话。用户类型推荐方案理由新手 / 不想折腾配置简单,免费额度够用追求稳定体验通义千问(原生接入)官方兼容,功能最完整企业用户自建 AI 网关可控性强,支持多用户管理预算有限。

篮球界最会写bug的人;程序猿中打球最菜的人。 573

Fast Core Scheduling with Userspace Process Abstraction——论文泛读

SOSP 2024 Paper论文阅读笔记整理 问题 随着网络带宽(最高400Gbps)和IOPS(每秒一百万次)的增加,CPU的性能一直相对停滞不前,并成为主要瓶颈。 为了节省CPU资源,最近的系统(例如盘古[37]、Snap[34]、FaRM[14,15]、MICA[31]、RAMCloud[40]等)采用了内核旁路来消除内核开销并实现裸机硬件性能。将硬件设备映射到用户空间,并广泛使用运行到完成(RTC)模型来运行应用程序逻辑。与此同时,云应用程序(如微服务、无服务器等)通常被打包到共享集群中(

重新开始写博客 1175

一文就够-InfiniBand 技术全面解析:从原理到实践的通俗易懂指南

想象一下,在一个超级数据中心里,成千上万台服务器需要像蜜蜂群体一样高效协作。如果用传统的网络连接,就像让每只蜜蜂都排着队传递消息,效率极低。InfiniBand(简称 IB)就是为了解决这种 "通信拥堵" 而生的高速网络技术,它专门为高性能计算(HPC)、数据中心和云计算环境设计,就像给服务器之间搭建了多条高速公路,让数据可以飞驰而过。

jundao1997的专栏 1395

advanced-java 分布式系统进阶完全指南:系统拆分、Dubbo 架构与分布式锁/事务/会话实战

> 本文基于 advanced-java 项目的 [docs/distributed-system 目录](https://link.gitcode.com/i/a48ff021624df3a72586035be6092221) 所涵盖的分布式系统知识体系,系统梳理从"为什么要拆分系统"到"分布式服务框架(Dubbo)""CAP 定理""分布式锁""分布式事务""分布式会话"的完整技术脉络。读完本

gitblog_00450的博客 458

如何在SpringBoot中实现AI 流式输出?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1479

13、基于RBF的自适应鲁棒控制与反步控制方法及实现

本文介绍了基于RBF神经网络的自适应鲁棒控制与反步控制方法,详细阐述了控制系统的程序结构、核心算法及实现流程。通过Simulink搭建仿真系统,利用RBF网络逼近系统中的不确定非线性函数,并结合Lyapunov稳定性理论设计控制律,实现了对倒立摆等复杂非线性系统的高精度跟踪控制。文章还提供了完整的MATLAB/Simulink代码示例和仿真结果分析,验证了该方法的有效性与鲁棒性,为实际工程应用提供了可行的技术路径。

ol789012的博客 87

Linux 调度器中的核心调度(Core Scheduling):SMT 场景的隔离优化

摘要:Linux核心调度技术(Core Scheduling)是Linux内核5.14引入的SMT安全隔离机制,通过为任务分配Cookie标识符,确保同一物理核心仅运行同安全域的任务。该技术有效缓解了PortSmash等SMT侧信道攻击,相比完全禁用SMT可减少60-80%性能损失。文章详细介绍了核心调度的原理、环境配置、应用场景(如云计算多租户隔离)和实现方法,包括Cookie管理、性能调优和调试技巧。核心调度可与cgroup等系统集成,适用于金融交易、机密计算等对安全性和性能要求较高的场景,是平衡SMT

望获实时Linux系统 215

芒果YOLO11改进176:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

芒果YOLO11改进186:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2131

常见CPU调度算法

CPU调度 初衷: In a system with a single CPU core, only one process can run at a time. Others must wait until the CPU’s core is free and can be rescheduled. The objective of multiprogramming is to have some process running at all times, to maximize CPU utilizat

大吉 7633

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LWN:继续完善core scheduling!

关注了就能看到更多这么棒的文章哦~Completing and merging core schedulingByJonathan CorbetMay 13, 2020OSPM原文来自...

Linux News搬运工 1085

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LindDotNetCore~Scheduling任务调度模块的介绍

回到目录 任务调度组件 位于Scheduling目录 基类JobBase,所有JOB都派生自它,重写Cron属性可以修改调度周期 支持单次JOB,即执行完成后马上停止 支持对外API接口,以便获取和修改JOB的列表的状态 源代码展现 自定义Job在继承JobBase之后,可以设置自动的名称,调度周期,是否单次, 和执行过程. public abstract class JobBase : ...

weixin_34220623的博客 265

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Linux阅码场 - Linux内核月报(2020年08月)

关于Linux内核月报Linux阅码场Linux阅码场内核月报栏目,是汇总当月Linux内核社区最重要的一线开发动态,方便读者们更容易跟踪Linux内核的最前沿发展动向。限于篇幅,只会对...

宋宝华 3083

Linux schedule 4、负载均衡

4、负载均衡4.1、SMP负载均衡4.1.1、Scheduling Domains4.1.1.1、Scheduling Domains概念借用Linux Scheduling Domains的描述,阐述Scheduling Domains的概念。一个复杂的高端系统由上到下可以这样构成: 1、它是一个 NUMA 架构的系统,系统中的每个 Node 访问系统中不同区域的内存有不同的速度。 2、同时它又是

pwl999的博客 8032

Linux进程核心调度器之主调度器schedule--Linux进程的管理与调度(十九)

日期 内核版本 架构 作者 GitHub 优快云 2016-06-30 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 我们前面提到linux有两种方法激活调度器:核心调度器和 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不

OSKernelLAB(gatieme) 1万+

理解 Linux 动态库加载:LD_LIBRARY_PATH

flyfish

二分掌柜的 334

Linux 磁盘满了怎么排查?df / du / find 三步定位大文件

Linux 磁盘满排查三步法:df -h 定位分区、du 逐层下钻、find 按大小和时间抓大文件,附 inode 耗尽、文件已删未释放、du 与 df 不一致等经典坑的解决方案。

weixin_38291577的博客 218

Linux-iostat命令详解

Linux命令学习记录

m0xin的博客 100

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 293

【Linux】APT 本地 deb 安装与 `-f` 参数总结笔记

apt install ./xx.deb 可自动解析并安装依赖,无需 -f;-f 仅用于修复已损坏的依赖状态,非首次安装时必需。apt install -f 可单独运行,修复 broken dependencies。两者职责不同:前者是安装与依赖解决,后者是故障修复。完全离线时需提前准备依赖包或本地源。

hknaruto的专栏 210

Linux rm 误删文件恢复实操教程

Linux使用rm删除文件时,并不会直接抹除磁盘上的数据,只是移除文件索引,让系统不再识别这块空间。只要没有写入新数据,原有扇区内容就会保留。新文件写入才有可能覆盖这些区域,一旦覆盖就很难找回。恢复的本质就是扫描磁盘,找到这些还存在、但索引丢失的数据条目,再把它们导出保存到其他分区。越早停止写入,恢复成功的概率越高。

海天数据恢复-winhex数据恢复教程 226

Windows/Linux下强实时运动控制内核(二):基于Qt的Delta机械手的开发应用

强实时运动控制内核MotionRT750下Qt开发Delta机械手的完整开发流程。

weixin_57350300的博客 241
上一篇: LWN:My Book Live用户受到惊吓!
下一篇: LWN:5.14合并周期的第一部分!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值