当前位置: 首页 > news >正文

BL808学习日志-0-概念理解

一、主核心的介绍

        1.三个核心在FREERTOS系统中相互独立,各负责各自的外设和程序;其中M0和LP核心在一个总线上,D0单独在一个总线上,两个总线使用AXI4.0(??)通讯?

CPU0(M0)-E907架构,320MHz;

CPU1(LP)-E902架构,160MHz;

CPU2(D0)-C906架构,480MHz;

        2.CPU0(M0)先启动,然后再启动CPU2(C906),CPU1(e902);相关的代码在博流的SDK中位置如下:/../BOUFFALO_SDK/bsp/board/bl808dk/board.c;

#if defined(CPU_M0)
void board_init(void)
{int ret = -1;uintptr_t flag;flag = bflb_irq_save();GLB_Halt_CPU(GLB_CORE_ID_D0);GLB_Halt_CPU(GLB_CORE_ID_LP);ret = bflb_flash_init();system_clock_init();peripheral_clock_init();bflb_irq_initialize();console_init();#ifdef CONFIG_PSRAM
#ifndef CONFIG_PSRAM_COPY_CODEif (uhs_psram_init() < 0) {while (1) {}}
#endif
#endifsize_t heap_len = ((size_t)&__HeapLimit - (size_t)&__HeapBase);kmem_init((void *)&__HeapBase, heap_len);bl_show_log();if (ret != 0) {printf("flash init fail!!!\r\n");}bl_show_flashinfo();printf("dynamic memory init success,heap size = %d Kbyte \r\n", ((size_t)&__HeapLimit - (size_t)&__HeapBase) / 1024);printf("sig1:%08x\r\n", BL_RD_REG(GLB_BASE, GLB_UART_CFG1));printf("sig2:%08x\r\n", BL_RD_REG(GLB_BASE, GLB_UART_CFG2));log_start();#if (defined(CONFIG_LUA) || defined(CONFIG_BFLOG) || defined(CONFIG_FATFS))rtc = bflb_device_get_by_name("rtc");
#endif/* set CPU D0 boot XIP address and flash address */Tzc_Sec_Set_CPU_Group(GLB_CORE_ID_D0, 1);/* D0 boot from 0x58000000 */GLB_Set_CPU_Reset_Address(GLB_CORE_ID_D0, 0x58000000);/* D0 image offset on flash is CONFIG_D0_FLASH_ADDR+0x1000(header) */bflb_sf_ctrl_set_flash_image_offset(CONFIG_D0_FLASH_ADDR + 0x1000, 1, SF_CTRL_FLASH_BANK0);Tzc_Sec_Set_CPU_Group(GLB_CORE_ID_LP, 0);/* LP boot from 0x58020000 */GLB_Set_CPU_Reset_Address(GLB_CORE_ID_LP, 0x58020000);bflb_irq_restore(flag);GLB_Release_CPU(GLB_CORE_ID_D0);GLB_Release_CPU(GLB_CORE_ID_LP);/* release d0 and then do can run */BL_WR_WORD(IPC_SYNC_ADDR1, IPC_SYNC_FLAG);BL_WR_WORD(IPC_SYNC_ADDR2, IPC_SYNC_FLAG);L1C_DCache_Clean_By_Addr(IPC_SYNC_ADDR1, 8);
}

其中按照顺序依次是

bflb_irq_save();                                                    关闭全局中断;

GLB_Halt_CPU(GLB_CORE_ID_D0);                关闭D0核心

GLB_Halt_CPU(GLB_CORE_ID_LP);                关闭LP低功耗核心;

bflb_flash_init();                                                   初始化FLASH;

system_clock_init();                                             初始化时钟;

peripheral_clock_init();                                         初始化外设时钟;

bflb_irq_initialize();                                               初始化中断;

console_init();                                                       初始化串口;

uhs_psram_init();                                                  初始化内置的64M UHS_PSRAM ;

