Team Work
每个同学需要从下面的选题中选择题目开展团队调研、分析、设计、实现和评测工作,定期开展交流并作记录等。
- 专题A: 量子编程系统
- 已有人员:李权熹、邓皓巍、邓胜亮、聂雷海
- 还需人数:2~4人
- 专题B:JS引擎的内存管理优化
- 已有人员:1名博一学生
- 还需人数:4~6人
- 专题C:Python和C/C++多语言混合分析
- 已有人员:1名研一学生
- 还需人数:2~6人
- 专题D:程序语言在图像处理等的应用
- 已有人员:张宇翔
- 还需人数:2~4人
- 专题E:Julia编程语言及其扩展
- 专题F:概率编程语言调研及应用扩展
- 专题G:图查询语言调研及应用扩展
- 其他自选:需事先征得主讲老师的同意
注:
- 各团队平时要定期交流和进行文档记录,所开展的工作不能局限在对已有工作的调研和理解,应动手开展实质性的设计和代码实现,解决实际问题。
- 张宇翔将参与专题 D~G 的研讨,张昱参与专题 A~G 的研讨
时间表
- 10月24日前与主讲老师联系,确定选题
提交方式
每组需要建立至少一个与项目相关的 Git 仓库(与主讲老师商量确定),并将自己的工作上传。
选题
A. 量子编程系统
本专题重点关注经典计算与量子计算混合模式下的量子编程系统的设计与实现,包括量子编程语言、量子编译器、量子电路优化、量子计算机体系结构等方面的研究。
(略)
B. JS引擎的内存管理优化
本专题重点围绕龙芯通用计算平台(如3A3000处理器、Federo fc21操作系统、GCC编译器、Mozilla的Firefox浏览器),分析JS引擎中垃圾收集器(Garbage Collector)的效率对JS程序性能的影响,并开展相关的性能优化。这里的JS 引擎包括 Firefox的 SpiderMonkey (其中的下一代即时编译器是IonMonkey)和Chrome的V8,龙芯团队已将它们移植到龙芯平台,移植后的版本可以从龙芯代码仓库Mozilla-esr52、chrome60获取。
研发背景:不同 JS 引擎使用的GC算法基本都一样,比如,SpiderMonkey 和 V8 都使用了分代、增量算法,但是算法实现细节由于JS 引擎架构的不同会有些差异,比如内存分配方法、增量标记触发条件、写读屏障处理方式等等。GC的实现中都会预留一些参数供用户设置阈值,以便可以根据设置的值来优化GC性能。目前,这些阈值在x86/arm平台的大多数情况下是最优的,但在龙芯平台上却不一定。
本专题探索的问题包括但不限于:了解GC的各种可控参数及含义,理解GC、JS程序和JS的编译程序等的并发执行的特点,分析这些多线程程序的共享内存及访问特点,找出它们在龙芯平台上的性能影响因素,并尝试优化。
C. Python和C/C++多语言混合分析
本专题重点关注Python和C/C++多语言混合中的性能和安全性分析与改进。当今越来越多的软件和工具提供 Python 应用编程接口以便开展大众化编程,但是Python程序采取解释执行的机制,其性能不容乐观。为此,许多框架和工具的提供者采用C/C++等来进行后台实现,再利用Python提供的C/C++扩展机制将这些C/C++实现包裹成Python库,供用户调用。需要注意的是,Python程序和C/C++程序有各自不同的系统工作栈空间,也有不同的数据类型和操作约定。针对这种多语言混合程序,它们的性能、内存使用等存在潜在可以改进的空间,为此需要有合适的工具能支持跨语言的性能、内存使用等分析,以便进一步找到可以改进的点。
本专题探索的问题包括但不限于:跨Python和OpenCV之间的性能分析工具(现有的性能分析工具只能在单一语言侧进行性能分析,没有建立起Python侧库函数与其底层实现之间的联系),内存使用异常分析等等。
D. 程序语言在图形图像领域的应用
本专题重点关注程序语言理论和技术在图形/图像领域中的应用,希望通过运用语言手段来提升图形图像应用的开发效率与运行效率。目前关注的工作有发表在SIGGRAGH 2018 的Slang。
Slang的研发动机 当前实时渲染引擎中的着色系统依赖预处理器与引擎代码综合工具,这些导致着色器特化复杂、不易扩展等问题。Slang 通过扩展HLSL,引入interfaces、generics和associated types 等现代高级语言特征以支持着色系统的模块化和着色器特化,实现扩展性与性能兼得。
本专题探索的问题包括但不限于:图形图像应用中异步任务执行与内存管理操作的编程模型分析,Slang语言机制本身对程序性能的影响分析,Slang对诸如硬件光线追踪等新型计算模型的扩展支持等。
E. Julia编程语言及其扩展
Julia (github) 是2009年开始由MIT 开发的、全球热度上升最快的编程语言之一。2018年8月发布了Julia 1.0。该语言的研制目标是high-level和fast,你可以阅读 Why We Created Julia 来了解Julia语言的研制动机。目前Julia已经用于自动驾驶汽车、机器人、基准医疗、增强现实等领域。它通过LLVM为多个平台编译高效的本地代码;它使用多分派,使得表达函数式等的编程模式变得容易;它提供动态类型,支持交互式使用;它擅长数值计算,支持多种数值数据类型并具有良好的并行性;它拥有丰富的描述性数据类型,使用这些类型声明可以使程序条理清晰且稳定。
本专题探索的问题包括但不限于:调研Julia的编译和运行机制,调研和使用Julia的一些包,例如,用于机器学习和AI的Flux.jl、Merlin.jl、Tensorflow.jl ,理解包的运转机制,尝试写自己的扩展包,等等。
(注:包括MSRA在内的业界已经开始探索用 Julia 设计新的深度学习框架)
F.概率编程语言调研及应用扩展
计算思维(Computational Thinking)的提出者 Jeannette Wing(周以真)(曾任微软副总裁,现任哥伦比亚大学教授)在ACM计算机科学教育旗舰会议(SIGCSE 2017)曾作 题 为《拥 抱 不 确 定 性 》(Embracing Uncertainty)的开幕演讲。她举例说明在当今“数据驱动发现”的世界中到处存在不确定的计算。这种不确定要求计算机科学专业的学生要具有概率和统计的基础,未来还需要创建概率程序设计课程。在MIT维护的PROBABILISTIC-PROGRAMMING.org网站中收集了现有的概率编程系统及其文章等资源链接;在Cornell大学的CS4110课程包含对Probabilistic Programming的授课话题。
本专题探索的问题包括但不限于:调研几种概率编程语言并应用,如MicroSoft的R2和Infer.NET、Google的Edward等,调研和实现由贝叶斯等概率图模型生成概率程序的方法,等等。
G.图查询语言调研及应用扩展
图的相关理论和技术在社会网络、知识图谱等有着重要的应用,是目前学术界和业界关注的热点之一(见社会网络与图匹配查询,2012年)。很多知名研究机构和公司对图的研究与应用都非常重视。例如,微软研究院的分布式大规模图数据处理引擎Graph Engine和图数据查询语言LIKQ(Language-Integrated Knowledge Query),Neo4j公司的开源图数据库及Cypher图查询语言,等等。
本专题探索的问题包括但不限于:调研OpenCypher等图查询语言及其实现机制,应用这些语言编程解决实际问题并评价等。