-
freebsder 发表于 2024-7-17 11:43
这么小个屏,真是难为了这么强大的处理器
确实屏幕再大点会更好
-
hellokitty_bean 发表于 2024-7-12 15:41
因为桌面的窗口管理系统使用了轻量级xfce,调皮小老鼠出现了
原来登录用户不一样,桌面背景也不一样
-
个人信息确认无误,确认可以完成测评分享计划
-
完成打卡
#AI挑战营终点站#基于RV1106通过摄像头采集实现手写数字识别部署 https://bbs.eeworld.com.cn/thread-1283321-1-1.html
-
真别说,我还想做这种产品,智能拐杖。
多个摄像头识别物体+激光雷达测量直径1m外物体的距离啥的,技术上能简单实现,感觉最主要的是不挣钱,没人愿意做
-
1、跟帖回复:什么是ONNX模型、RKNN模型
ONNX模型和RKNN模型都是用于深度学习模型部署和推理的格式或框架。
ONNX(Open Neural Network Exchange)是一个开放的模型表示格式,旨在使不同深度学习框架之间的模型转换和部署更加容易。通过使用ONNX,您可以在不同的深度学习框架之间轻松地转换和共享模型,从而提高模型的可移植性和复用性。
RKNN(Rockchip Neural Network)则是Rockchip推出的用于在其自家芯片上进行模型部署和推理的框架。RKNN框架为Rockchip的芯片定制了针对深度学习模型的优化加速器,可以实现在RK芯片上高效地运行深度学习模型。
因此,当需要在Rockchip的芯片上部署和运行深度学习模型时,可以将模型转换为RKNN格式,以利用Rockchip提供的优化硬件加速器来提高模型的性能和效率。而ONNX则可以作为一个通用的模型表示格式,方便在不同框架之间进行模型转换和共享。
2.发帖链接:#AI挑战营第二站# 基于RKNN toolkit的模型转换与部署 - 嵌入式系统 - 电子工程世界-论坛 (eeworld.com.cn)
-
本帖最后由 硬核王同学 于 2024-5-9 15:13 编辑
个人信息已确认,领取板卡,可继续完成&分享挑战营第二站和第三站任务。
-
安装的toolkit2版本很高,必须要求转出的onnx版本为19 如何解决的呢
-
wangerxian 发表于 2024-4-24 09:15
用cuda训练,速度应该很快,一套下来用了多久时间?
3轮训练不到一分钟
-
#AI挑战营第一站#基于PyTorch,在PC上完成MNIST手写数字识别模型训练 - 嵌入式系统 - 电子工程世界-论坛 (eeworld.com.cn)
预期应用:实现数字识别车牌识别
-
1.请简述高速侧信道攻击的原理。
答:测信道攻击是密码学中常见的暴力攻击技术。它是针对加密电子设备在运行过程中的消耗、功率消耗或电磁辐射之类的测信道信息泄露而对加密设备进行攻击的方法。
2.在CPU熔断漏洞攻击中,攻击者在用户态访问内核空间时会发生异常,攻击者进程会被终止,这样导致后续无法进行侧信道攻击,那么如何解决这个问题?
答:我们可以在攻击者进程中设置异常处理信号。当发生异常时调用该信号的回调函数,从而抑制异常导致的攻击过程失败。
3.请简述熔断漏洞攻击的原理和过程。
答:CPU熔断漏洞巧妙地利用了现代处理器中乱序执行的副作用进行侧信道攻击,破坏了基于地址空间隔离的安全机制,使得用户态程序可以读出内核空间的数据,包括个人私有数据和密码等。熔断漏洞和计算机架构知识紧密相关,特别是乱序执行、异常处理以及地址空间。
-
厉害
-
牛
-
1.假设函数调用关系为main()->func1()->func2(),请画出ARM64架构的函数栈的布局。
答:
+-----------------------+ Func2
| Return address | <---- SP
+-----------------------+
| Local variables 2 |
+-----------------------+
| |
| |
| Saved FP |
+-----------------------+ Func1
| Return address |
+-----------------------+
| Local variables 1 |
+-----------------------+
| |
| Func1's Saved FP |
+-----------------------+ Main
| |
| Main's Local vars |
+-----------------------+
2.在ARM64架构中,子函数的栈空间的FP指向哪里?
答:函数的栈空间的FP指向存储其父函数的FP值的位置。
3.在ARM64架构的calltrace日志里,如何推导出函数的名称?
答:
第一步,求解函数栈空间的FP。
第二步,找出每个函数的名称。
通过寄存器现场,来反推出它的父函数名称。
-
1、跟帖回复:用自己的语言描述,模型训练的本质是什么,训练最终结果是什么
答:模型训练的本质,就是让计算机学会如何根据输入的数据做出正确的预测。
就像是教一个孩子怎么做数学题一样,我们会给计算机通过不断地给它输入数据和正确答案,让它自己去找规律和模式,最终学会如何预测正确的结果。
训练的最终结果就是一个可以准确预测的模型,就好像培养了一个聪明的学生一样,它可以根据新的数据做出准确的判断。这个训练出来的模型可以应用在很多地方,比如预测天气、识别图像、翻译语言等等。
2、跟帖回复:PyTorch是什么?目前都支持哪些系统和计算平台?
答:PyTorch 是一个开源的机器学习框架,它主要用于深度学习任务,比如神经网络的构建、训练和优化。PyTorch提供了丰富的工具和接口,可以帮助开发者快速搭建和训练深度学习模型。
目前,PyTorch 支持的系统包括 Windows、macOS 和 Linux,同时也支持各种计算平台,比如 CPU、GPU 和其他加速器(比如TPU)。PyTorch还有一个高性能的分布式训练特性,适用于大规模深度学习训练任务。
3. 动手实践链接:
补充内容 (2024-4-24 08:28):
动手实践链接:https://bbs.eeworld.com.cn/thread-1279149-1-1.html
-
1.请简述Kdump的工作原理。
答:Kdump即内核转储工具。Kdump的核心实现基于Kexec,Kexec的全程是Kernel execution,即内核执行,它非常类似于Linux内核中的exec系统调用。Kexec可以快速启动一个新的内核,他会跳过BIOS或者bootloader等引导程序的初始化阶段。这个特性可以让系统崩溃时快速切换到一个备份的内核,这样第一个内核的内存就得到保留。在第二个内核中可以对第一个内核产生的崩溃数据继续分析。
2.在x84_64架构里函数参数是如何传递的?
答:当函数中数的数量小于或等于6的时候,使用通用寄存器来传递函数的参数。当函数中参数的数量大于6的时候,采用栈空间来传递函数的参数。
3.假设函数调用关系为main()→func1()→func2(),请画出x84_64架构的函数栈的布局图。
答:
-
1.使用GCC的O0优化选项来编译内核有什么优势?
答:方便单步调试内核而使用“O0”优化等级
2.什么是加载地址、运行地址和链接地址?
答:
加载地址:存储代码的物理地址。如ARM64处理器上电复位后是从0x0地址开始取第一条指令的,所以通常这个地方存放代码最开始的部分,如异常向量表的处理。
运行地址:指程序运行时的地址。
链接地址:在编译链接时指定的地址,编程人员设想将来程序要运行的地址。程序中所有标号的地址在链接后便确定了,不管程序在哪里运行都不会改变。使用aarch64-linux-gnu-objdump(objdump)工具进行反汇编查看的就是链接地址。
3.什么是位置无关的汇编指令?什么是位置有关的汇编指令?
答:
位置无关的汇编指令:从字面意思看,该指令的执行是与内存地址无关的;无论运行地址和链接地址相等或者不相等,该指令都能征程运行。在汇编语言中,像BL、B、MOV、指令都属于位置无关指令,不管程序装载在哪个位置,他们都能正确的运行,他们的地址域是基于PC值的相对偏移寻址,相当于[pc+offset]
位置有关的汇编指令:从字面意思看,该指令的执行是与内存地址有关的,和当前PC值无关。ARM汇编里面通过绝对跳转修改PC值为当前链接地址的值。
-
hellokitty_bean 发表于 2024-3-24 20:08
是格式有问题吗?怎么没有自动换行适配呀,有些行过长,看不到后面的内容,希望作者修正,谢谢!
已修改
-
1.发生硬件中断后,ARM64处理器做了哪些事情?
答:GIC检测中断的流程如下。
(1)当GIC检测到一个中断发生时,会将该中断标记为pending状态。
(2)对于处于pending状态的中断,仲裁单元会确定目标CPU,将中断请求发送到这个CPU。
(3)对于每个CPU,仲裁单元会从众多处于pending状态的中断中选择一个优先级最高的中断,发送到目标CPU的CPU 接口模块上。
(4)CPU接口模块会决定这个中断是否可以发送给CPU。如果该中断的优先级满足要求,
GIC会发送一个中断请求信号给该CPU。
(5)当一个CPU进入中断异常后,会读取GICC_IAR来响应该中断(一般由Linux内核的中断处理程序来读寄存器)。寄存器会返回硬件中断号(hardware interrupt ID),对于SGI来说,返回源CPU的ID(source processor ID)。当GIC感知到软件读取了该寄存器后,又分为如下情况。
1. 如果该中断处于pending状态,那么状态将变成active。
2. 如果该中断又重新产生,那么pending 将状态变成active and pending状态。
3. 如果该中断处于active状态,将变成active and pending状态。
(6)当处理器完成中断服务,必须发送一个完成信号结束中断(End Of Interrupt,EOI)给
GIC。
2.硬件中断号和Linux内核的IRQ号是如何映射的?
答:在Linux内核中,硬件中断号和IRQ号之间的映射是通过irq_of_parse_and_map()函数解析DTS,查找串口0的硬件中断号,返回内核的IRQ号,并保存到amba_device数据结构的irq[]数组中。
3.一个硬件中断发生后,Linux内核如何响应并处理该中断?
答:当一个外设中断发生后,内核会执行一个函数来响应该中断,这个函数通常称为中断处理程序。
中断处理程序(interrupt handler)是一个特定的函数,负责在硬件中断发生时,处理中断事件并采取适当的措施。在Linux内核中,中断处理程序会根据中断源的IRQ号来调用相应的处理函数。
当一个硬件中断发生后,中断控制器会将该中断对应的IRQ号传递给CPU,CPU会在中断服务例程(Interrupt Service Routine,ISR)中根据IRQ号找到相应的中断处理程序。内核将中断信息保存到特定的数据结构中,并调用与IRQ号对应的中断处理程序来处理这个中断事件。
中断处理程序会执行特定的处理逻辑,比如读取数据、更新状态、发送信号等。处理完成后,中断处理程序会将中断事件传递给相应的设备驱动程序或者其他相关模块进行处理。处理完中断后,CPU会从中断服务例程中返回,并从中断状态中恢复执行原先被打断的指令。
-
1.在ARM64处理器中,如何实现独占访问内存?
答:在ARM64处理器中,可以通过使用如原子操作、自旋锁、信号量、互斥锁、读写锁、RCU等访问内存。
2.atomic_cmpxchg()和atomic_xchg()分别表示什么含义?
答:atomic_cmpxchg():原子地比较ptr的值是否与old值相等,若相等,则把new的值设置到ptr地址中,返回old的值。
atomic_xchg():原子地把new的值设置到ptr地址中并返回ptr的原值。
3.在ARM64中,CAS指令包含了加载-获取和存储-释放指令,它们的作用是什么?
答:
加载-获取(LDREX)指令:LDREX指令用于加载内存中的值到寄存器中,并且会对这个内存位置进行加锁。当执行LDREX指令时,该内存位置的数据会被加载到寄存器中,同时会标记该内存位置为被访问状态,其他线程在这个内存位置上的写操作会被阻塞。LDREX指令会返回加载的值,并且标记加载位置为已锁。(Load-Exclusive)
存储-释放(STREX)指令:STREX指令用于将寄存器中的值写回内存,并且会释放之前使用LDREX指令锁定的内存位置。如果存储操作成功(即没有其他线程同时修改了这个内存位置),STREX指令会返回1,表示存储成功;否则返回0,表示存储失败。通过存储-释放指令,可以解锁之前被加载-获取指令锁定的内存位置,允许其他线程访问这个内存位置。
CAS指令通常用于实现原子操作,例如实现线程安全的计数器、锁等。加载-获取和存储-释放的组合保证了对内存的访问是原子性的,避免了竞争条件和数据不一致的问题。在多线程编程中,CAS指令可以有效地保护共享内存的访问,保证数据的一致性和线程安全性。