PMON分析(1)- ROM阶段

article/2025/9/12 20:33:32

PMON的运行过程分为两个阶段:第一阶段是在ROM FLASH中运行,主要进行基本硬件初始化,如:初始化核的一些配置寄存器,其中包括cpu状态和原因寄存器、pcie的配置寄存器、GPIO、sata、cache、tlb、内存控制器和串口初始化等;第二阶段在内存中执行,主要完成环境变量和基本数据结构的初始化、PCI总线扫描和设备初始化,网络协议和设备初始化,并对搜索到的PCI总线上的设备进行驱动程序的加载与配置等,最后引导内核启动。

一、第一阶段

1、配置cpu状态

_start开始执行pmon的入口,也就是mips cpu取指的第一条地址0xbfc00000.

  bal     ls2k_version

     nop

     bnez    v0,2f

     nop

     .set    mips32

     mfc0    t0, $15, 1      #EBASE  Exception Base and cpunum

     .set    mips3

     andi    t0, t0, 0x3ff

     bnez    t0, 2f

     nop

读取PRId 寄存器获取并判断版本是否正常

     lui     t0, 0xba00

     lui     t1, 0x1fe0

       sw      t1, 0x1010(t0) /* config bar for APB * //*((int *))0xba001010 = 1fe00000

lw      t2, 0x1004(t0) //t2 = *(*(int *))

     ori     t2, t2, 0x2

     sw      t2, 0x1004(t0) //enable

设置APB总线控制器的配置空间

     li t0,0xbfe0700c

     lw t1,0x0(t0)

     and t2,t1,(1 << 11)

     beqz  t2,2f

     nop

     li t0,0xbfe0700c

     lw t1, 0x0(t0)

     sw t1,0x0(t0)

     li t2,0x3c00

     li t0,0xbfe07014

     sw t2,0x0(t0)

bal watchdog_close

     nop

关闭看门狗。

/* NOTE!! Not more that 16 instructions here!!! Right now it's FULL! */

mtc0    zero, COP_0_STATUS_REG //cuckoo

mtc0    zero, COP_0_CAUSE_REG

li      t0, SR_BOOT_EXC_VEC     //0x400000 //bit22(BEV)

mtc0    t0, COP_0_STATUS_REG //cuckoo

 

bal     initregs

nop

将状态寄存器和原因寄存器清零,禁用所有的中断和异常检测, 并使当前状态处于内核模式。清零$1~$30寄存器,

mfc0    t0, CP0_STATUS

li      t1, 0x64000000|SR_KX|SR_SX|SR_UX|SR_BOOT_EXC_VEC

or      t0, t0, t1

  mtc0    t0, CP0_STATUS

la      sp, stack

la      gp, _gp

jr      ra

nop

使能32位浮点寄存器模式,使能协处理器可用,使能32 位浮点寄存器,初始化堆栈指针和全局指针。

  .set    mips32

      mfc0    t0, $16, 6              #Store fill

      .set    mips3

      li      t1, 0xfffffeff

      and     t0, t1, t0

      .set    mips32

      mtc0    t0, $16, 6              #Store fill

     .set    mips3

设置GSConfig 寄存器,禁止处理器 store 操作自动写合并功能。

/* spi speedup */

li  t0, 0xbfe00220      //SPI 的 IO 寄存器的基地址 0x1fff0220

li  t1, 0x07

sb  t1, 0x4(t0)

设置spi参数控制寄存器,读使能、支持连续地址读、支持快速读模式。

bal     locate                  /* Get current execute address */

locate:

la      s0, start

subu    s0, ra, s0

and     s0, 0xffff0000

bal 这条指令是一个 pc 相对跳转指令, 跳转的目的是把 ra 寄存器和 0xa0000000 相或,将 cpu 的执行地址映射到 unmapped uncached 段。