/* set CPU D0 boot XIP address and flash address */

    Tzc_Sec_Set_CPU_Group(GLB_CORE_ID_D0, 1);

    /* D0 boot from 0x58000000 */

    GLB_Set_CPU_Reset_Address(GLB_CORE_ID_D0, 0x58000000);

    /* D0 image offset on flash is CONFIG_D0_FLASH_ADDR+0x1000(header) */

    bflb_sf_ctrl_set_flash_image_offset(CONFIG_D0_FLASH_ADDR + 0x1000, 1, SF_CTRL_FLASH_BANK0);

    Tzc_Sec_Set_CPU_Group(GLB_CORE_ID_LP, 0);

    /* LP boot from 0x58020000 */

    GLB_Set_CPU_Reset_Address(GLB_CORE_ID_LP, 0x58020000);

    bflb_irq_restore(flag);

    GLB_Release_CPU(GLB_CORE_ID_D0);

    GLB_Release_CPU(GLB_CORE_ID_LP);

    /* release d0 and then do can run */

    BL_WR_WORD(IPC_SYNC_ADDR1, IPC_SYNC_FLAG);

    BL_WR_WORD(IPC_SYNC_ADDR2, IPC_SYNC_FLAG);

    L1C_DCache_Clean_By_Addr(IPC_SYNC_ADDR1, 8);

        3.内存划分,这部分比较抽象,MM内核指的是multi-media内核(手册上多次出现MM前缀的外设,也就是指C906独有的部分),也就是C906(d0)内核,MCU指的就是E907和E902共用的部分;均可使用直接地址访问。

        4.C906的外设只能C906使用;E907(M0)的外设,E902(LP)核心也可以使用(因为他们本来就是在一条AHB总线上的)包括串口和IO之类的;默认的MCU部分有3个串口,UART0、UART1、UART2;C906只有一个串口,在系统中默认编号是UART3;   

        5.XRAM的大小是16K,地址为0x40000000,其设定的意义是让三个核心可以通过这个区域进行IPC通讯;

        每个内核都有一组 IPC 的寄存器,包括 IPCx_TRI、IPCx_STS、IPCx_ACK、IPCx_IEN、IPCx_IDIS、IPCx_ISTS 共 6 个寄存器,这些寄存器的长度都是 32bits,每个 bit 都对应 IPC 的一个通道。核 M0、LP、D0 分别对应 IPC0、IPC1、IPC2。当一个核需要向另一个核发通知时,只需要向接收核的 IPCx_TRI 的对应通道写 1 即可,此时接收核的 IPCx_STS 的对应通道即被设置为 1,如果接收核的 IPC 对应通道的中断也被使能,则会收到一个中断,此时即获知了其他核发来的通知。 

        目前此部分还未做实验,看zhihu上有人实验,D0和M0是可以正常通讯的,好像和LP之间有问题,估计是中断没处理好。地址在这   

        6.coremark测试,使用官方自带的测试例程进行测试,M0的程序可以正常运行,D0的无法正常运行,待修复;已修复,M0实验结果如下:显示为1111,-O3优化,数据放在STACK中;

____               __  __      _       _       _     |  _ \             / _|/ _|    | |     | |     | |    | |_) | ___  _   _| |_| |_ __ _| | ___ | | __ _| |__  |  _ < / _ \| | | |  _|  _/ _` | |/ _ \| |/ _` | '_ \ | |_) | (_) | |_| | | | || (_| | | (_) | | (_| | |_) ||____/ \___/ \__,_|_| |_| \__,_|_|\___/|_|\__,_|_.__/ Build:13:43:42,Sep 29 2023
Copyright (c) 2022 Bouffalolab team
======== flash cfg ========
flash size 0x01000000
jedec id     0xEF4018
mid              0xEF
iomode           0x04
clk delay        0x01
clk invert       0x01
read reg cmd0    0x05
read reg cmd1    0x35
write reg cmd0   0x01
write reg cmd1   0x31
qe write len     0x01
cread support    0x00
cread code       0xFF
burst wrap cmd   0x77
===========================
dynamic memory init success,heap size = 21 Kbyte 
sig1:ffff32ff
sig2:0000ffff
Benchmark started, please make sure it runs for at least 10s.
Now PC=58014b88
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 18067
Total time (secs): 18
Iterations/Sec   : 1111
Iterations       : 20000
Compiler version : GCC10.2.0
Compiler flags   : -O3
Memory location  : STACK
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x382f
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 1111 / GCC10.2.0 -O3 / STACK

  D0由于代码有问题,测试结果可能有问题,显示为1666,

