【评测体验】OrangePi AIpro 系统构建及性能测试

news2024/11/16 20:55:57

感谢香橙派社区能够邀请我评测这款开发板,祝愿国产开发板发展越来越好!在这里能够尽自己的一份力量是我的荣幸。
这篇文章是 OrangePi AIpro 开发板的评测,内容包括开发板简介、系统构建过程、系统性能测试、压缩算法性能测试、内核编译。

到手开箱

快递中包含一个开发板主体(包含散热风扇和天线)、一个 65W 的快充适配器和一根 C to C 的数据线,除此之外,还有一张 32GB 的 TF 卡,已经烧录完毕 ubuntu 系统。

如下展示了 OrangePi AIpro 开发板和 51 单片机及 3.5英寸硬盘大小的对比。

请添加图片描述

0.OrangePi AIpro 开发板简介

Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板,其搭载了昇腾 AI 处理器,可提供 8TOPS INT8 的计算能力,内存提供了 8GB 和 16GB 两种版本。可以实现图像、视频等多种数据分析与推理计算,可广泛用于教育、机器人、无人机等场景。

硬件规格参数(http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/parameter/Orange-Pi-AIpro.html):

硬件名称参 数
CPU4核64位处理器+ AI处理器
四个 ARM Cortex-A76 处理器内核和一个 Arm Mali-G57 级图形处理器(https://www.audioapp.cn/bbs/archiver/?tid-222582.html)
GPU集成图形处理器
AI 算力半精度(FP16):4 TFLOPS;整数精度(INT8):8 TOPS
内存LPDDR4X:8GB/16GB(可选)
存储板载 32MB 的 SPI Flash
Micor SD 卡插槽
eMMC 插座:可外接 eMMC 模块
M.2 M-Key 接口:可接 2280 规格的 NVMe SSD 或 SATA SSD
WIFI支持双频 2.4G 和 5G WiFi
蓝牙BT4.2,模组:欧智通 6221 BUUC
以太网10/100/1000Mbps以太网;板载 PHY 芯片:RTL8211F
显示• 2xHDMI
• 1x MIPI DSI 2 Lane 接口
摄像头2x2-lane MIPI CSI camera interface,兼容树莓派 IMX210型号摄像头
USB• USB 3.0 HOST x2
• USB Type-C 3.0 HOST x1,只支持 USB3.0,不支持 USB2.0
音频3.5mm耳机孔音频输入/输出,2个HDMI音频输出
按键1x关机键、1xRESET键、1x升级键,2个拨码开关控制启动选项
40PIN40PIN 功能扩展接口,支持以下接口类型:
GPIO、UART、I2C、SPI、 I2S、PWM
风扇4pin,0.8mm间距,用于接12V风扇,支持PWM控制
电池接口2PIN电池接口,2.54mm间距,用于接3串电池,支持快充
电源Type-C PD 20V IN ,标准65W
LED 灯1个电源指示灯和1个软件可控指示灯
支持的操作系统Ubuntu22.04、openEuler22.03
产品尺寸107*68mm
重量82g

正面视图(http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.html):

在这里插入图片描述
背面视图(http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.html):

在这里插入图片描述

OrangePi AIpro 引脚图(http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.html):

在这里插入图片描述

1.OpenEuler 系统构建

基于 ubuntu 主机烧写 OpenEuler 镜像到 TF 卡的方法

  1. 准备一张TF卡(推荐64GB及以上),读卡器。
  2. 下载 balenaEtcher软件,下载地址见文后参考资料小节。

在这里插入图片描述

  1. 双击打开 .AppImage 文件即可。也可以使用 dpkg 命令安装 deb 包。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择要烧录的 Linux 镜像文件的路径、选择TF卡的盘符、点击Flash就会开始烧录。

在这里插入图片描述

控制启动设备的两个拨码开关

Orange Pi AI Pro 支持从 TF 卡、eMMC 和 SSD(支持 NVMe SSD 和 SATA SSD)启动。具体从哪个设备启动是由开发板背面的两个拨码开关决定的(BOOT1 和 BOOT2)。
在这里插入图片描述

不同的设置状态对应的启动设备如下:

BOOT1BOOT2启动设备
LL未使用
RLSSD
LReMMC
RRTF

注意:SATA SSD 和 NVMe SSD 的启动方式对应的拨码开关的设置是一样的,这两种启动方式是通过 M2_TYPE引脚的电平自动区分的。切换拨码开关后必须重新拔插电源上下电才能让新的启动设备选项生效,不可以通过复位按键来复位系统。

启动开发板的步骤

  1. 将烧录好的 TF 卡或者 eMMC 模块 或者 SSD 插入开发板对应的插槽中。
  2. 如果想显示 Linux 系统的桌面,目前仅可以使用 HDMI0 接口连接到 HDMI 显示器。
  3. 连接好外设及 20V PD-65W Type C 电源后系统即可启动。

在这里插入图片描述

调试串口的使用方法

开发板的 uart0 串口的 tx 和 rx 引脚同时接到了两个地方。

方法一:使用 40pin 扩展接口

uart0 的 tx 和 rx 引脚接到了 40 pin 扩展接口中的 8 号和 10 号引脚,此种方式需要准备一个 3.3v 的 USB 转 TTL 模块和相应的杜邦线,然后才能正常使用开发板的调试串口功能。
在这里插入图片描述

  • USB 转 TTL 模块的 GND 接到开发板的 GND 上。
  • USB 转 TTL 模块的 RX 接到开发板的 TX 上。
  • USB 转 TTL 模块的 TX 接到开发板的 RX 上。
    在这里插入图片描述
方法二:使用 Micro-USB 接口

uart0 的 tx 和 rx 引脚也接到了开发板的 CH343P 芯片上,再通过 CH343P 芯片引出到 Micro-USB 接口上。此种方式只需要一根 Micro-USB 接口的数据线将开发板连接到电脑的 USB 接口就可以开始使用开发板的调试串口功能了,无需购买 USB 转 TTL 模块。
在这里插入图片描述

ubuntu 平台调试串口的使用方法

ubuntu 中可以使用的串口调试软件有很多,比如 putty、minicom 等。

  1. 首先使用 40pin 扩展接口及杜邦线连接 TTL 模块及电脑。(如若连接成功,/dev设备目录下一般会显示为 /dev/ttyUSB0,如果使用 Micro-USB 连接,一般为 /dev/ttyACM0
  2. 使用 putty 软件,设置串口波特率为 115200,Flow control 为 None
  3. 启动开发板即可看到串口打印信息。
账 号密 码
rootMind@123
HwHiAiUserMind@123

使用 putty 连接遇到问题:

在这里插入图片描述

解决方法:

sudo chmod 777 /dev/ttyUSB0

系统成功启动:

请添加图片描述

如下使用了 MicroUSB 方式登陆 OpenEuler 系统。
在这里插入图片描述

使用 ssh 亦可连接:
在这里插入图片描述

2.系统整体性能对比测试

使用 sysbench 工具/ LMbench 工具测试 OrangePi AIpro 开发板的性能。

sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。
Lmbench是一套简易,可移植的,符合ANSI/C标准为UNIX/POSIX而制定的微型测评工具。一般来说,它衡量两个关键特征:反应时间和带宽。Lmbench旨在使系统开发者深入了解关键操作的基础成本。

sysbench

查看命令帮助:

[HwHiAiUser@orangepiaipro Desktop]$ sysbench --help
Usage:
  sysbench [options]... [testname] [command]

Commands implemented by most tests: prepare run cleanup help

General options:
  --threads=N                     number of threads to use [1]
  --events=N                      limit for total number of events [0]
  --time=N                        limit for total execution time in seconds [10]
  --forced-shutdown=STRING        number of seconds to wait after the --time limit before forcing shutdown, or 'off' to disable [off]
  --thread-stack-size=SIZE        size of stack per thread [64K]
  --rate=N                        average transactions rate. 0 for unlimited rate [0]
  --report-interval=N             periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0]
  --report-checkpoints=[LIST,...] dump full statistics and reset all counters at specified points in time. The argument is a list of comma-separated values representing the amount of time in seconds elapsed from start of test when report checkpoint(s) must be performed. Report checkpoints are off by default. []
  --debug[=on|off]                print more debugging info [off]
  --validate[=on|off]             perform validation checks where possible [off]
  --help[=on|off]                 print help and exit [off]
  --version[=on|off]              print version and exit [off]
  --config-file=FILENAME          File containing command line options
  --tx-rate=N                     deprecated alias for --rate [0]
  --max-requests=N                deprecated alias for --events [0]
  --max-time=N                    deprecated alias for --time [0]
  --num-threads=N                 deprecated alias for --threads [1]

Pseudo-Random Numbers Generator options:
  --rand-type=STRING random numbers distribution {uniform,gaussian,special,pareto} [special]
  --rand-spec-iter=N number of iterations used for numbers generation [12]
  --rand-spec-pct=N  percentage of values to be treated as 'special' (for special distribution) [1]
  --rand-spec-res=N  percentage of 'special' values to use (for special distribution) [75]
  --rand-seed=N      seed for random number generator. When 0, the current time is used as a RNG seed. [0]
  --rand-pareto-h=N  parameter h for pareto distribution [0.2]

Log options:
  --verbosity=N verbosity level {5 - debug, 0 - only critical messages} [3]

  --percentile=N       percentile to calculate in latency statistics (1-100). Use the special value of 0 to disable percentile calculations [95]
  --histogram[=on|off] print latency histogram in report [off]

...

Compiled-in tests:
  fileio - File I/O test
  cpu - CPU performance test
  memory - Memory functions speed test
  threads - Threads subsystem performance test
  mutex - Mutex performance test

See 'sysbench <testname> help' for a list of options for each test.

OrangePi AI pro 安装 sysbench 工具:

在这里插入图片描述

CPU benchmark
[HwHiAiUser@orangepiaipro Desktop]$ sysbench --test=cpu help
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

cpu options:
  --cpu-max-prime=N upper limit for primes generator [10000]

​sysbench 的 CPU 测试是在指定时间内,进行多轮次的素数计算。–cpu-max-prime 参数表示轮次数目。
测试过程:指定参数 --cpu-max-prime 值为 50000,分别在单线程、8线程、16线程、32线程、64线程和128线程下测试。记录总耗时和最大延迟。

测试命令:

sysbench --threads=XX --test=cpu --cpu-max-prime=50000  run

在这里插入图片描述

总耗时测试结果(s):

设备单线程8线程16线程32线程64线程128线程
OrangePi Ai pro10.003410.006510.015310.023010.047710.0942

最大延迟测试结果:

设备单线程8线程16线程32线程64线程128线程
OrangePi Ai pro5.1838.10108.23193.16300.41704.75
Memory benchmark
[HwHiAiUser@orangepiaipro Desktop]$ sysbench --test=memory help
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

memory options:
  --memory-block-size=SIZE    size of memory block for test [1K]
  --memory-total-size=SIZE    total size of data to transfer [100G]
  --memory-scope=STRING       memory access scope {global,local} [global]
  --memory-hugetlb[=on|off]   allocate memory from HugeTLB pool [off]
  --memory-oper=STRING        type of memory operations {read, write, none} [write]
  --memory-access-mode=STRING memory access mode {seq,rnd} [seq]

sysbench内存性能测试,主要是针对不同大小的块进行连续读写或者随机读写操作。在内存性能测试中,events指的是读/写一个内存块。

测试过程:指定参数 –thread 为 单线程(线程数量), –memory-block-size 为 4K(内存块大小),–memory-total-size 为 10GB、50GB、100GB(传输数据总量),–memory-oper 为 write(写操作),–memory-access-mode 分为顺序方式。

测试命令:

sysbench --threads=1 --test=memory --memory-block-size=4K --memory-total-size=100G --memory-access-mode=seq --memory-oper=write run

在这里插入图片描述

顺序索引方式耗时结果(s):

设备10GB50GB100GB
OrangePi Ai pro1.58627.928310.0001
fileio benchmark
[HwHiAiUser@orangepiaipro ~]$ sysbench --test=fileio help
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

fileio options:
  --file-num=N                  number of files to create [128]
  --file-block-size=N           block size to use in all IO operations [16384]
  --file-total-size=SIZE        total size of files to create [2G]
  --file-test-mode=STRING       test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}
  --file-io-mode=STRING         file operations mode {sync,async,mmap} [sync]
  --file-async-backlog=N        number of asynchronous operatons to queue per thread [128]
  --file-extra-flags=[LIST,...] list of additional flags to use to open files {sync,dsync,direct} []
  --file-fsync-freq=N           do fsync() after this number of requests (0 - don't use fsync()) [100]
  --file-fsync-all[=on|off]     do fsync() after each write operation [off]
  --file-fsync-end[=on|off]     do fsync() at the end of test [on]
  --file-fsync-mode=STRING      which method to use for synchronization {fsync, fdatasync} [fsync]
  --file-merged-requests=N      merge at most this number of IO requests if possible (0 - don't merge) [0]
  --file-rw-ratio=N             reads/writes ratio for combined test [1.5]

文件I/O性能测试主要是用于测试I/O的负载性能,测试过程需要进行三个阶段:准备阶段(prepare)、运行阶段(run)、清理阶段(cleanup)。在准备阶段创建测试所需数据,这些数据将在清理阶段被删除,注意在prepare和cleanup两个命令中的参数需要一致。
测试过程:–file-name=4(建文件数量)、–file-total-size=8G(要创建的文件的总大小)、–file-block-size(IO操作中使用的块大小,256、512、1024、2048),采用随机读写方式。

测试命令:

sysbench --threads=4 --test=fileio --file-num=4 --file-total-size=8G --file-block-size=N --file-test-mode=rndrw prepare
sysbench --threads=4 --test=fileio --file-num=4 --file-total-size=8G --file-block-size=N --file-test-mode=rndrw run
sysbench --threads=4 --test=fileio --file-num=4 --file-total-size=8G --file-block-size=N --file-test-mode=rndrw cleanup

在这里插入图片描述

最大延迟测试结果(s):

型号25651210242048
OrangePi Ai pro99.7598.59238.16107.67

LMBench

将 lmbench-3.0-a9.zip 工具(下载链接见参考资料小节)传入 OrangePi AI pro 开发板:

PS C:\Users\jiami\Downloads> scp .\lmbench-3.0-a9.zip HwHiAiUser@192.168.2.21:~/

增加权限:

sudo chmod -R 777 lmbench-3.0-a9

安装工具:

[HwHiAiUser@orangepiaipro lmbench-3.0-a9]$ yum install libtirpc-devel mailx

修改编译脚本:

[HwHiAiUser@orangepiaipro lmbench-3.0-a9]$ vim scripts/build
 21 LDLIBS=-lm
 22 LDLIBS="${LDLIBS} -ltirpc"
 23 CFLAGS="${CFLAGS} -I/usr/include/tirpc"

解决 ARM 适配问题,具体配置文件见链接(链接:pan.baidu.com/s/1GJ7iOSTY… 提取码:jayn)

cp config.guess lmbench-3.0-a9/scripts/gnu-os # 修正gnu-os参数,解决arm系统适配问题。

执行 make 命令:

make

编译成功:

在这里插入图片描述

在 lmbench-3.0-a9 目录的上一级目录新建 results 文件,并赋予权限。

执行 make results 命令:

make results

Mail 选项选择 no,其他选项默认即可。

执行 make results,执行后将会有以下选项提示需要设置:

  • MULTIPLE COPIES: 同时运行并行测试,对应生成结果中的 scal load 项;
  • Job placement selection: 作业调度控制方法,默认选 1,表示允许作业调度;
  • Options to control job placement: 默认选 1;
  • Memory: 设置为大于 4 倍的 cache size,该值越大结果越精确,同时运行时间越长;
  • SUBSET: 要运行的子集,包含 ALL / HARWARE / OS / DEVELOPMENT,默认选 all;
  • FASTMEM、SLOWFS、DISKS、REMOTE… 等选项,均保持默认即可。
    设置完成后测试程序开始运行,需要注意运行时间较久,需耐心等待,或先做其他事情至少 10 min 后再看。

运行结束:

在这里插入图片描述

执行 make see 命令 查看结果(vim results/summary.out):

在这里插入图片描述

OrangePi AIpro 开发板性能如下:

在这里插入图片描述

3.压缩算法性能对比测试

使用 lzbench工具测试 OrangePi AIpro 开发板的性能。

lzbench 是一个用于测试数据压缩算法性能的工具。它可以测量不同压缩算法在特定条件下的压缩和解压缩速度,以及压缩比率。通过使用 lzbench,用户可以对比不同压缩算法的性能,以便选择最适合自己需求的算法。lzbench 支持多种常见的压缩算法,包括 LZ4、LZO、Snappy、Zstandard 等,并且可以在不同的操作系统平台上进行测试。
lzbench 工具安装过程:

git clone https://github.com/inikep/lzbench && cd lzbench
make

下载数据集:

cd ..
wget https://sun.aei.polsl.pl//~sdeor/corpus/silesia.zip
mkdir silesia && cd silesia
unzip ../silesia.zip
cd ../lzbench

测试使用 zstd 压缩算法结果:

在这里插入图片描述

测试使用 lz4 压缩算法结果:

在这里插入图片描述

列出所有可用的压缩算法:

在这里插入图片描述

4.内核交叉编译及替换

内核镜像及设备树文件替换前记得查看当前内核版本号以及做好备份工作!

主机环境准备

主机系统版本

根据说明文档要求,目前 Linux 内核源码包能够在 Ubuntu 22.04 的 x64 平台上稳定编译运行,首先需要通过如下方式确保自己的主机系统版本合适。
在这里插入图片描述

更换软件源

/etc/apt/sources.list 文件中内容替换为如下文本,建议先将该系统文件备份。

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

文件内容替换完毕后使用命令更新软件包列表。

sudo apt-get update

在这里插入图片描述

安装依赖包和交叉编译工具链
  1. 依赖包安装
sudo apt-get install -y python3 make gcc unzip pigz bison flex libncurses-dev cmake
sudo apt-get install -y squashfs-tools bc device-tree-compiler libssl-dev rpm2cpio g++
  1. 安装交叉编译工具链
    交叉编译工具链下载链接见文末参考资料。

在这里插入图片描述

新建 /opt/compiler 目录,并将 toolchain.tar.gz 文件解压到该目录:

在这里插入图片描述

解压后:
在这里插入图片描述

在配置文件 /etc/profile 中添加交叉编译工具链路径:

在这里插入图片描述

然后执行如下命令,使得环境变量生效:

source /etc/profile

然后查看交叉编译工具链的版本,如果显示有版本信息,则表明安装工具链成功。

在这里插入图片描述

下载解压 Linux 内核源码包

  1. 下载 Linux 源码
    下载链接见参考资料小节。

在这里插入图片描述

  1. 拷贝并解压
    将源码包拷贝到 /opt 目录下,然后使用命令解压。

在这里插入图片描述

编译并替换内核

在解压后的内核源码目录中使用命令,build.sh 中含有打补丁的代码。

bash build.sh kernel

在这里插入图片描述

执行后会弹出如下内核配置选项的图形界面,如果不需要修改,直接选择 Exit 退出即可。
在这里插入图片描述

编译完成后会打印如下信息:
在这里插入图片描述

编译后的 Image 文件存放于源码的 optput 目录下:
在这里插入图片描述

登录开发板 Linux 系统,将 Image 文件拷贝到开发板上,更新 OrangePi AIpro 开发板 Image 文件的命令如下(TF卡方式):

dd if=Image of=/dev/mmcblk1 count=61440 seek=32768 bs=512

编译并替换 DTB 文件

什么是 dts/dtb 文件?
DTS(Device Tree Source)和DTB(Device Tree Blob)是与嵌入式系统硬件描述相关的文件格式。

  • DTS文件是设备树的源代码文件,它以文本形式描述了系统的硬件配置。这些文件通常包含了CPU的数量和类别、内存基地址和大小、总线和桥、外设连接、中断控制器和中断使用情况、GPIO控制器和GPIO使用情况、Clock控制器等信息。
  • DTB文件是DTS文件经过编译后得到的二进制文件。它包含了设备树的完整信息,并且在系统启动时被内核加载和解析。
  • DTC(设备树编译器)用于编译DTS文件的工具,它将DTS文件转换成DTB文件。
    OrangePi AIpro 开发板使用的 DTS 文件如下:
Ascend310B-source-opi/dtb/dts/hi1910b/hi1910BL/hi1910B-default.dts

在源码目录下,使用命令:

bash build.sh dtb

编译成功后的 dtb 文件位于 output 目录下(dt.img)。
在这里插入图片描述

登陆开发板系统,将 dtb 文件拷贝到开发板上,更新 OrangePi AIpro 开发板 dtb 文件的命令如下(TF卡方式):

dd if=dt.img of=/dev/mmcblk1 count=4096 seek=114688 bs=512 # 更新主区的DTB文件
dd if=dt.img of=/dev/mmcblk1 count=4096 seek=376832 bs=512 # 更新备区的DTB文件

更换内核前:

在这里插入图片描述

替换内核后:
在这里插入图片描述


参考资料

  1. OrangePi_AI_Pro_昇腾_用户手册_v0.3.1.pdf
  2. ubuntu 22.04镜像下载链接
  3. 开发工具下载
  4. linux 源码包
  5. balenaEtcher工具
  6. lmbench-3.0-a9.zip
  7. Lmbench 的使用方法以及解析运行结果
  8. lzbench安装与使用

遇到问题

Ubuntu22.04 在 VMware 17 无法实现拖放复制操作解决办法?
Ubuntu22.04 在 VMware 17 无法实现拖放复制操作解决办法_vmware workstation ubuntu 快捷键 失效-CSDN博客

各(老)版本 ubuntu 镜像下载?
https://old-releases.ubuntu.com/releases/

修改虚拟机磁盘空间方法?
建议分配 80GB 虚拟机磁盘空间。
https://www.cnblogs.com/codingdog/p/14879313.html

使用 40pin 接口 TTL 调试时,有输出,但是输入无反应?

OrangePi_AI_Pro_昇腾_用户手册_v0.3.1.pdf 手册问题

  1. P157. 然后在配置文件中增加交叉编译工具链路径。

在这里插入图片描述

实际命令应该为:

export PATH=/opt/compiler/toolchain/bin:$PATH:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1712687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】 将 Unix 时间戳转换为可读日期

基本原理 Unix 时间戳是一个从1970年1月1日&#xff08;UTC时间&#xff09;开始计算的秒数&#xff0c;它是一个长整型数字&#xff0c;表示自那时起经过的秒数。在Python中&#xff0c;我们可以使用datetime模块来将Unix时间戳转换为人类可读的日期和时间格式。 示例代码 …

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第31课-循环动画

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第31课-循环动画 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&am…

简单的 Cython 示例

1&#xff0c; pyx文件 fibonacci.pyx def fibonacci_old(n):if n < 0:return 0elif n 1:return 1else:return fibonacci_old(n-1) fibonacci_old(n-2) 2&#xff0c;setup.py setup.py from setuptools import setup from Cython.Build import cythonizesetup(ext_mod…

TinyChat: Visual Language Models Edge AI 2.0

TinyChat: Visual Language Models & Edge AI 2.0 要点 了解TinyChat和AWQ最新的技术发展。在边缘部署语言理解模型(LSTM)后&#xff0c;借助于视觉语言模型(VLM)&#xff0c;可以为LLM提供更好地处理图像输入的能力&#xff0c;从而极大方便了文字对话问答、图片标题生成…

这么多不同接口的固态硬盘,你选对了嘛!

固态硬盘大家都不陌生,玩游戏、办公存储都会用到。如果自己想要给电脑或笔记本升级下存储,想要存储更多的文件,该怎么选购不同类型的SSD固态盘呐,下面就来认识下日常使用中常见的固态硬盘。 固态硬盘(Solid State Drive, SSD)作为数据存储技术的革新力量,其接口类型的选…

【全开源】防伪溯源一体化管理系统源码(FastAdmin+ThinkPHP和Uniapp)

一款基于FastAdminThinkPHP和Uniapp进行开发的多平台&#xff08;微信小程序、H5网页&#xff09;溯源、防伪、管理一体化独立系统&#xff0c;拥有强大的防伪码和溯源码双码生成功能&#xff08;内置多种生成规则&#xff09;、批量大量导出防伪和溯源码码数据、支持代理商管理…

《山水归一全书》52页(双页版)PDF电子书

《山水归一全书》 全书共52页 时间有限&#xff0c;仅上传部分图片&#xff01;结缘私&#xff01;

【Python】 Python 字典查询:‘has_key()‘ 方法与 ‘in‘ 关键字的比较

基本原理 在 Python 中&#xff0c;字典&#xff08;dict&#xff09;是一种非常常用的数据结构&#xff0c;用于存储键值对。字典的查询操作是编程中常见的任务之一。在 Python 2.x 版本中&#xff0c;has_key() 方法被用来检查字典中是否存在某个键。然而&#xff0c;在 Pyt…

第二十四章多栏布局解决方案(什么是自适应?/)

什么是自适应? 指能使网页自适应显示在不同大小终端设备上新网页设计方式及技术.简单的来说自适应就是让同一个页面自动适应不同大小的设备&#xff0c;从而解决为不同设备提供不同版本的页面问题。 1&#xff0e;两列自适应 两列自适应布局是指左侧固定宽度&#xff0c;右…

catia、solidworks模型的缩放

使用功能 参考选择原点或顶点&#xff1b;如果选择的参考不一样效果不一样 选择面则 solidworks 放大2.5倍

什么是预训练模型

如果你要做一个计算机视觉的应用&#xff0c;相比于从头训练权重&#xff0c;或者说从随机初始化权重开始&#xff0c;如果你下载别人已经训练好网络结构的权重&#xff0c;通常能够进展得相当快&#xff0c;可以用这个作为预训练模型&#xff0c;然后转换到你感兴趣的任务上。…

数据结构复习指导之B树和B+树

目录 B树和B树 考纲内容 1.B树及其基本操作 1.1B树的查找 1.2B树的高度&#xff08;磁盘存取次数&#xff09; 1.3B树的插入 1.4B树的删除 2.B树的基本概念 B树和B树 考纲内容 考研大纲对 B树和 B树的要求各不相同&#xff0c;重点在于考查B树&#xff0c;不仅要求理解…

我觉得 “砍需求” 是程序员最牛逼的本领

在下认为&#xff0c;不会 “砍需求” 的程序员不是好程序员&#xff0c;工作经验越丰富的程序员&#xff0c;砍需求的本领一般就越高。即使现在我多了一个身份 —— 管理团队&#xff0c;我也会帮开发同学去跟产品砍需求。 没错&#xff0c;从管理者的角度&#xff0c;我希望…

7 步解决Android Studio模拟器切换中文输入

详细步骤传送地址&#xff1a;Android Studio 模拟器切换中文输入 目录 01 问题概述 02 模拟器的调试 01 问题概述 大家在使用Android Studio 软件进行项目演示时总会遇到一些输入框需要输入中文汉字的情况&#xff0c;由于AS自带的模拟器基本都是英文&#xff0c;这时就有同…

【网络原理】HTTPS详解

一.HTTPS的相关基本概念 HTTPS:由于HTTP协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况. 可能会出现运营商劫持,黑客入侵等不利影响, 因此就引入了HTTPS,其本质上就是在HTTP协议的基础上,引入了一个加密层SSM.什么是运营商劫持? 例如我们要…

UI线程和工作线程

引用&#xff1a;windows程序员面试指南 工作线程 只处理逻辑的线程&#xff0c;例如&#xff1a;启动一个线程&#xff0c;用来做一个复杂的计算&#xff0c;计算完成之后&#xff0c;此线程就自动退出&#xff0c;这种线程称为工作线程 UI线程 Windows应用程序一般由窗口…

CIM分级

定义 以建筑信息模型&#xff08;BIM&#xff09;、地理信息系统&#xff08;GIS&#xff09;、物联网&#xff08;IoT&#xff09;等技术为基础&#xff0c;整合城市地上地下、室内室外、历史现状未来多维多尺度信息模型数据和城市感知数据&#xff0c;构建起三维数字空间的城…

护网在即,请拿你走你的蓝队神器!~

前言 养兵千日用兵一时&#xff0c;护网已经临近了&#xff0c;你是不是还在考虑现场一系列可能发生的情况&#xff1f;提前找好工具,避免在甲方面前太尴尬? 你需要它&#xff01; 据我了解&#xff0c;去年国护的时候就已经有不少攻城狮在使用我们的蓝队应急响应工具箱&am…

设计模式——工厂三兄弟之工厂方法

1.业务需求 ​ 大家好&#xff0c;我是菠菜啊。在介绍这期工厂方法模式前&#xff0c;我们先来看看这样的需求&#xff1a;升级之前的计算器&#xff0c;增加对数和指数运算。&#xff08;看这篇文章前可以先回顾《设计模式——工厂三兄弟之简单工厂》这篇&#xff09; 2.初…

Comfyui导出图片的命名技巧,日期文件夹

种子序号命名&#xff1a;%KSampler.seed% 图片宽高序号命名&#xff1a;%Empty Latent Image.width%x%Empty Latent Image.height% 年月日&#xff1a;%date:yyyy-MM-dd% 时分秒&#xff1a;%date:hhmmss% 年月日种子序号&#xff1a;%date:yyyy-MM-dd%/%KSampler.seed%