mfc0    t0, CP0_STATUS

        li  t1, 0x64000000|SR_KX|SR_SX|SR_UX|SR_BOOT_EXC_VEC      # {cu3,cu2,cu1,cu0}<={0110, status_fr<=1,0xe0 to enable 64bit space

        or      t0, t0, t1

        mtc0    t0, CP0_STATUS

        mtc0    zero, COP_0_CAUSE_REG

设置状态寄存器的BEV位,清零原因寄存器。

cp0_main:

        .set    mips32

        mfc0    t0, $15, 1      #EBASE REG

        .set    mips3

        andi    t0, t0, 0x3ff

        bnez    t0, wait_for_smp

nop

wait_for_smp:

        mfc0    t1, CP0_CONFIG

        ori     t1, t1, 0x3

        mtc0    t1, CP0_CONFIG

        la      t1, 1f

        addu    t1, s0

        li      v0, 0x9fffffff

        and     t1, v0

        jr      t1

        nop

1:

        li      t0, 0xbfe11120

        sd      zero, 0(t0)

        sd      t1, 8(t0)

使能Kseg0 段Cache,设置1 号处理器核的 IPI_MailBox0 寄存器

    bal     beep_on

    nop

    li      a0, 0x8000

1:

    addiu   a0, -1

    nop

    bnez    a0, 1b

    nop

    bal     beep_off//mtf

        nop

获取cpu num,将除启动核外其他核睡眠

2、pcie配置

    li      t0, 0xbfe10000 //+0x580 配置 PCIE0 PHY 的控制信号。

    li      t1, 0xc2492331

    sw      t1, 0x580(t0) //PCIE0 配置寄存器 0低32

    sw      t1, 0x5a0(t0) //PCIE1 配置寄存器 0低32位

 

    li      t1, 0xff3ff0a8

        sw      t1, 0x584(t0) //PCIE0 配置寄存器 0高32位

        sw      t1, 0x5a4(t0) //PCIE1 配置寄存器 0高32位

 

        li      t1, 0x27fff

        sw      t1, 0x588(t0) //PCIE0 配置寄存器 1

        sw      t1, 0x5a8(t0) //PCIE1 配置寄存器 1

配置pcie0/1配置寄存器。设置硬件参数,包括阻抗参数,PCIE PHY 发送低摆幅幅值,PCIE PHY PLL 的倍频数。

li      t0, 0xbfe10590 //PCIE0 PHY 配置控制寄存器

        dli     t1, 0x14fff1002

        sd      t1, 0x0(t0)

        sd      t1, 0x20(t0)

 

        dli     t1, 0x14fff1102

        sd      t1, 0x0(t0)

        sd      t1, 0x20(t0)

 

        dli     t1, 0x14fff1202

        sd      t1, 0x0(t0)

        sd      t1, 0x20(t0)

 

        dli     t1, 0x14fff1302

        sd      t1, 0x0(t0)

        sd      t1, 0x20(t0)

 

        li      t0, 0xbfe10430

        lw      t1, 0x0(t0)

        or      t1, t1, 0x30000 //pcie enable

        sw      t1, 0x0(t0)

设置PCIE0/1 PHY 配置控制寄存器,使能PCIE1/0 控制器。

dli     t0, 0x900000fe0800680c //DEV D / Gen2 Control Register 寄存器

        li      t1, 0xfff9ffff

        lw      t2, 0x0(t0)

        and     t1, t1, t2

        or      t1, 0x20000

        sw      t1, 0x0(t0)

        dli     t0, 0x900000fe0700681c

        lw  t2, 0x0(t0)

li  t1, (0x1 << 26)

      or  t2, t1

      sw  t2, 0x0(t0)

 

        dli     t0, 0x900000fe00006800 //PCIE1 Port0 的配置头基址

        li      t1, 0x10000000

        sw      t1, 0x10(t0)

        dli     t0, 0x9000000000000000

        li      t1, 0x10000000

        or      t0, t0, t1

         li  t1, (0x7<<18)|(0x7<<2)

        not t1, t1 

        lw  t2, 0x54(t0)

        and t2, t2, t1 

        sw  t2, 0x54(t0)

        lw  t2, 0x58(t0)

        and t2, t2, t1

        sw  t2, 0x58(t0)

        dli     t1, 0xff204f

        sw      t1, 0x0(t0)