____               __  __      _       _       _     |  _ \             / _|/ _|    | |     | |     | |    | |_) | ___  _   _| |_| |_ __ _| | ___ | | __ _| |__  |  _ < / _ \| | | |  _|  _/ _` | |/ _ \| |/ _` | '_ \ | |_) | (_) | |_| | | | || (_| | | (_) | | (_| | |_) ||____/ \___/ \__,_|_| |_| \__,_|_|\___/|_|\__,_|_.__/ Build:20:01:44,Sep 29 2023
Copyright (c) 2022 Bouffalolab team
dynamic memory init success,heap size = 59 Kbyte 
sig1:ffff32ff
sig2:0000ffff
cgen1:9f7ffffd
Benchmark started, please make sure it runs for at least 10s.
Now PC=580104c2
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 12240
Total time (secs): 12
Iterations/Sec   : 1666
Iterations       : 20000
Compiler version : GCC10.2.0
Compiler flags   : -O3
Memory location  : Stack
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x382f
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 1666 / GCC10.2.0 -O3 / Stack

LP的coremark暂时没搞定,跑出来只有2分,不确定是内存不足还是什么情况。

  ____               __  __      _       _       _     |  _ \             / _|/ _|    | |     | |     | |    | |_) | ___  _   _| |_| |_ __ _| | ___ | | __ _| |__  |  _ < / _ \| | | |  _|  _/ _` | |/ _ \| |/ _` | '_ \ | |_) | (_) | |_| | | | || (_| | | (_) | | (_| | |_) ||____/ \___/ \__,_|_| |_| \__,_|_|\___/|_|\__,_|_.__/ Build:15:26:15,Sep 29 2023
Copyright (c) 2022 Bouffalolab team
lp does not use memheap due to little ram 
sig1:32ff76ff
sig2:0000ffff
cgen1:9f7ffffd
Benchmark started, please make sure it runs for at least 10s.
Now PC=580349bc
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 15729
Total time (secs): 15
Iterations/Sec   : 2
Iterations       : 30
Compiler version : GCC10.2.0
Compiler flags   : -O3
Memory location  : STACK
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xf8b3
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 2 / GCC10.2.0 -O3 / STACK

   二、应用例程探究                  

        看到好多网络上的例程和官方例程,这里着重写几个有意思的;

        1、模拟GBA游戏机

        例程来源于这里,在这位的基础上增加了一个简单的查看FPS的小功能,其实官方仓库都有;这里做一个对比:ESP32-S3 在分辨率是256*160跳帧为1的情况下是20帧,我测试的BL808的C906在400Mhz,256*160分辨率下是33-37帧。而且后面的日志显示,此时C906主频为400Mhz;

NameTested hardwarePerformanceNotes
ESP32-S3ESP32-S3-WROOM-1-N8R820 fpsframeskip: 1
SDL2AMD 3800X1800 fps
SDL2Switch314 fps
SDL2Apple M12300 fps
SDL2Vita131 fpsframeskip: 1, overclocked
SDL1New 3DS111 fpsframeskip: 1, overclocked
watchOSApple Watch Series 5451 fpsNot public yet
BL808_D0SIPEED M1S_DOCK33fps

        只需要按照原作者的文件,并进行一点点修改就行,增加两个freertos的头文件,增加一个时间获取的函数,计算一下生成120帧的时间,进行FPS平均值统计,结果是33-35FPS;看来对比ESP32-S3还是有点优势的,coremark从ESP32-S3的单核613,提升到BL808_D0的单核1666。

