返回首页
最新
在开始之前,我想先澄清一些问题。
**强制性声明**:为了证明这不是另一个“LLM(大型语言模型)胡乱拼凑”的项目,我曾为SciPy做过类似的工作,并手动翻译了ARPACK、PROPACK、QUADPACK、ODEPACK以及其他一系列库(完整列表请见<a href="https://github.com/scipy/scipy/issues/18566" rel="nofollow">https://github.com/scipy/scipy/issues/18566</a>,约85K源代码行),那时LLM在这类工作上表现并不好。大部分翻译已经在之前的SciPy版本中发布,所以我希望这能为F77到C11的翻译工作提供一些可信度。现在LLM稍微有所改善,在LAPACK翻译中,我使用Claude Code作为某些任务的助手。公告结束。
-------- 现在我们回到正常的编程。
这是一个将著名的Fortran77线性代数库LAPACK翻译成C11的项目。如果您无法承受或不想依赖Fortran,这个项目可能会对您有所帮助。它仅使用CBLAS接口,以避免影响其他供应商的符号命名混乱(是否大写,是否有尾部下划线等)。有点争议的是,翻译采用的是从0开始的索引,除了错误代码。遗憾的是,`info = 0`表示成功,因此我们对此无能为力。
当前的测试覆盖率:LAPACK自己的测试套件(450K参数化测试也映射到C),NumPy测试套件和SciPy测试套件均通过。至少在最常见的算法中是可靠的。对于覆盖较少的算法,仍可能存在错误,因此我暂时将其标记为alpha版本。但如果您发现任何问题,请在仓库中提交问题。
此外,这使得在您的机器上或任何需要启用架构优化的地方编译OpenBLAS和LAPACK变得更加容易,并且生成的二进制文件更为精简。
如果您还想要一个即插即用的替代方案,提供了一个Fortran适配层,可以将包装器转换为1索引(这就是我测试NumPy/SciPy的方式),但会有一些性能损失。
如果您不喜欢默认的符号命名,您还可以根据自己的喜好添加前缀和后缀进行命名混淆。ILP64也得到了支持,如果您尝试与ILP64 CBLAS链接,它会在意外链接时发出警告,或者如果您提供标志,则会为您处理相关问题。
Netlib上的Doxygen文档版本总让我感到不适,因此我尝试了自己的版本。可以在这里找到:<a href="https://ilayn.github.io/semicolon-lapack/" rel="nofollow">https://ilayn.github.io/semicolon-lapack/</a>
我特别想看到的一个细节是同时查看所有四种变体;现在它们被分组如下:<a href="https://ilayn.github.io/semicolon-lapack/api/linear-systems/symmetric-indefinite/sytrf.html" rel="nofollow">https://ilayn.github.io/semicolon-lapack/api/linear-systems/...</a>如果我做得不够好,请告诉我,我仍在探索细节。默认字体,例如,确实需要一些改进。
为了防止无益的讨论,我想提几点:
- Fortran没有错。如果您喜欢它,就继续使用。我个人不太喜欢,虽然我非常喜欢Fortran77那个时代的版本,但对所谓的现代版本就没那么感冒。
- 这项工作与Fortran无关。它旨在服务于仅使用C工具链且不希望出现跨语言问题的特定受众。
- 这项工作希望吸引更多人来优化C代码,以实现共同利益。
文档中提供了更多的理由。
欢迎所有反馈和批评。
我第一次在Chrome上看到这个,决定在Safari中测试一下。结果非常相似。<p>我还将其与Facebook进行了比较,经过5分钟的故意滚动,最多消耗了650 MB,平均约为400 MB。<p>有没有网页开发者能解释一下LinkedIn和Facebook之间巨大的差异?看起来两者在信息流中的视觉信息量几乎相同,但LinkedIn的内存占用却高出5到7倍。<p>我查了一下,Facebook使用React和虚拟DOM,而LinkedIn使用Ember(我之前从未听说过这个)。难道只是因为Facebook在不再需要JavaScript对象时更有效地动态清除它们吗?
市面上有很多Artemis II的追踪器。我查看了很多,发现总是遇到相同的问题——有些数据看起来不太正确,使用起来在小屏幕上很困难,其他的则感觉过于复杂,而我实际上只想知道:船员在做什么,猎户座的位置在哪里,速度有多快。我找到的最好的一个是issinfo.net/artemis,这个设计给了我很多灵感。
于是我自己做了一个。我真正感兴趣的部分是数据。结果发现,任何人都可以免费查询JPL的Horizons API,获取猎户座飞船的完整历书数据——位置、速度、距离。我之前根本不知道这个功能的存在。
更棒的是:NASA的深空网络发布了一个实时XML数据流(eyes.nasa.gov/dsn/data/dsn.xml),每5秒更新一次,显示哪些地面天线正在与哪些飞船通信。目前,堪培拉的两个天线正对准猎户座——一个发送指令,两个都在接收296,000公里外的6 Mbps S波段遥测数据。你可以在同一个数据流中看到木星的朱诺号、詹姆斯·韦伯太空望远镜和火星奥德赛号。开放的数据真是令人惊叹。
这个应用程序从Horizons获取轨迹,从NASA发布的飞行计划中获取船员活动信息,并从深空网络获取实时地面站状态。老实说,它主要是以一种随意的方式编码的,带有一定的监督。数据管道的部分则更为手动:弄清楚哪些数据是公开的,如何从原始向量计算相对位置,如何缓存和回填。这部分是最有趣的。
代码在GitHub上是开放的。我是为自己做的,也是作为一个有趣的练习,但很乐意接受任何反馈——特别是关于数据准确性和我可能遗漏的其他公共数据源。
来源: [https://github.com/dmarchuk/artemis.fyi](https://github.com/dmarchuk/artemis.fyi)