龙芯 2K1000 有两个 PCIE 控制器,其中一个 PCIE 控制器既可以作为一个 X4 的 PCIE端口也可以作为 4 个独立的 X1 PCIE 端口;另一个 PCIE 控制器既可以作为一个 X4 的 PCIE端口也可以作为 2 个独立的 X1 PCIE 端口,作为 X1 端口时,仅 LANE0 和 LANE1 可用,LANE2 和 LANE3 不可用。配置pcie0的port0-3及pcie1的port0-1控制器,并且初始化串口。

3、gmac配置

  li t1,0xbfe10500 //GPIO 方向控制

     li t2,(1 << 2) //34 - 2

     not t2,t2

     lw t3,0x4(t1)

     and t2,t3

     sw t2,0x4(t1)

     li t2,(1 << 2)//34 -2

     lw t3,0x14(t1)

     not t2,t2

     and t2,t3

     sw t2,0x14(t1)

配置gpio的43位输出模式,并且拉低第43位来复位gmac1。

 

#include "loongson3_clksetting.S"

li t1,0xbfe10500

          li t2,(1 << 2) //34 - 2

          lw t3,0x14(t1)

          or t2,t3

          sw t2,0x14(t1)

拉高GPIO,完成gmac1的复位。

4、sata配置

li          t0, 0xbfe10000

    li      t1, 0x30c31cf9

    sw      t1, 0x454(t0) //sata配置寄存器

    li      t1, 0xf300040f

    sw      t1, 0x450(t0)

PRINTSTR("\r\nUSE internel SATA ref clock\r\n")

        li      t1, 0xbfe10450

        ld      a0, 0x0(t1)

        li      a1, 0x2

        not     a1, a1

        and     a0, a0, a1

        sd      a0, 0x0(t1)

        sync

 

        ld      a0, 0x0(t1)

        li      a1, 0x4

        or  a0, a1

        sd      a0, 0x0(t1)

        sync

        ld      a0, 0x0(t1)

        li      a1, 0x8

        or  a0, a1

        sd      a0, 0x0(t1)

        sync

 

        ld      a0, 0x0(t1)

        bal     hexserial64

        nop

 

li      t0, 0xbfe10000

 

    //assert p0 reset

    lw      t1, 0x450(t0)

    li      t2, (1 << 3)

    not     t2, t2

    and     t1, t1, t2

    sw      t1, 0x450(t0)

 

    //assert phy reset

    lw      t1, 0x450(t0)

    li      t2, (1 << 2)

    not     t2, t2

    and     t1, t1, t2

    sw      t1, 0x450(t0)

 

    //power down phy

    lw      t1, 0x454(t0)

    li      t2, (1 << 31)

    or      t1, t1, t2

    sw      t1, 0x454(t0)

 

    //switch refclk

    lw      t1, 0x450(t0)

    li      t2, (1 << 1)

    not     t2, t2

    and     t1, t1, t2

    sw      t1, 0x450(t0)

 

    //delay a while

    li      t1, 0x1000

1:

    subu    t1, t1, 1

    bnez    t1, 1b

    nop

 

    lw      t1, 0x454(t0)

    li      t2, (1 << 31)

    not     t2, t2

    and     t1, t1, t2

    sw      t1, 0x454(t0)

 

    //deassert phy reset

    lw      t1, 0x450(t0)

    li      t2, (1 << 2)

    or      t1, t1, t2

    sw      t1, 0x450(t0)

 

    //deassert p0 reset

    lw      t1, 0x450(t0)

    li      t2, (1 << 3)

    or      t1, t1, t2

    sw      t1, 0x450(t0)

