- 博客(42)
- 收藏
- 关注
原创 机器学习--实践与分析
2、使用迭代化的方法,即梯度下降法(GD),逐渐调整模型参数直至训练集上的成本函数调至最低。最终趋同于第一种方法计算出来的模型参数。1、通过“闭式”方程,直接计算出最拟合训练集的模型参数(也就是使训练集上成本函数最小化的模型参数)。表示每个样本的类别归属。
2025-07-05 16:19:33
182
原创 pybind11学习笔记
当然这么写的前提是pybind11库的include文件夹下的头文件们已经跑到了/usr/include/pybind11/目录下,这个时候find_package就可以找到相关的头文件。或者自己从github上下载源码,将目录写在add_subdirectory。编译成功后在build目录下调用ipython,输入。
2024-11-19 22:42:31
320
原创 linux快速入门
linux系统的组成:linux系统内核+系统级应用程序内核提供系统最核心的功能,如:调度cpu、调度内存、调度文件系统、调度网络通讯、调度IO等。系统级应用程序,可以理解为出厂自带程序,可供用户快速上手操作系统,如:文件管理器、任务管理器、图片查看、音乐播放等。其实就是 通过软件模拟计算机硬件,并给虚拟硬件安装真实的操作系统。
2024-10-22 13:23:39
878
2
原创 RISC-V (十二)系统调用
mret这条指令会利用status的mpp值恢复到之前的特权级别。epc寄存器的值存放的是ecall指本身的地址。当前的代码都是实现在machine模式下。蓝色的线表示涉及到权限切换。
2024-09-08 01:15:29
613
原创 RISC-V (十一)软件定时器
主要的思想:硬件定时器是由硬件的定时器设备触发的。软件定时器在硬件定时器的基础上由软件控制实现多个定时器的效果。主要的思路是在trap_handler函数中加入软件代码,使其在设定的时间点 去执行想要执行的功能函数。
2024-09-07 23:40:59
681
原创 RISC-V (十)任务同步和锁
如果任务调度发生在这几条机器码中,那么有可能任务A将锁取出来看一下的时候,任务B抢占了cpu,将锁取出来看一下,这样两个任务都看到的是锁还没有被锁上。临界区:在并发执行的程序执行环境中,所谓的临界区(critical section)指的是一个会访问共享资源的代码片段,例如同时访问一个共享设备或者一个共享内存,而且当这样的多指令片段同时访问某个共享资源可能会引发问题,那这些代码片段就叫临界区。两个任务被系统交替着调度,任务A拿到锁后将锁取出来看一下,发现是没锁上的,将锁锁上,继续执行临界区的指令。
2024-09-07 22:46:55
709
原创 RISC-V (九)抢占式多任务
定时器中断,跳到trap handler函数,同时系统自动将下一条指令的地址存到mepc中。执行完trap handler函数,遇到mret指令,系统根据mepc寄存器的值跳到了原先程序的下一条指令继续执行。抢占式多任务:改写trap handler函数,跳到trap handler函数,首先是保存上下文文,即将32个寄存器的值存起来,同时将mepc的值也存起来。等待下一次的定时器中断再次发生,保存任务B的上下文,包括保存mepc值,调用switch函数,回复任务A的上下文,包括回复mepc值......
2024-09-07 16:04:58
530
原创 RISC-V (七)外部设备中断
PLIC本身也是一个外设,也是通过寄存器去访问这个外设的。所有的外设都是通过内存映射的方式去访问外设的寄存器的。大致流程跟异常处理一样,除了中断是把下一条pc值复制到mepc中,异常是把当前pc值复制到mepc中。qemu主要是参考FU540-C000这款芯片做出来的,可以经常看一下这款芯片的原理图。mstatue中也有一个mie,那个mie是全局中断,关掉就是把全部的中断关掉了。PLIC会根据中断的类型,进行筛选,如果有多个中断,只会让一个中断进来。下图中的mie是二级中断控制。
2024-08-25 10:57:11
1063
原创 RISC-V (六)Trap和Exception
当trap发生时,pc会被替换为mtvec设定的地址,同时hart会设置mepc为当前指令或下一条指令的地址,当我们需要退出trap时可以调用特殊的mret指令,改指令会将mepc中的值恢复到pc中(实现返回的效果)。PP是之前的特权级别的意思。具体的辅助信息由特定的硬件实现定义,RISC-V规范没有定义具体的值。当trap发生时,除了通过mcause可以获取exception的种类code值外,hart还提供了mtval来提供exception的其他信息来辅助我们执行更进一步的操作。
2024-08-11 14:21:10
1207
原创 RISC-V (五)上下文切换和协作式多任务
协作式多任务演变而来。抢占式环境下,操作系统完全决定任务调度方案,操作系统可以剥夺当前任务对处理器的使用,将处理器提供给其它任务。有一点像函数跳转,但是跟函数跳转又不太一样,函数跳转不会改变上下文,多任务协作会改变context的内容。-smp后面的数字指的是hart的个数,qemu模拟器最大可以有8个核,此文围绕一个核来讲。协作式环境下,下一个任务调度的前提是当前任务主动放弃处理器。所谓的任务就是寄存器的当前值。
2024-08-04 22:51:35
668
原创 RISC-V (三)RVOS
Operating System,是一组系统软件程序。-主管并控制计算机操作、运用和运行硬件、软件资源。-提供公共服务来组织用户交互。操作系统有广义和狭义之分。-狭义:内核。-广义:发行包 = 内核 + 一组软件。
2024-07-28 23:57:15
350
原创 RISC-V (二)汇编语言编程
汇编语言是一种“低级”语言。汇编语言的缺点:-难度-难写-难移植汇编语言的优点:-灵活-强大汇编语言的应用场景-需要直接访问底层硬件的地方-需要对性能执行极致优化的地方汇编文件一般后缀为.S或.s,.S包含了预处理的语句,.s就是纯粹的汇编语句。一个完整的RISC-V汇编程序有多条语句(statement)组成。打方括号表示可选。-label表示一个标号,必须以":"结尾。label相当于一个地址,给这个地址起了个名字。是这条指令存放在内存的地址。
2024-07-28 11:23:10
2219
原创 RISC-V (一)ISA介绍 | 编译链接 | 嵌入式开发介绍
加州伯克利所研发的第五代精简指令集。ISA指令集架构:是底层硬件电路面向上层软件程序提供的一层接口规范。ISA(处理器)的宽度指的是CPU中通用寄存器的宽度,这决定了寻址范围的大小,以及数据运算能力。ISA的宽度与指令编码长度无关。目前主流的移动智能终端,个人计算机和服务器用的寄存器是64位。
2024-07-26 06:03:45
1273
原创 Docker的使用方式
Docker类似于一个轻量的虚拟机。容器和镜像是Docker中最重要的两个概念,镜像可以保存为tar文件,Dockerfile是配置文件,仓库保存了很多第三方已经做好的镜像。
2024-01-30 22:17:23
590
原创 OpenMIPS用verilog实现
但是手头上只有一台M1芯片的Macbook air,本文综合多篇教程,基于vscode+iverilog+GTKwave,带你从零开始在MacBook上搭建Verilog编写与仿真的平台。Macbook M1使用vscode+iverilog+gtkwave实现Verilog代码的编译与运行-CSDN博客 。gtkwave工具的安装笔者费了一番功夫,最后是先安装MacPorts工具,然后用port命令行安装的方式得以安装成功。
2024-01-27 12:31:08
593
原创 (十四)Head first design patterns建造者模式(c++)
建造者把产品细节的实现过程单独封装成类,完成产品本身和创建产品之间的解耦。每一个建造者都相对独立,因此在建造细节实现方面实现了灵活性和可扩展性。建造者模式和工厂模式的区别:工厂模式关心把这个产品创建出来,而不关心其细节;建造者模式不仅需要把产品生产出来,还需要关心生产细节。建造者的核心在于将建造者独立成不同的子类,以实现建造过程的灵活性和可扩展性。
2024-01-23 11:13:24
606
原创 (十三)Head first design patterns原型模式(c++)
原型模式就是就是对对象的克隆。有一些私有变量外界难以访问,而原型模式可以做到对原型一比一的复刻。其关键代码为下面的clone方法。此方法将本对象进行复制传递出去。
2024-01-22 19:56:01
642
原创 (十二)Head first design patterns代理模式(c++)
代理模式:创建一个proxy对象,并为这个对象提供替身或者占位符以对这个对象进行控制。典型例子:智能指针...例子:比如说有一个talk接口,所有的people需要实现talk接口。但有些人有唱歌技能。不能在talk接口中实现sing功能,又不能在所有的people中实现sing功能。于是可以用代理模式去为people增加sing功能。具体的做法就是创建proxy类与people类继承同一个基类talk,将people的指针传入proxy以让proxy对象接管people对象。
2024-01-22 01:22:03
880
原创 (十一)Head first design patterns状态模式(c++)
因为电梯在门开启的时候一般是不能运行的,在运行的时候一般也不会门开启,而在停止工作状态一般不会再去执行关门这个动作。于是在类Lift中存储电梯目前的状态,在执行每个动作的时候用swith分支来判断当前动作是否有效,以及更新当前状态。而且当需要增加状态时,比如说电梯停电状态和电梯维修状态,就需要去更改里面的switch语句。为了在增加状态的时候尽量少的修改原有代码,可以将swtich中的每个状态抽离出来单独包装成类。假设你需要实例化一台电梯,并模仿出电梯的四个状态:开启、关闭、运行、停止。
2024-01-21 19:28:15
659
原创 c++学习强化理解之路——基类指针指向子类
基类指针对象只存储跟基类中的成员函数、成员对象相关信息,子类指针对象存储了子类和基类中的信息。按道理来说,一个基类指针指向了一个子类对象。运用基类指针只能操纵基类中相关成员。而虚函数表的设计使得基类指针可以操控子类中函数,从而实现多态。
2024-01-18 21:49:17
816
1
原创 (十)Head first design patterns组合模式(c++)
参考:https://blog.csdn.net/naibozhuan3744/article/details/109209863
2024-01-18 21:45:04
592
1
原创 (九)Head first design patterns迭代器模式(c++)
迭代器的基本思路是为每一种聚合对象创建一个相应的迭代器。这样外部在用这个聚合器的迭代器遍历聚合对象时,只需要调用固定的接口,而不需要观察聚合对象以及迭代器的实现细节。迭代器模式的目的是把聚合对象可迭代化,也就是可以得到聚合对象的迭代器,并用迭代器的hasNext()和next()方法遍历聚合对象。
2024-01-17 19:48:53
438
原创 (八)Head first design patterns模板方法模式(c++)
模板方式模式,就是你要在一个类中定义一套方法,但这个方法的细节会随着程序不断丰富而发生改变。于是你可以在这个类中写一套模板方法,就是大概搭出一套框架。这个框架的组成封装成各个成员函数。成员函数的细节由子类去实现。这样当方法的实现细节发生变化时,只需要额外再添加实现此细节的子类即可。看到这里,你会发现设计模式的一个核心思想就是,把需要变化的部分抽离出来,单独封装成类。这样当变化发生时,不需要修改原先的代码,只需要添加类,以遵守程序设计的“开闭原则”。
2024-01-17 11:06:39
470
原创 (七)Head first design patterns适配器模式和外观模式(c++)
类”适配器模式采用的是继承的原理。新创建一个类同时继承类A和类B,这个类继承类A,因为可以适配接口。新类所需要做的事情就是重写原本类A中的成员方法,在成员方法中调用类B的成员方法。类A中的成员函数重写,在成员函数中调用成员变量B中的相应的方法。如果一个接口只对类A适配,适配器模式可以让这个接口同样可以与类B合作。适配器模式有两种实现方式,一种是“类”适配器模式,另一种是“对象”适配器模式。“类”适配器的好处就是不用需要重新实现整个被继承者,直接继承就行。“对象”适配器的好处就是对类B的子类也同样适用。
2024-01-16 22:45:54
475
1
原创 (六)Head first design patterns命令模式(c++)
假想你来到了一个餐厅,你点了几个菜给到服务员,服务员结过菜单给到厨房,过一会你的菜就做好端出来了。这个过程你不需要跟厨师打交道,当然你可以指定一名厨师或者选用默认的厨师给你做晚饭。但这个过程你没有直接跟厨师接触,服务员充当了你和厨师之间的桥梁。你有一个万能遥控器,这个遥控器可以控制家里所有的家电。而你控制它们的方式就是把命令输入到遥控器里。你不需要关注每一个家电的内部实现细节。这个时候你和家电也是解耦合的。命令模式的实现有两个关键点。
2024-01-15 19:04:34
503
原创 (五)Head first design patterns单例模式(c++)
单例模式的实现目的是:在整个系统的生命周期里,确保某些类只能实例化出一个实例对象。单例模式的应用场景:操作系统任务管理器、windows系统的回收站、应用程序的日志、多线程的线程池……单例模式又分为懒汉式和饿汉式,两者的区别仅在于创建此单例的时间不同。懒汉式:程序开始运行时此单例并不存在,只在需要该单例的时候创建此单例。因为是在运行过程中创建单例,需要考虑线程安全问题。饿汉式:单例在程序开始运行时就创建单例。这种创建方法本身就线程安全,不需要考虑多线程的线程安全问题。
2024-01-14 23:43:47
463
1
原创 (四)Head first design patterns工厂篇(c++)
什么是工厂?负责创建对象,实现其细节的类被称为工厂(Factory)。简单工厂是对工厂最基础的实现方式,其实都不能算作是一种设计模式,而是更像是一种编程习惯。简单工厂的目的是将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。即使用者可直接消费产品而不需要知道其生产的细节。
2024-01-14 15:51:04
1301
1
原创 (三)Head first design patterns装饰器模式(c++)
设想你是一家星巴克的店主,为了方便管理饮品属性,现在对每一种饮品单独创建类。于是你有了拿铁、香草拿铁、美式咖啡、卡布奇诺、摩卡、拿铁多加一份糖、拿铁多加两份糖、摩卡多加一份牛奶.……比如说,用户一开始想要一杯拿铁,当你把拿铁给他了,这时他又说加一份糖。于是你把拿铁装饰装饰,给了一份加了糖的拿铁给他。这时他又说加一份牛奶,于是你把饮品装饰装饰,加了一份牛奶给他。本着能不有重复代码就别有重复代码的原理,也是为了后续更加方便地管理装饰类们的管理,在装饰类和基类之间添加一个CondimentDecorator类。
2024-01-13 19:49:23
443
1
原创 (二)Head first design patterns观察者模式(c++)
发布者通过RegisterObserver方法来添加订阅者信息,用RemoveObserver方法来移除订阅者。观察者模式主要用来降低观察者与被观察者之间的耦合关系,主要用于一对多的关系。当发布者的信息发生变化时,发布者调用NotifyObserver方法去通知订阅者,订阅者跟新自己的信息。同时订阅者Observer应该在内部存储发布者的信息——它需要知道自己的发布者是谁。作为发布者Subject,主要有三个功能:添加观察者、移除观察者、通知。作为订阅者,至少有一个功能,就是更新信息。
2024-01-13 16:31:26
446
1
原创 (一)Head first design patterns策略模式(c++)
子类继承父类可以获得父类的属性和方法。子类通过方法的重写去实现自身方法的独特性。但是当多个子类中的部分子类用的还是同一种方法,这就会造成大量重复的代码。采用策略模式,将warmUp、coolDown等行为单独封装成类。子类不再”是“什么,而是”有“什么。策略模式其实就是一种组合模式,一方面减少了重复的代码,另一方面可以更灵活地在运行时更换策略。采用继承方法描述对象。
2024-01-13 11:35:12
474
1
原创 前沿人工智能算法
1、从平时的论文和开源代码方面来看,大家对pytorch的兴趣要大于tensorflow,而从推理方面,tensorflow要远大于pytorch。4、seq2seq模型(encoder + attention + decoder)的基础模块,主要有三类:CNN、RNN、transformer。无有序假设: 需要位置编码来反映位置变化对于特征的影响,对绝对位置不敏感。无局部假设:可并行计算,对位置不敏感。3、残差网络的原生写法与融合写法。对相对位置敏感,对绝对位置不敏感。对相对位置敏感,对绝对位置敏感。
2024-01-10 23:59:57
479
1
原创 操作系统使用
bashrc是Bash Shell的配置文件,在每次打开新的终端时会被执行(交互式非登录)。该文件可以用来设置环境变量、别名、函数等,以及在打开新的终端时执行一些自定义命令或脚本。.zshrc是Zsh Shell的配置文件,在每次打开新的终端时会被执行(交互式非登录)。该文件可以用来设置环境变量、别名、函数等,以及在打开新的终端时执行一些自定义命令或脚本。文件放在/etc/目录下的是系统级(全局变量),放在~/目录下的是用户级(局部变量)。
2024-01-10 21:04:57
538
1
原创 RNN神经网络学习
RNN神经网络的精髓在于,网络中有一部分结果会保留下来,作用在下一次的输入中,从而让网络有记忆功能。即此时刻网络的输出不仅与当前的输入有关,还跟之前的输入有关。
2024-01-07 01:37:25
380
1
原创 SystemC学习(一)
线程进程能够挂起和重新激活,线程进程使用wait挂起,当敏感列表中有时间发生时,或者wait时间超时时,线程进程会被重新激活,在一次方针中,线程进程一旦退出,将不能再重新进入。钟控线程进程是一种特殊的线程进程,它继承于线程进程,但只能在时钟的上升沿或者下降沿被触发或者激活,这种行为更接近实际硬件的行为,引入钟控线程进程是为了产生更好的行为综合。这里比较奇怪的一个地方是user_module_name括号里面的::sc_core::sc_module_name,暂时还没有搞懂这个写法。
2023-12-27 16:48:32
2856
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