#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#include "gba.h"
#include "globals.h"
#include "memory.h"
#include "sound.h"/* aos */
#include <aos/kernel.h>
#include <vfs.h>extern "C" {
#include "lcd.h"
#include <FreeRTOS.h>
#include <task.h>
}uint16_t lcd_buff[256 * 160];
uint8_t frameDrawn = 0;
uint32_t frameCount = 0;
void systemDrawScreen(void)
{frameDrawn = 1;uint16_t *src = pix;uint16_t *dst = lcd_buff;for (int y = 0; y < 160; y++) {for (int x = 0; x < 256; x++) {*dst++ = __builtin_bswap16(*src++);}}st7789v_spi_draw_picture_blocking(20, 40, 20+256-1, 40+160-1, lcd_buff);
}void systemOnWriteDataToSoundBuffer(int16_t *finalWave, int length) {}void systemMessage(const char *fmt, ...)
{char buf[256];va_list args;va_start(args, fmt);vsnprintf(buf, sizeof(buf), fmt, args);va_end(args);printf("GBA: %s", buf);
}extern "C" {
extern uint32_t bl808_key_read();
void emuMainLoop()
{int fd = -1;fd = aos_open("/flash/goodBoyAdv.gba", 0);if(fd >= 0){int model_bin_len = 0;model_bin_len = aos_lseek(fd, 0, SEEK_END);aos_lseek(fd, 0, SEEK_SET);aos_read(fd, rom, model_bin_len);aos_close(fd);}CPUSetupBuffers();CPUInit(NULL, false);CPUReset();int prevTimeStamp = 0;TickType_t fpsTick = xTaskGetTickCount();while (1){joy = bl808_key_read();UpdateJoypad();frameDrawn = 0;while (!frameDrawn) {CPULoop();}frameCount++;if (frameCount % 120 == 0) {TickType_t now = xTaskGetTickCount();int msPassed = (now - fpsTick) * portTICK_PERIOD_MS;fpsTick = now;int fps = 120 * 1000 / msPassed;printf("FPS: %d\r\n", fps);}}
}
}
Starting bl808 now....
Heap Info: 29819 KB @ [0x0x00000000522e10f8 ~ 0x0x0000000054000000]
[OS] Starting aos_loop_proc task...
[OS] Start c906 xram handle...
[OS] Starting OS Scheduler...
init ring:0,tx:0x0000000022020140,rx:0x0000000000000000
init ring:2,tx:0x0000000022021340,rx:0x0000000022020340
init ring:3,tx:0x0000000022022540,rx:0x0000000022022340
init ring:4,tx:0x0000000022022840,rx:0x0000000022022740
init ring:5,tx:0x0000000000000000,rx:0x0000000000000000
Init CLI with event Driven
FPS: 36
FPS: 37
FPS: 36
FPS: 37
FPS: 37
FPS: 36
FPS: 37
FPS: 37
FPS: 36
FPS: 37
FPS: 36
FPS: 36
FPS: 36
FPS: 34
FPS: 35
FPS: 34
FPS: 34
FPS: 35
FPS: 35
FPS: 34
FPS: 35
FPS: 34
FPS: 34
FPS: 35

相关文章:

BL808学习日志-0-概念理解

一、主核心的介绍 1.三个核心在FREERTOS系统中相互独立&#xff0c;各负责各自的外设和程序&#xff1b;其中M0和LP核心在一个总线上&#xff0c;D0单独在一个总线上&#xff0c;两个总线使用AXI4.0(??)通讯&#xff1f; CPU0(M0)-E907架构&#xff0c;320MHz; CPU1(LP)-E9…...

CISSP学习笔记:业务连续性计划