li      t0, 0xbfe10458

        dli     t1, 0x1403f1002

        sd      t1, 0x0(t0)

设置SATA 配置寄存器。选择内部时钟。配置sata发送信号。

5、初始化pcitlb及cache

li      t0, 0xbfe13800 //PCICFG2_RECFG 寄存器

        dli     a0, 0xffffff0000ffffff

        sd      a0, 0x08(t0)

        li      t0, 0xba001800 //GMAC0配置空间头基地址

        li      a0, 0x0080ff08

        sw      a0, 0x0c(t0)

 

        li      t0, 0xbfe13800 //PCICFG2_RECFG 寄存器

        dli     a0, 0xff00ff0000fffff0

        sd      a0, 0x00(t0)

        sd      a0, 0x08(t0)

        sd      a0, 0x10(t0)

        sd      a0, 0x18(t0)

        sd      a0, 0x20(t0)

        sd      a0, 0x28(t0)

        sd      a0, 0x30(t0)

        sd      a0, 0x38(t0)

        sd      a0, 0x40(t0)

使能 APB 总线控制器的配置头空间的重配置功能,设置对应的字节可写。

PRINTSTR("\r\nPMON2000 MIPS Initializing. Standby...\r\n")

        mfc0    a0, COP_0_CONFIG                /* enable kseg0 cachability */

        ori     a0, a0, 0x3           // ENABLE

        mtc0   a0, COP_0_CONFIG

使能kseg0的cache能力。

#include "pcitlb.S"

 

 

将虚拟地0xc0000000~0xffffffff 映射到物理地址0x40000000~ 0x7fffffff 作为pci mem空间

/* jmp to 0x9fc... */

        lui     t0, 0xdfff ####################### go to 9fc

        ori     t0, t0, 0xffff

        bal     1f

        nop

1:

        and     ra, ra, t0

        addiu   ra, ra, 16

        jr      ra

        nop

验证kseg0的cache是否使能成功

        PRINTSTR("cache enable done\r\n")

 

        li      t0, 0xbfe10430 //通用配置寄存器 2

        lw      a2, 0x0(t0)

        // pcie0 and pcie1

        lui     t1, 0x3

        // enable dvo0 and dvo1 pin output

        ori     t1, t1, 0x12

        or      a2, a2, t1

        sw      a2, 0x0(t0)

使能DVO0和DVO1管脚,使能 CAMERA 的管脚功能

 

        li      t0, 0xbfe10420 //通用配置寄存器 0

        //sdio

        lw      t2, 0x0(t0)

        lui     t1, 0x10

        //enable pwm0, pwm1, i2c0, i2c1, nand, sata, i2s, gmac1

        //no hda, no ac97

        ori     t1, t1, 0x3f48

        or      t2, t2, t1

        sw      t2, 0x0(t0)

设置一些复用管脚功能,包括GMAC1,HDA,pwm,sata,iac,i2s。

6、初始化内存

TTYDBG("\r\nStart Init Memory, wait a while......\r\n")

        move    msize, $0

       move    s3, $0

//!!!!important--s1 must be correctly set

       TTYDBG("NODE 0 MEMORY CONFIG BEGIN\r\n")

       dli     s1, 0xc1a10404

#include "ddr_dir/loongson3_ddr2_config.S"

内存初始化。主要完成的是内存控制器的配置和窗口地址的路由配置。

       /*judge the node0 whether have memory*/

       and     a0, msize, 0xff

 

//close default internal mapping in ddr controller

        li      t0, 0xbfe10424 //通用配置寄存器 0

        lb      a0, 0x1(t0)

        and     a0, a0, 0xfd //mc_default_reg置零

        sb      a0, 0x1(t0)

        sync

        li      t0, 0xbfe10420

        ld      a0, 0x0(t0)

        move    t6, a0

        dsrl    a0, t6, 32

        bal     hexserial

        nop

        move    a0, t6

        bal     hexserial

        nop

        PRINTSTR("\r\n")

