「嵌入式」Hawk-Rust系列:树莓派相机的驱动
#RaspberryPi
Raspberry Pi提供了一组GPIO(通用输入/输出)引脚,允许您控制用于物理计算的电子组件并探索物联网(IoT)。 相机模块是Raspberry Pi的绝佳配件,它允许用户拍摄静态照片并以全高清录制视频。
HAWK是一个基于Rust的图像识别项目,它通过使用RFID卡进行用户识别和Image进行用户验证来实现双因素身份验证。本文展示了如何使用Rust程序触发树莓派的摄像头。
- Read More
- hawk
使用WASI对区块链进行通用计算
#wasi
本文来自于OasisLabs,介绍了WASI(Web Assembly System Interface )在区块链上的应用。目前Oasis平台的技术架构目前正在围绕WASM、WASI和区块链来实施。
(OasisLabs是来自加州大学伯克利分校的Dawn Song教授和同事们创立的区块链项目,基于区块链和可信硬件想构建高性能的可信云平台。)
为什么他们想把WASI用于区块链?
WASI用于区块链的目标是利用围绕WASI快速发展的社区和基础设施。 与创建另一个Wasm接口的替代方法相比,WASI允许区块链开发人员利用更广泛的开发人员社区的资源。 通过这种方式,可以想象未来区块链将成为云开发人员工具箱中的另一个工具。
OasisLabs团队还专门提交了一个区块链WASI的RFC,想做成适合区块链上下文的WASI标注扩展。
- Read More
- Blockchain WASI RFC
Rust vs C++ : 基于36核CPU的并行性能测试
#cpp #rayon
有人针对Rust/Rayon(Rust实现的多线程并发库)和C++/OpenMP(c++的类似于rayon的库)在36核的机器上进行了性能测试。
Rust 36个线程:
Running on 36 Threads
BabelStream
Version: 0.5
Implmentation: Rust
Running kernels 100 times
Precision: double
Array size: 268.4 MB (=0.3 GB)
Total size: 805.3 MB (=0.8 GB)
Function Mbytes/sec Min (sec) Max Average
Copy 50552.817 0.01062 0.02924 0.01143
Mul 39680.038 0.01353 0.01510 0.01443
Add 45828.953 0.01757 0.01874 0.01820
Triad 41769.002 0.01928 0.02206 0.02029
Dot 43584.260 0.01232 0.01327 0.01273CPP/OMP 36个线程:
Running on 36 Threads
BabelStream
Version: 3.4
Implementation: OpenMP
Running kernels 100 times
Precision: double
Array size: 268.4 MB (=0.3 GB)
Total size: 805.3 MB (=0.8 GB)
Function MBytes/sec Min (sec) Max Average
Copy 87745.870 0.00612 0.00710 0.00684
Mul 79315.382 0.00677 0.00762 0.00736
Add 89995.047 0.00895 0.01029 0.00992
Triad 91574.889 0.00879 0.01012 0.00975
Dot 118144.442 0.00454 0.00504 0.00490对于这个结果,可以看看Reddit讨论贴里的一些反馈。评论区有一半的人都认为Rust之所以慢,是因为rayon目前不支持NUMA感知(Numa aware)的原因。无论是Rust语言,还是Rayon目前都不支持该功能,除非等内存分配器稳定下来再做打算。
(NUMA 用于 x86 和 IBM® POWER® 体系结构平台上的多处理器系统。在具有 NUMA 特性的系统中,每个处理器都具有可用的本地内存,也可以访问分配给其他处理器的内存。对本地内存的内存访问速度更快。NUMA 节点是相互紧密联系的处理器和内存的集合。 在节点内的内存访问速度比在节点外更快。如果程序能够感知NUMA,那就相关计算资源,将会被放置到一个不同的物理NUMA节点。尽管仍旧在两个NUMA节点之间扩展,但资源使用将会得到优化。)
但未可知OpenMP的测试代码是否利用了NUMA感知来提升性能,但OpenMP好像是支持NUMA(不确定)。
- Reddit 讨论
- 相关代码
- rayon issues: Schedulling should be NUMA aware
- 介绍NUMA的一篇文章
「讨论」ndarray vs nalgebra
#ml #statistical_computing
该贴针对此问题展开讨论:ndarray和nalgebra这两个库有什么区别?优缺点?哪个库更有机会被机器学习和科学计算领域应用?
评论摘要:
- Ndarray和nalgebra针对两个不同的问题域。
- Ndarray和nalgebra重复的部分只是线性代数系统,而nalgebra更侧重于线性代数系统,但仅限于1D向量和2D矩阵。
- Ndarray类似于numpy,适用于n维数据处理。
- 一旦Rust的const generics功能稳定以后,这两个库将深受影响,也许将来会有更多的功能重叠。
- nalgebra是纯Rust的,ndarray有一个OpenBLAS后端。所以在性能上,一些程序可能ndarray执行的更好(纯Rust实现的有待优化)。
- 如果是用于工程和数学目的,nalgebra是迄今为止最好的选择。nalgebra的最佳功能是在编译时进行维度检查,这意味着错误数学运算的代码将无法通过编译。
Reddit讨论
vecmerge:提供了方便合并Vec的宏
#vec
fn concat(a: i32, b: i32, c: Vec<i32>, d: i32, e: i32, f: i32) -> Vec<i32> {
vecmerge!([a,b] + c + [d,e,f])
}vecmerge
支持Rust的多种方式
#Rust
如果你想支持Rust的发展,有很多方法可以支持Rust:
- 贡献代码。
- 写文档、书、博客、视频等。
- 在论坛,Stack Overflow,Reddit,Matrix或Discord上回答问题。
- 财务支持。
尤其是财务支持,可以帮助补偿这些重点贡献人员的时间,使得开源更具可持续性。如果你愿意,可以查看Aaron发起的捐助人员列表。
- Read More
- Aaron发起的捐助人员列表
「系列」 使用Rust创建静态文件服务器 Part 2
#Http
Read More
日报订阅地址:
独立日报订阅地址:
- Telgram Channel
- 阿里云语雀订阅
- Steemit
- GitHub
社区学习交流平台订阅:
- Rust.cc论坛: 支持rss
- Rust Force: 支持rss
- 微信公众号:Rust语言学习交流