第三章 业务连续性计划 3.1 业务连续性计划 业务连续性计划(BCP): 对组织各种过程的风险评估&#xff0c;发生风险的情况下为了使风险对组织的影响降至最小而定制的各种计划BCP和DRP首先考虑的人不受伤害&#xff0c;然后再解决IT恢复和还原问题BCP的主要步骤&#xff1a; 项…...

.NET Nuget包推荐安装

文章目录 前言通用WPFWebApiBlazor 前言 我这里的包主要是.NET Core的&#xff0c;.NET Framework可能不支持。 通用 Newtonsoft.Json&#xff1a;最常用的C#和Json对象互转的包。支持匿名对象&#xff0c;但是不支持Enum枚举类型&#xff0c;显示的是Enum的数值&#xff0c…...

【文献阅读】Pocket2Mol : 基于3D蛋白质口袋的高效分子采样 + CrossDocked数据集说明

Pocket2Mol: Efficient Molecular Sampling Based on 3D Protein Pockets code&#xff1a; GitHub - pengxingang/Pocket2Mol: Pocket2Mol: Efficient Molecular Sampling Based on 3D Protein Pockets 所用数据集 与“A 3D Generative Model for Structure-Based Drug Desi…...

TrustRadius 评论:为什么 Splashtop 优于 LogMeIn

在当今日益数字化的格局中&#xff0c;远程访问和远程支持工具不仅方便而且至关重要。无论对于居家办公人员&#xff0c;还是对于提供远程支持的 IT 专家&#xff0c;能够安全高效地访问远程系统已成为以技术为导向的日常生活的主要内容。 Splashtop 和 LogMeIn 是远程领域的两…...

【动态规划】动态规划经典例题 力扣牛客

文章目录 跳台阶 BM63 简单跳台阶扩展 JZ71 简单打家结舍 LC198 中等打家劫舍2 LC213中等最长连续递增序列 LC674 简单乘积最大子数组LC152 中等最长递增子序列LC300 中等最长重复子数组LC718最长公共子串NC BM66最长公共子序列LC1143 中等完全平方数LC279零钱兑换 LC322 中等单…...

统计模型----决策树

决策树 &#xff08;1&#xff09;决策树是一种基本分类与回归方法。它的关键在于如何构建这样一棵树。决策树的建立过程中&#xff0c;使用基尼系数来评估节点的纯度和划分的效果。基尼系数是用来度量一个数据集的不确定性的指标&#xff0c;其数值越小表示数据集的纯度越高。…...

C# List 复制之深浅拷贝

C# List 复制 之深浅拷贝 声明类 public class TestStu{public int Number{get;set; }public string Name{get;set; }}public static async Task<int> Main(string[] args){var stu1 new TestStu(){Number 1,Name "1"};var stu2 new TestStu(){Numbe…...

论<script> 标签可以直接写在 HTML 文件中的哪些位置?(可以将 <script> 标签直接插入到 HTML 文件的任何位置)

可以将 <script> 标签直接插入到 HTML 文件的任何位置&#xff0c;以在相应位置执行 JavaScript 代码。 以下是几个示例&#xff1a; 1.<head> 元素内部&#xff1a;在 <head> 元素内部放置 <script> 标签时&#xff0c;脚本将在页面加载过程中被下载和…...

【MySQL进阶】--- 存储引擎的介绍

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、什么…...

self-XSS漏洞SRC挖掘

本文由掌控安全学院 - 一朵花花酱 投稿 Markdown是一种轻量级标记语言&#xff0c;创始人为约翰格鲁伯&#xff08;John Gruber&#xff09;。它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的 XHTML&#xff08;或者HTML&#xff09;文档。这种语言吸…...

1859. 将句子排序

目录 一、题目 二、代码 一、题目 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 二、代码 定义了一个vector<vector<string>> v(MAX);采用const string& word : v[k] word 就会依次取得 v[k] 中的每个元素&#xff08;v[k][0],…...