关闭窗口不命中处理

/* test memory */

        li      t0, 0xa0000000 //kseg0段

        dli     a0, 0x5555555555555555

        sd      a0, 0x0(t0)

        dli     a0, 0xaaaaaaaaaaaaaaaa

        sd      a0, 0x8(t0)

        dli     a0, 0x3333333333333333

        sd      a0, 0x10(t0)

        dli     a0, 0xcccccccccccccccc

        sd      a0, 0x18(t0)

        dli     a0, 0x7777777777777777

        sd      a0, 0x20(t0)

        dli     a0, 0x8888888888888888

        sd      a0, 0x28(t0)

        dli     a0, 0x1111111111111111

        sd      a0, 0x30(t0)

        dli     a0, 0xeeeeeeeeeeeeeeee

        sd      a0, 0x38(t0)

        PRINTSTR("The uncache data is:\r\n")

        dli     t1, 8

        dli     t5, 0x9000000000000000

1:

        ld      t6, 0x0(t5)

        move    a0, t5

        and     a0, a0, 0xfff

        bal     hexserial

        nop  

        PRINTSTR(":  ")

        dsrl    a0, t6, 32

        bal     hexserial

        nop  

        move    a0, t6

        bal     hexserial

        nop  

        PRINTSTR("\r\n")

 

        daddiu  t1, t1, -1

        daddiu  t5, t5, 8

        bnez    t1, 1b

        nop  

 

        PRINTSTR("The cached  data is:\r\n")

        dli     t1, 8

        dli     t5, 0x9800000000000000

1:

        ld      t6, 0x0(t5)

        move    a0, t5

        and     a0, a0, 0xfff

        bal     hexserial

        nop  

        PRINTSTR(":  ")

        dsrl    a0, t6, 32

        bal     hexserial

        nop  

        move    a0, t6

        bal     hexserial

        nop  

        PRINTSTR("\r\n")

 

        daddiu  t1, t1, -1

        daddiu  t5, t5, 8

        bnez    t1, 1b

        nop

测试内存,写入内存数据,分别从cache和uncache内存中读出。

la      a0, start

        li      a1, 0xbfc00000

        la      a2, _edata

 

        move    t0, a0

        move    t1, a1

        move    t2, a2

        /* copy text section */

1:      and     t3, t0, 0x0000ffff

        bnez    t3, 2f

        nop

        move    a0, t0

        bal     hexserial

        nop

        li      a0, '\r'

        bal     tgt_putchar

        nop

 

2:      lw      t3, 0(t1)

        sw      t3, 0(t0)

 

        addu    t0, 4

        addu    t1, 4

 

        blt         t0, t2, 1b

        nop

        PRINTSTR("\ncopy text section done.\r\n")

 

        .set noreorder

        /* Clear BSS */

        la      a0, _edata

        la      a2, _end

2:      sw      zero, 0(a0)

        bne     a2, a0, 2b

        addu    a0, 4

        TTYDBG("\nClear BSS done.\r\n")

 

        PRINTSTR("Copy PMON to execute location done.\r\n")

为将pmon拷贝到ram做准备,pmon拷贝到内存中并解压。

move    a0, msize

        la      v0, initmips

        jalr    v0

        nop

至此,在ROM阶段的初始化全部结束,后续代码将搬移到ram来进行初始化。


http://chatgpt.dhexx.cn/article/jjKWgt5r.shtml

相关文章

【基础知识】Oracle核心进程(PMON、SMON、DBWn、LGWR、CKPT)

本文主要总结的是五个核心后台进程&#xff08;PMON、SMON、CKPT、DBWn、LGWR&#xff09;&#xff0c;理解这些进程的概念是Oracle学习的内功&#xff0c;是TroubleShooting和优化的基础&#xff0c;以下内容参考了Oracle编程艺术、官方文档Concept、OCP考试指南及行业大牛的总…

