2作者: p_zuckerman2 天前原帖
Gmail的主导地位似乎是由其投递能力、垃圾邮件过滤、可靠性和生态系统整合所驱动的。像ProtonMail这样的加密邮件服务提供商虽然提供了不同的权衡,但尚未实现主流采用。我很好奇Gmail的优势中有多少是技术层面的,多少是由于默认设置和用户锁定,以及加密邮件在不久的将来是否能够在类似规模上实现现实竞争。
1作者: noahkay132 天前原帖
我一直在碰壁:在 NumPy 或 PyTorch 中原型设计一些东西,然后为了边缘部署将其重写为 C++。重写的过程总是比最初的工作耗时更长。Eigen 的固定大小矩阵 API 无法映射到张量工作负载,xtensor 仅支持 CPU,且使用编译时模板类型,导致错误信息难以阅读,并且它们在 Mac 上都不支持 GPU。更糟糕的是,Eigen 的性能通常比 Python 版本还要慢,因为 PyTorch 打包了优化过的 BLAS,而 Eigen 则使用其自身有限的实现。 因此,我构建了 Axiom,使得重写过程变得机械化。该 API 尽可能接近 NumPy/PyTorch——相同的方法名称、广播规则、运算符重载、动态形状、运行时数据类型。在 PyTorch 中看起来是这样的代码: ```python scores = Q.matmul(K.transpose(-2, -1)) / math.sqrt(64) output = scores.softmax(-1).matmul(V) ``` 在 Axiom 中看起来是这样的: ```cpp auto scores = Q.matmul(K.transpose(-2, -1)) / std::sqrt(64.0f); auto output = scores.softmax(-1).matmul(V); ``` 没有心理翻译,也没有调试微妙的 API 差异。 箱子里的内容(28,000 行代码): - 100 多个操作:算术运算、归约、激活函数(relu、gelu、silu、softmax)、池化、FFT、完整的 LAPACK 线性代数(SVD、QR、Cholesky、特征分解、求解器) - 通过 MPSGraph 的 Metal GPU——所有操作都在 GPU 上运行,而不仅仅是矩阵乘法。编译的图形通过(形状,数据类型)进行缓存,以避免重新编译 - 无缝的 CPU ↔ GPU:`auto g = tensor.gpu();`——Apple Silicon 上的统一内存完全避免了复制 - 内置 einops:`tensor.rearrange("b h w c -> b c h w")` - 跨架构的高速 SIMD(NEON、AVX2、AVX-512、SSE、WASM、RISC-V) - 通过变体支持运行时数据类型(可读的错误,而不是模板爆炸) - 默认行优先,支持通过 as_f_contiguous() 进行列优先 - 在 macOS、Linux、Windows 和 WebAssembly 上运行 在 M4 Pro 上的性能(与使用 OpenBLAS 的 Eigen、PyTorch、NumPy 比较): - 矩阵乘法 2048×2048:3,196 GFLOPS(Eigen 2,911 / PyTorch 2,433) - ReLU 4096×4096:123 GB/s(Eigen 117 / PyTorch 70) - FFT2 2048×2048:14.9ms(PyTorch 27.6ms / NumPy 63.5ms) 尝试方法: ```bash git clone https://github.com/frikallo/axiom.git cd axiom && make release ``` 或者通过 FetchContent 将其添加到您的 CMake 项目中。示例文件位于 examples/ 目录中。 欢迎提问有关内部实现的问题或对 API 的反馈。