「嵌入式」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.01273

CPP/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这两个库有什么区别?优缺点?哪个库更有机会被机器学习和科学计算领域应用?

评论摘要:

  1. Ndarray和nalgebra针对两个不同的问题域。

  2. Ndarray和nalgebra重复的部分只是线性代数系统,而nalgebra更侧重于线性代数系统,但仅限于1D向量和2D矩阵。

  3. Ndarray类似于numpy,适用于n维数据处理。

  4. 一旦Rust的const generics功能稳定以后,这两个库将深受影响,也许将来会有更多的功能重叠。

  5. nalgebra是纯Rust的,ndarray有一个OpenBLAS后端。所以在性能上,一些程序可能ndarray执行的更好(纯Rust实现的有待优化)。

  6. 如果是用于工程和数学目的,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