pmon下常用命令

pmon下常用命令 在进入系统前按 “c” 进入pmon的命令行。如设置自器动的话&#xff08;pmon自动加载内核、启动文件系统&#xff09;&#xff0c;需要设置环境变量 a l / al/ al/al1、$append。 1、帮助命令 h 有两种使用方式&#xff1a; ① h 查看所有命令 ② h xxx 查…

PMON环境配置(龙芯,亲测成功1)

1.前言 2.运行平台 3.依赖组件 4.安装与配置安装专用GCC编译器 4.1下载GCC编译器 4.2解压GCC编译器 4.3配置系统运行 5.编译龙芯PMON执行文件 5.1下载PMON源码 5.2 编译并配置git tools插件 5.3编译gzrom…

PMON简介

最近在学习Sylix OS&#xff0c;将系统运行至龙芯开发板时候需要用到PMON&#xff0c;记录一下几种下载方式 目录 一.PMON启动过程 二.PMON命令介绍 1.load 命令 tftp 启动 USB 手动启动 硬盘手动启动 硬盘自动启动 2.reboot 命令 3.date 命令 4.ifconfig 命令 5.ping 命令 6.s…

Java多线程游戏仿真实例分享

这是一篇学习分享博客&#xff0c;这篇博客将会介绍以下几项内容&#xff1a; 1、如何让一个程序同时做多件事&#xff1f;&#xff08;多线程的创建、多线程的应用&#xff09; 2、如何让小球在画面中真实地动起来&#xff1f;&#xff08;赋予小球匀速直线、自由落体、上抛等…

算法工程 # 深度学习算法落地最后一公里:工业界中的大规模向量检索

前言&#xff1a;现代深度学习实践中很多场景其实都是对输入数据进行处理、嵌入&#xff0c;最终获得一个 embedding&#xff0c;然后对 embedding 进行相似度检索&#xff0c;而工业界中的被检索数据往往是海量的&#xff0c;因此深度学习模型落地的最后一步也就是大规模向量检…

向量检索-faiss检索

一、语义相似检索背景 1、为什么引入语义相似检索(向量检索) 问题引出&#xff1a; 搜索引擎和搜索广告最难解决的问题是语义相似度 具体体现&#xff1a;召回和排序。 Case1: 如"从北京到上海的机票"与"携程网"的相似性 Case2"快递软件"与&q…

ModaHub魔搭社区:向量数据库Milvus性能优化问题(三)

目录 Milvus 的导入性能如何? 边插入边搜索会影响搜索速度吗? 批量搜索时,用多线程的收益大吗? 为什么同样的数据量,用 GPU 查询比 CPU 查询慢? Milvus 的导入性能如何? 客户端和服务端在同一台物理机上时,10 万条 128 维的向量导入需要约 0.8 秒(基于 SSD 磁盘)…

Shader 优化相关资料整理

什么是渲染管线 注&#xff1a; 应用程序阶段&#xff1a;主要是CPU与内存打交道&#xff0c;例如碰撞检测&#xff0c;计算好的数据&#xff08;顶点坐标、法向量、纹理坐标、纹理&#xff09;就会通过数据总线传给图形硬件 。 几何阶段&#xff1a;其实上图有个问题&#xff…

pthread多线程入门-并行计算高维向量

介绍pthread ​ pthread其实也可以当作C/C的一个库&#xff0c;所有的函数和数据类型都在<pthread.h>中&#xff0e;跟AVX一样&#xff0c;如果使用了pthread&#xff0c;在编译的时候必须加上编译参数-lpthread&#xff0e;使用gcc编译指令如下&#xff1a; gcc filen…

Unity项目优化详解(持续补充ing)