普通学校,普通背景,普通公司,不普通总结。

作者&#xff1a;阿秀 InterviewGuide大厂面试真题网站&#xff1a;https://top.interviewguide.cn 这是阿秀的第「313」篇原创 小伙伴们大家好&#xff0c;我是阿秀。 可能很多人点开牛客、知乎、B站&#xff0c;一看帖子的标题都是"某985xxxx"、"不入流211xxx…...

Flink之Watermark生成策略

在Flink1.12以后,watermark默认是按固定频率周期性的产生. 在Flink1.12版本以前是有两种生成策略的: AssignerWithPeriodicWatermarks周期性生成watermarkAssignerWithPunctuatedWatermarks[已过时] 按照指定标记性事件生成watermark 新版本API内置的watermark策略 单调递增的…...

提升API文档编写效率,Dash for Mac是你的不二之选

在编写和开发API文档的过程中&#xff0c;你是否经常遇到查找困难、管理混乱、效率低下等问题&#xff1f;这些都是让人头疼的问题&#xff0c;但现在有了Dash for Mac&#xff0c;一切都将变得简单而高效。 Dash for Mac是一款专为API文档编写和管理设计的工具&#xff0c;它…...

无人注意,新安装的 Ubuntu 23.04 不支持安装 32 位应用

导读新安装的 Ubuntu 23.04 不支持安装 32 位应用。 无人注意&#xff0c;新安装的 Ubuntu 23.04 不支持安装 32 位应用 有用户报告&#xff0c;在新安装的 Ubuntu 23.04 上从 Ubuntu 仓库安装的 Steam 客户端是不工作的。在 Ubuntu 23.04 中使用了基于 Flutter 的新安装程序…...

全面横扫:dlib Python API在Linux和Windows的配置方案

前言 在计算机视觉和人工智能领域&#xff0c;dlib是一个备受推崇的工具库。它为开发者提供了强大的图像处理、机器学习和深度学习功能。在计算机视觉项目中&#xff0c;配置dlib Python API是一个重要的初始步骤。本文将引导读者详细了解在Linux和Windows系统上安装和配置dli…...

30种编程语言写国庆节快乐,收藏后改改留着拜年用

文章目录 核心代码版多行代码单行代码 核心代码版 Python&#xff1a;print(“国庆节快乐&#xff01;&#xff01;&#xff01;”)C&#xff1a;printf(“国庆节快乐&#xff01;&#xff01;&#xff01;”);C&#xff1a;cout<<“国庆节快乐&#xff01;&#xff01;…...

SpringBoot2.7.9 配置文件加载方式

ConfigDataLocationResolver接口方法说明 isResolvable: 判断是否是需要转换的资源 resolve: 将单个ConfigDataLocation转换为ConfigDataResource集合&#xff0c;在激活环境配置之前加载&#xff0c;也就是profile文件加载之前加载 resolveProfileSpecific: 将单个ConfigDataL…...

详解C语言—文件操作

目录 1. 为什么使用文件 2. 什么是文件 3. 文件的使用 文件指针 文件的打开和关闭 三个标准的输入/输出流&#xff1a; 4. 文件的顺序读写 对字符操作&#xff1a; fputc&#xff1a; fgetc&#xff1a; 练习复制整个文件&#xff1a; 对字符串操作&#xff1a;…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx

“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网&#xff08;IIoT&#xff09;场景中&#xff0c;结合 DDS&#xff08;Data Distribution Service&#xff09; 和 Rx&#xff08;Reactive Extensions&#xff09; 技术&#xff0c;实现 …...

电脑定时关机工具推荐

软件介绍 本文介绍一款轻量级的电脑自动关机工具&#xff0c;无需安装&#xff0c;使用简单&#xff0c;可满足定时关机需求。 工具简介 这款关机助手是一款无需安装的小型软件&#xff0c;文件体积仅60KB&#xff0c;下载后可直接运行&#xff0c;无需复杂配置。 使用…...