Why Julia?同元软控科学计算环境Syslab助推Julia开源社区发展

2023-01-05 14:48   来源: 互联网    阅读次数:3899

自发布基于 Julia 的科学计算环境 MWORKS.Syslab 以来,同元软控在科学计算语言、多语言统一编译和融合、AI 和机器学习等技术方向上开展了深入研究。任何技术的发展都离不开良好的生态,依赖生态并建设生态,是同元软控所坚持的发展理念。2022 年,同元软控跟 Julia 开源社区开展了多层次的合作,包括发起开源项目和开源赞助等。

本期,我们来盘点一下同元软控在 Julia 编程语言方面的一些社区工作。

一、JuliaCN 2022 报告盘点

Julia 中文社区组织的冬季会议于2022年12月3日至12月9日举行,国内使用 Julia 的开发者聚集在一起分享与 Julia 有关的技术报告。作为 JuliaCN 的黄金赞助商,同元软控在这次会议中给予了大力支持,并在这次会议贡献了 6 场精彩的报告。

下面对每场报告的内容进行概述,对相关内容感兴趣的朋友可以直接观看 B 站视频了解更多内容。

1、同元软控与 Julia

我们(同元软控)非常看好 Julia 的发展,也会持续不断地与 Julia 社区一起勇攀未来的高峰。

报告人:郭俊峰 (产品总监)

这个报告向社区介绍了同元软控发展历程,以及同元软控为什么选择 Julia 作为科学计算基础语言,报告就 CPS(信息物理融合系统)的发展做了简要探讨,纵观国际科学计算软件的发展,都发端于数学计算,然后走向广泛的科学计算并最终走向系统仿真,三大数学软件:MathWorks、 WOLFRAM 和 Maple 无不如此。同元深耕系统建模 20 年,在系统建模技术上积累深厚,需要寻找跟系统建模相匹配的下一代科学计算语言。Julia语言恰好在各方面都符合 CPS 对科学计算的诉求:动态、高性能、开源而且面向未来。

报告分享了 Modelica 和 Julia 现阶段的融合进展,更对未来做了展望。同元软控坚定的看好 Julia 的发展,也希望跟 Julia 社区一起推动科学计算工具和生态的发展。

2、新手教程: 写出糟糕好的 Julia 代码的N种思路

Julia 可以写出极其高效的代码,但这需要经过一定的观念转变与编程训练。

报告人:陈久宁

Julia 初学者关于 Julia 最大的困惑可能在于 “为什么 Julia 声称很快,但是我随便试着把我旧的 Python/MATLAB 代码翻译过来之后发现并不快,甚至比 Python/MATLAB 还慢”。这个教程的目的是为了介绍那些 Julia 与其他语言在使用上最核心的差异。这个教程的内容取材于陈久宁在同元软控日常代码评审中的频繁发现的问题,这些问题背后实际上是那些高级 Julia 开发者必知必会的一些内容。

这个教程当天收到了一位社区中 Julia 初学者的高度评价:“一个 Julia 基础语法不全会的人,这场报告竟然听懂了。Julia 性能很大程度上需要人来操作:固定类型、不可变结构体等等... 说实话不听这一场,我可能就会按照其他语言那样去学习,不去提升 Julia 性能了。”

3、TyMLang.jl: 将 MATLAB 代码导入 Julia 生态

你可以在 Julia 下执行 .m 文件,而这完全不需要 MathWorks。

报告人:赵王宏楦

MATLAB 是迄今为止最具影响力的数值计算集成开发环境,它在工程领域遗留了大量代码资产,在各行各业的老一代专业人员中有相当高的普及度。随着时代发展,MATLAB 在以深度学习为代表的新兴科学计算分支中呈现明显的颓势;而 Julia 语言作为一个面向未来的科学计算语言,同时很好地继承 Python 等语言的历史遗产,具有非常广阔的发展空间。

我们希望 MATLAB 的老用户,和他们的部分代码资产能参与到新一代生态的发展中来。正因如此,我们破除万难,在 Julia 中实现了一个高度兼容 MATLAB 的编程语言——同元软控 M 语言。使用同元软控 M 语言,可以让那些掌握 MATLAB 技巧的工程师和科学家快速投入到最新的科学计算生态中工作,让他们访问并应用 Julia 生态中那些新颖的技术和工具。

4、JNumPy: 使用 Julia 为 Python/Numpy 编写扩展模块

对于 Python 社区来说,JNumpy 是一个更好的 C/Numba 方案——更少的代码封装和更高的性能。

报告人:宋家豪

本次报告向社区介绍了由同元软控开发的 JNumPy 工具库,首先介绍了 JNumPy 的使用场景,即提供高效且易用的封装工具,将 Julia 代码以封装成 Python 库,使得 Python 用户能够调用 Julia 得到更好的计算性能。报告演示了使用 JNumPy 封装 Julia 代码的示例,JNumPy 的使用方法,Julia 和 Python 之间的数据转换规则,性能对比,以及未来优化的工作方向等。