Unity开发项目总结的几项优化点&#xff0c;比较适合中小项目优化&#xff0c;拿来即用&#xff0c;大型项目需要考虑定制化渲染管线、剔除、光照等。针对优化更多的还是需要结合项目去考虑。 一、模型 Read/Write&#xff1a;同Texture&#xff0c;若开启&#xff0c;Unity会…

SQL查询优化原理与向量化执行引擎

文章目录 1.SQL查询优化的目的2.SQL 查询优化的基本原理之研究如何通过关系代数优化执行方案3.总结使用关系代数进行查询优化的要点4.SQL 查询优化的基础算法5.Volcano Optimizer6.自底向上 vs. 自顶向下7.广度优先搜索与启发式算法8. 向量化执行引擎 1.SQL查询优化的目的 本文…

SQL优化之火山模型、向量化、编译执行

文章目录 1.当代CPU特性2.查询执行模型3.向量化VS编译执行4.编译执行融合向量化5.优化方向 1.当代CPU特性 向量化执行和编译执行是目前主流的两种数据库执行引擎优化手段。 了解CPU特性可以让我们真正理解各种数据库执行引擎优化技术的动机。 影响数据库执行引擎执行效率的C…

UE4性能优化

UE4性能优化 参考文档&#xff1a;UE4性能优化GPU分析**CPU分析**一些相关工具 Time: 2021年10月19日16:46:22 Desc: UE4性能优化 参考文档&#xff1a; https://docs.unrealengine.com/4.27/zh-CN/TestingAndOptimization/PerformanceAndProfiling/https://blog.csdn.net/u01…

一文纵览向量检索

摘要&#xff1a;本文针对向量检索要解决的问题&#xff0c;梳理了主流向量检索相关的技术&#xff0c;分析了向量检索目前的一个趋势。 什么是向量检索 首先我们了解下什么是向量&#xff0c;所谓向量就是由n个数字&#xff08;二值向量由n个比特组成&#xff09;组成的数组&…

C/C++编译器并行优化技术:并行优化针对多核处理器和多线程环境进行优化,以提高程序的并行度

目录标题 引言数据并行&#xff1a;将数据集分割成多个子集&#xff0c;分配给多个线程或处理器并行处理。延迟执行与乱序执行&#xff1a;对指令的执行顺序进行调整&#xff0c;提高指令流水线的利用率和性能。延迟执行乱序执行 任务并行&#xff1a;将程序分解为多个独立的任…

离散与提炼——一些关于向量召回算法优化方法的思考

✏️ 作者介绍&#xff1a; 周语馨&#xff0c;高级云智能工程师 最近做的很多向量召回的相关工作&#xff0c;主要集中在优化 Faiss 里面常用的几个算法&#xff0c;包括 IVFFlat 和 IVFPQ&#xff0c;并且针对这两个算法都做出了专门的优化。 前一阵子灵光乍现&#xff0c;想…

java手动回收线程_性能优化:线程资源回收

本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 一、问题 模型服务平台的排序请求出现较多超时情况&#xff0c;且不定时伴随空指针异常。 二、问题发生前后的改动 召回引擎扩大了召回量&#xff0c;导致排序请求的item数量增加了。 三、出问题的模型 基于XGBoost预测的全排序…

编译优化之 - 向量化优化入门

1. 介绍 2. Intel高级向量扩展 3. GCC中向量化 4. ICC中向量化 5. AOCC/LLVM中向量化 1. 介绍 什么是自动向量化&#xff1f; 自动向量化&#xff08;automatic vectorization&#xff09;是自动并行化&#xff08;automatic parallelization&#xff09;的一种特殊情况&#…

数据库向量化如何进行性能优化

数据库向量化如何进行性能优化 前面提到&#xff0c;数据库向量化是一个巨大的、系统的性能优化工程&#xff0c;两年来&#xff0c;我们实现了数百个大大小小的优化点。我将 StarRocks 向量化两年多的性能优化经验总结为 7 个方面 &#xff08;注意&#xff0c;由于向量化执行…