由于 JNumPy 在启动速度,运行速度,跨平台支持等特性上相比其他 Python 调用 Julia 的方案 (PyCall, PythonCall) 具有明显的优势,在追求性能以及工程化的应用场景下,JNumPy 提供了目前最强大的解决方案。

5、TyPlot: 使用 Julia 实现自定义绘图模块

同元基于自身需求开发的一个绘图框架。

报告人:陈志强

向社区介绍了同元软控在数据可视化方面的迫切需求,引出了图形库开发的必要性。从如何开发图形库、现有的技术调研、图形库最终的开发目标介绍了图形库的背景。

这个报告主要介绍了同元软控图形库已具备的能力,包括丰富的图形种类,友好的交互界面以及一体化的用户体验。选取了专业库的几个典型应用,直观的展示了图形库对复杂图形的支持能力。报告最后提出了图形库进一步发展方向,从能用变成好用、二维辐射三维、常用绘图扩展到专业图形绘图、离线绘图到实时绘图、桌面绘图到网页绘图。

6、为什么我推荐使用 Julia ? —— 可组合性与生成函数

在 Julia 中 1 + 1 > 2 的场景随处可见 —— 更少的代码、更好的可读性、更高的效率。

报告人:陈久宁

今年在 Julia 社区最出圈的一篇博客大概是 Yuri 的“为什么我不再推荐使用 Julia”,一针见血地指出了 Julia 的可组合性在正确性方面的风险。在这个报告中,我们介绍了一个同元内部通信工具箱的一个核心组件及其设计思路——用不到 300 行代码实现在 Galois 域上的数值计算中得到超越 MATLAB 的 C 代码 1000 倍的性能优势。

这一组件背后的核心思路在于:1) 利用 Julia 生成函数带来的无运行时开销的泛型支持,以及更重要的 2) Julia 的可组合性。围绕性能和可组合性这两个核心特征设计的 Julia 允许我们用更少的代码、更清晰的编程实现和更少的硬编码假设来完成日常编码工作的需求,而这是我们始终推荐 Julia 的原因。相比而言,Yuri 文章指出的是一个普遍但并不关键的场景——它只会出现在实验性代码阶段。

二、Julia 社区贡献

2022年,同元软控开源的 Julia 相关工具箱或组件一共有三个,均存放在 GitHub: Suzhou-TongYuan项目下。

1、JNumpy: julia-numpy

作者:赵王宏楦、宋家豪

JNumPy 是同元软控针对 Python 调用Julia语言问题给出的一个工程化的解决方案。在所有 Python 调用 Julia 的方案中,JNumPy 以启动速度最快、运行速度遥遥领先、支持跨平台及特殊的 Python 发行版、具有编译可移植性、对 NumPy 类型兼容性最佳、严格可控的类型转换关系等特点脱颖而出。在较为“严肃”的 Python 调用 Julia 工程中,JNumPy 是将 Julia 数据及函数暴露给 Python 的最佳选择。

2、ObjectOriented.jl

作者:赵王宏楦

ObjectOriented.jl 是同元软控为 Julia 语言实现的一套完整的、机制性 (mechanical) 的面向对象宏库,能够让用户以贴近 Python 的语法进行面向对象编程,以访问诸如继承/多继承、getter/setter,接口编程等功能。

由于该库是 Julia 中第一个完整实现常见面向对象特性的库,在向社区征求命名意见时,被一致认同冠以 ObjectOriented.jl 这个明显具有生态主导地位的名字。

3、UnzipLoops.jl

作者:陈久宁、赵王宏楦

针对以下这类将广播结果拆分到不同矩阵的典型需求,UnzipLoops.jl 给出了社区中最高效的解决方案:

在给出高效方案的同时,UnzipLoops 是一个零依赖的轻量包——源代码仅仅不到100行。

三、寄语

2022年是同元软控跟 Julia 开源社区合作的元年。同元软控坚定看好 Julia 的发展,也坚定地将Julia作为下一代科学计算环境的支撑语言。同元软控会持续跟 Julia 社区开展多层次合作,也欢迎 Julia 社区以及有志于建设开源科学计算生态的同道中人,一起推进 Julia社区和科学计算环境Syslab的发展,让中国在新一代科学计算中做出更大的贡献与成就。



责任编辑:Linda
分享到:
0
【慎重声明】凡本站未注明来源为"广东视听网络台"的所有作品,均转载、编译或摘编自其它媒体,转载、编译或摘编的目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如因作品内容、版权和其他问题需要同本网联系的,请在30日内进行!

未经许可任何人不得复制和镜像,如有发现追究法律责任 粤ICP备2020138440号