“开源软件供应链点亮计划——暑期2024” 目前项目开发时间已经过半。今年 TUNA 共立项四个项目,开发正在有序进行中。我们邀请了各位学员和导师简要介绍各自项目目前的进展,欢迎各位感兴趣的朋友们一同交流。

Rust 基于完成的异步 QUIC

Asakura Mizu / Berrysoft

目前完成的工作

经过最初的一段时间调研后,最终选择在 quinn-proto 的基础上,对 quinn-udp 和 quinn 的功能进行移植。

没曾想,在实际开发过程中,移植 quinn-udp 的”可选”功能反而花费了更长的时间,因为需要把 quinn-udp 中直接调用 syscall 实现的 socket 操作封装为“基于完成的异步”的形式并移植到 io-uring 和 iocp 上。

quinn 的移植则相对容易一些,主要就是去除对 tokio 的依赖以及把与 quinn-udp 的交互修改为与自己封装的 socket 交互。

目前已基本完成了 quinn 的大部分功能的移植,一些额外功能如统计数据、work limiter 等则暂时没有计划。不过目前 benchmark 结果表现略逊于 quinn,推测可能是 quinn-udp 使用了 recvmmsg 批量接收消息的原因,不过还需进一步确认。

之后的工作

目前计划先完善当前的工作,进行 review 并 merge 到主分支上。接下来计划移植 h3-quinn 的功能(这东西代码才几百行),也许可以用 quic-interop-runner 进行一下测试。

CIRCT 编译器的电路划分及 Arcilator 仿真并行化

Asuna / 喵喵

目前已在 Fork 仓库中向 CIRCT 添加了一个 Partition Pass。我们计划在 HW Dialect 层对电路模块进行划分,这样 Lower 到 Arc Dialect 层之前就是已经划分好的电路模块。

Partition Pass 已经做了初步实现,现在可以对简单带状态的单层模块进行不完全自动(需手动指定 reg 分配到哪个子模块中)划分,划分效果如下 MLIR 例子:

  • 输入 CIRCT HW Dialect
    hw.module @GCD(in %clk : !seq.clock, in %rst : i1, in %in_a : i64, in %in_b : i64, in %in_valid : i1, out in_ready : i1, out out   : i64, out out_valid : i64) {
    %c0_i63 = hw.constant 0 : i63
    %true = hw.constant true
    %c0_i64 = hw.constant 0 : i64
    %false = hw.constant false
    %smaller = seq.firreg %13 clock %clk {firrtl.random_init_start = 0 : ui64} : i64
    %larger = seq.firreg %11 clock %clk {firrtl.random_init_start = 64 : ui64} : i64
    %working = seq.firreg %15 clock %clk reset sync %rst, %false {firrtl.random_init_start = 128 : ui64} : i1
    %0 = comb.icmp bin eq %smaller, %c0_i64 : i64
    %1 = comb.and bin %0, %working {sv.namehint = "done"} : i1
    %2 = comb.concat %false, %larger : i1, i64
    %3 = comb.concat %false, %smaller : i1, i64
    %4 = comb.sub bin %2, %3 : i65
    %5 = comb.concat %false, %in_a : i1, i64
    %6 = comb.mux bin %working, %4, %5 {sv.namehint = "na"} : i65
    %7 = comb.mux bin %working, %smaller, %in_b {sv.namehint = "nb"} : i64
    %8 = comb.concat %false, %7 : i1, i64
    %9 = comb.icmp bin ugt %6, %8 : i65
    %10 = comb.extract %6 from 0 : (i65) -> i64
    %11 = comb.mux %9, %10, %7 {sv.namehint = "nlarger"} : i64
    %12 = comb.extract %6 from 0 : (i65) -> i64
    %13 = comb.mux %9, %7, %12 {sv.namehint = "nsmaller"} : i64
    %14 = comb.xor bin %1, %true : i1
    %15 = comb.mux bin %working, %14, %in_valid {sv.namehint = "nworking"} : i1
    %16 = comb.concat %c0_i63, %1 : i63, i1
    %17 = comb.xor bin %working, %true : i1
    hw.output %17, %larger, %16 : i1, i64, i64
    }
    
  • 输出 CIRCT HW Dialect (切分为 3 个模块)
    "hw.module"() ({
    ^bb0(%arg15: i1, %arg16: !seq.clock, %arg17: i1, %arg18: i64):
    %32 = "hw.constant"() {value = true} : () -> i1
    %33 = "hw.constant"() {value = 0 : i64} : () -> i64
    %34 = "hw.constant"() {value = false} : () -> i1
    %35 = "seq.firreg"(%39, %arg16, %arg17, %34) <{name = "working"}> {firrtl.random_init_start = 128 : ui64} : (i1, !seq.clock, i1, i1) -> i1
    %36 = "comb.icmp"(%arg18, %33) <{predicate = 0 : i64, twoState}> : (i64, i64) -> i1
    %37 = "comb.and"(%36, %35) <{twoState}> {sv.namehint = "done"} : (i1, i1) -> i1
    %38 = "comb.xor"(%37, %32) <{twoState}> : (i1, i1) -> i1
    %39 = "comb.mux"(%35, %38, %arg15) <{twoState}> {sv.namehint = "nworking"} : (i1, i1, i1) -> i1
    %40 = "comb.xor"(%35, %32) <{twoState}> : (i1, i1) -> i1
    "hw.output"(%40, %35) : (i1, i1) -> ()
    }) {comment = "", module_type = !hw.modty<input in_valid : i1, input clk : !seq.clock, input rst : i1, input reg_smaller : i64, output in_ready : i1, output reg_working : i1>, parameters = [], per_port_attrs = [], result_locs = [#loc, #loc1], sym_name = "GCD_P0"} : () -> ()
    "hw.module"() ({
    ^bb0(%arg10: i64, %arg11: i64, %arg12: !seq.clock, %arg13: i1, %arg14: i64):
    %20 = "hw.constant"() {value = false} : () -> i1
    %21 = "comb.concat"(%20, %31) : (i1, i64) -> i65
    %22 = "comb.concat"(%20, %arg14) : (i1, i64) -> i65
    %23 = "comb.sub"(%21, %22) <{twoState}> : (i65, i65) -> i65
    %24 = "comb.concat"(%20, %arg10) : (i1, i64) -> i65
    %25 = "comb.mux"(%arg13, %23, %24) <{twoState}> {sv.namehint = "na"} : (i1, i65, i65) -> i65
    %26 = "comb.mux"(%arg13, %arg14, %arg11) <{twoState}> {sv.namehint = "nb"} : (i1, i64, i64) -> i64
    %27 = "comb.concat"(%20, %26) : (i1, i64) -> i65
    %28 = "comb.icmp"(%25, %27) <{predicate = 8 : i64, twoState}> : (i65, i65) -> i1
    %29 = "comb.extract"(%25) <{lowBit = 0 : i32}> : (i65) -> i64
    %30 = "comb.mux"(%28, %29, %26) {sv.namehint = "nlarger"} : (i1, i64, i64) -> i64
    %31 = "seq.firreg"(%30, %arg12) <{name = "larger"}> {firrtl.random_init_start = 64 : ui64} : (i64, !seq.clock) -> i64
    "hw.output"(%31, %31) : (i64, i64) -> ()
    }) {comment = "", module_type = !hw.modty<input in_a : i64, input in_b : i64, input clk : !seq.clock, input reg_working : i1, input reg_smaller : i64, output out : i64, output reg_larger : i64>, parameters = [], per_port_attrs = [], result_locs = [#loc2, #loc1], sym_name = "GCD_P1"} : () -> ()
    "hw.module"() ({
    ^bb0(%arg5: i64, %arg6: i64, %arg7: !seq.clock, %arg8: i1, %arg9: i64):
    %3 = "hw.constant"() {value = 0 : i63} : () -> i63
    %4 = "hw.constant"() {value = 0 : i64} : () -> i64
    %5 = "hw.constant"() {value = false} : () -> i1
    %6 = "seq.firreg"(%18, %arg7) <{name = "smaller"}> {firrtl.random_init_start = 0 : ui64} : (i64, !seq.clock) -> i64
    %7 = "comb.icmp"(%6, %4) <{predicate = 0 : i64, twoState}> : (i64, i64) -> i1
    %8 = "comb.and"(%7, %arg8) <{twoState}> {sv.namehint = "done"} : (i1, i1) -> i1
    %9 = "comb.concat"(%5, %arg9) : (i1, i64) -> i65
    %10 = "comb.concat"(%5, %6) : (i1, i64) -> i65
    %11 = "comb.sub"(%9, %10) <{twoState}> : (i65, i65) -> i65
    %12 = "comb.concat"(%5, %arg5) : (i1, i64) -> i65
    %13 = "comb.mux"(%arg8, %11, %12) <{twoState}> {sv.namehint = "na"} : (i1, i65, i65) -> i65
    %14 = "comb.mux"(%arg8, %6, %arg6) <{twoState}> {sv.namehint = "nb"} : (i1, i64, i64) -> i64
    %15 = "comb.concat"(%5, %14) : (i1, i64) -> i65
    %16 = "comb.icmp"(%13, %15) <{predicate = 8 : i64, twoState}> : (i65, i65) -> i1
    %17 = "comb.extract"(%13) <{lowBit = 0 : i32}> : (i65) -> i64
    %18 = "comb.mux"(%16, %14, %17) {sv.namehint = "nsmaller"} : (i1, i64, i64) -> i64
    %19 = "comb.concat"(%3, %8) : (i63, i1) -> i64
    "hw.output"(%19, %6) : (i64, i64) -> ()
    }) {comment = "", module_type = !hw.modty<input in_a : i64, input in_b : i64, input clk : !seq.clock, input reg_working : i1, input reg_larger : i64, output out_valid : i64, output reg_smaller : i64>, parameters = [], per_port_attrs = [], result_locs = [#loc3, #loc1], sym_name = "GCD_P2"} : () -> ()
    

现在的策略是每个 output 划分成一个单独的子模块。下一步计划着手处理带 instance 的嵌套模块切分,在切这样的模块时尽力避免跨模块边界过多的连线。之后我们计划对模块进行图建模,然后引入 METIS 库来对图进行划分,并由该库来决定 reg 状态分配到哪个子模块中。在实现完这些后向上游仓库打开 PR 并推动合并。

RISC-V 向量处理器 T1 性能评估框架

范书沛 / Sequencer

Profiler 实现

Profiler 使用 rust 语言实现。目前已完成 T1 profiler 的多个基本模块编写,并将已编写完成的模块组合得到了一个分析器 DEMO。

Event 日志读取

仿真得到的 Event Log 原始输出为 jsonl 文件,每行为一个 json 对象,描述了一个事件及其时间戳。 由于原始输出的体积庞大,仿真管线会将原始事件日志经 zstd 压缩之后存储。Profiler 利用了 zstd crate 可以直接读取压缩之后的日志文件。事件解析部分,利用 serde 库将 Json 编码的事件直接读取为 Rust 中定义的结构体。

日志筛选与重排序

事件会按事件顺序给出,但由于 Chisel 语言的限制,同一时钟周期内发生的事件记录顺序难以事先确定。同时 Profiler 在执行特定的分析任务时可能只需要部分类型的事件。在处理事件之前,会先将事件进行过滤,筛选出感兴趣的事件,并对同一周期内记录的事件进行重排序。

事件分析波形输出

为了更精细的分析 Profiler 得到的结果,RTL 设计人员希望能将部分较为细节的分析结果与仿真波形对齐,希望 Profiler 能以波形文件的方式部分低层次的分析结果。

目前 Profiler 以 FST 格式输出分析波形文件。本项目将 FST C-API 进行了简单的包装已完成 FST 格式输出功能。已可以输出 hierarchy 定义,记录下 int/bits 和 string 类型信号的波形,本部分功能基本完备。

未来计划

性能分析的方法学部分已有初步设计,但尚未完成所有细节。 后续计划主要完善性能分析的方法学后,与 RTL 设计人员沟通,添加相应的 event log,并编写性能分析的代码。

除了核心功能开发外,还有以下非核心功能。若时间充裕,也考虑进行开发。

设计参数传递

T1 支持参数化的生成多种不同配置的加速器,但目前仿真器产生的日志文件不包含配置信息,profiler 难以获得设计参数。目前阶段暂时在 profiler 硬编码设计参数。后续考虑与仿真器部分统一接口。

波形查看器扩展

Profiler 输出的事件分析波形需要与仿真波形一起打开进行查看。目前使用 GtkWave 的 twinwave 程序可以打开两个并列且滚动同步的窗口,但使用并不方便。

目前开源的波形查看软件 GtkWave 和 Surfer 均缺乏同时打开多个波形文件,将其聚合显示在同一窗口的功能(该功能在对应的仓库均有 Feature Request,但由于社区开发力量不足,暂无实质的开发进展)。未来考虑参与到 GtkWave 或 Surfer 社区的多波形文件查看功能的开发之中。

事件波形输出格式

目前事件波形以 FST 格式输出,未来会增加 VCD 格式输出的功能。由于 VCD 格式是较为简单的文本格式,。目前的 Profiler 代码中已对事件波形输出部分设计了相应的接口。添加该功能不需要大的架构改动。

运行分析器

运行程序

t1-profiler --wave-path analysis.fst event-log.jsonl.zstd

查看分析结果

twinwave analysis.fst + wave.fst

基于前端技术栈的 OpenStreetMap 中公共交通关系编辑器

fltb / 快乐的老鼠宝宝

不知不觉一个多月过去了,我们也已经在官网上刊登了两次双周报。以下是对目前工作的一部分总结和一些暂时尚未写在报告中的进展。

项目进展

项目仍处于早期开发阶段,我们基本确定了渲染部分的实现方式。经过测试,点和路径已经可以成功渲染,但对于复合多边形仍有一些工作需要完成。

代码结构

我们计划将项目划分为不同的组件,以便未来的开发和维护。

组件和代码结构在提交中的展示

功能

编辑器的API请求

由于缺少足够简洁的OSM API封装,我开发了一个 OSM API 模块,使用 Promises 封装了 OSM 的一些接口,能够与符合 OSM 标准的 API 进行通信并提交结果,同时将返回的 XML 解析为 JavaScript 对象,以便在程序中更容易操作。

渲染与可视化

目前,我们的代码无法执行任何编辑操作,虽然能从 OSM 网站获取 XML 或 JSON 数据,但尚不能直接渲染。因此,我手动构建了几个点作为非常基础的渲染测试。(请原谅配色方案的粗糙,我会在后续进行优化。)

背景瓦片功能也进行了测试,目前运行良好。

由于地球上71%的面积是海洋,大部分陆地无人居住,而我不幸随机选择了一个位于荒野中的位置,因此在这张截图里没能展示出可识别的 OSM 数据。不过瓦片确实可以正常请求和渲染,正如截图中的开发者工具所示。

瓦片的网络请求统计

此外,我们在尝试为所有瓦片请求添加自定义 User-Agent 以遵守 OSMF 的瓦片使用政策时遇到了一个小技术问题。具体来说,我们希望自定义请求头部(例如,在 User-Agent 中插入 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0 BusFensi/0.0.1 之类的信息,而不是使用浏览器的默认 User-Agent)。我们需要对 pixi.js 进行一些修改,因为 pixi.js 似乎通过 <img> 标签加载图片。然而,这样做不符合良好的开发实践。因此,根据 @bhousel 的建议,我们决定放弃这个相对不重要的需求。

目前,数据渲染部分已经设置完毕,不过仍有一些细节需要打磨,比如样式和控制渲染的元素。这些将在后续功能开发中同步调整,以确保样式与编辑逻辑一致。

显示效果

(糟糕,确实看起来不太美观)

不过,只需几行代码,我就可以移除建筑物(以及其他非公路特征)的渲染,这将使其看起来好得多。我会逐步调整样式——也许借鉴一些 iD 编辑器的颜色?

至于编辑功能,现在无法进行演示,因为目前只有拖动点、平移地图和调整缩放级别的功能。

由于其他模块的接口仍在开发中,一些功能尚未实现。例如,路径的高亮显示,目前默认逻辑是选择整个路径,而不是高亮显示路径的某一段。再比如,多边形的渲染还没有实现,因为这需要编辑模块的接口。

编辑器的状态管理

目前,正在编写状态管理模块,为编辑提供稳定支持。这部分主要包括操作逻辑和全局数据管理。

在地图编辑的操作逻辑中,我引入了一个状态机,通过监听鼠标和键盘事件来管理编辑器的当前状态。状态机在代码中被称为“stateMachine.js”,它根据状态图中提供的功能和状态关系,处理状态转换和数据维护。根据当前状态,它决定触发哪 些操作以及要转换到的新状态。状态机提供了钩子,允许其他组件(如 Pixi.js 中的鼠标事件)跟踪事件。编辑操作在状态转换期间进行。

一般来说,在状态机的状态转换过程中,会对全局数据进行一系列更改。为了管理这些更改,代码中使用了一个双向链表,称为“操作列表”。该列表提供撤销、重做和执行接口。执行接口接受一个操作,执行它,然后将其添加到列表的末尾。为了避免多个重复操作,某些操作会被合并。

一个操作提供执行、撤销和重做接口,有些操作还提供合并选项。操作在执行、撤销或重做时应维护全局数据,并管理其他相关更改,例如受影响元素的 UI 和跨层的数据。这种方法确保所有更改都集中在一起,最大限度地减少在撤销和重做操作期间维护相关更改的认知负担。

全局数据是每个操作中引用的对象,操作列表确保在撤销和重做操作期间,操作的顺序是正确的。例如,它确保在撤销一个操作时,状态反映所有后续操作已经被撤销。

由于实际的编辑操作尚未完成,撤销和重做功能暂时未考虑,因为它们依赖于仍在进行中的部分代码。

状态管理的 Mermaid 图

维护路线图

项目的核心模块现已基本完成,这使我们能够进入开发的后期阶段。接下来的工作主要是在现有框架内添加新功能。

项目已经开发了大约一个半月,截止日期在九月底,时间相对紧张。因此,我将优先完成核心功能,将一些非核心功能推迟到以后完成,以确保项目顺利完成。

以下是需要实现的主要功能:

UI 组件
  • 大纲视图:显示所有当前元素,允许选择和基本的元素状态管理。
  • 属性视图:管理各种属性,包括全局设置和当前选定元素的元数据。
  • 一些独立组件,如创建新节点、连接线段等。

请注意,UI 的实现可能会被推迟,因为优先考虑开发基本图形模块。

功能方面

作为一个公共交通编辑器,它应支持公共交通编辑功能。在 OSM XML 中,公共交通关系由一个关系元素表示,该元素有一个路线和一系列标签,指示该元素的具体内容。

对于元数据的编辑,可以使用前面提到的属性视图。

对于点的精确位置编辑,将使用地图模块。我考虑添加一些样式以突出当前正在编辑的路线,使其更容易识别。

对于路线、点和路径之间的成员关系,需要将地图的选择功能与属性视图集成。

此外,可能需要一个路线创建功能,包括添加新点、创建新路线和编辑路线属性。

为了基于站点关系实现路线计算,利用现有的 API 如 Valhalla 或 OSRM 可以非常有效,因为它们本身就是基于 OSM 的模型来设计数据读取的。

[Read More]


TUNA 协会向 ACM 主席赠送 Tunaive

Jul 7, 2024. | By: Shengqi Chen

在 2024 年 7 月 6 日于湖南长沙举办的 ACM TURC 2024 会议上,TUNA 代表 @Harry_Chen 和 @dangfan 向现任 ACM 主席 Yannis Ioannidis 教授 1 2 3 介绍 TUNA,并赠送 2023 夏季款 Tunaive 一件。Yannis 教授对 Tunaive 上的 Quine Logo 设计表示赞赏,并称回国后有兴趣对相关代码进行运行测试。

TUNA gives present to Yannis Ioannidis

  1. https://www.acm.org/about-acm/officer-bios#h-acm-president 

  2. https://dl.acm.org/profile/81100425758 

  3. https://www.athenarc.gr/en/people/61 

[Read More]


项目简介

今年,中科院软件所继续举办 “开源软件供应链点亮计划——暑期2024” 项目。该项目与 Google Summer of Code 形式类似:开源社区提供项目需求并提供导师(mentor),在校学生利用暑期时间进行开发,主办方为顺利完成的项目提供一定额度的奖金。无论 GSoC 还是“点亮计划”,都是一种非常好的开源实践范式,能够有效增进高校学生对开源的理解、增加与真实社区的接触,并积累宝贵的经验。本次 TUNA 协会将继续作为社区加入这一计划,提供若干项目需求。TUNA 愿意和大家一起为国内的开源生态添砖加瓦,欢迎有能力、有热情、有时间的小伙伴们参加。

2023 年,TUNA 基于自身与上游需求,共立项 TUNA 镜像站帮助文档、清华大学网络学堂助手更新迭代、flutter-nfc-kit 更新迭代等多个方面的 5 个项目,4 个项目顺利结项,其中 清华大学网络学堂助手(Learn Helper)更新迭代(学生:王铮,导师:陈晟祺)获评最佳质量奖。详情可见 TUNA 项目页面官网公示

你也可在活动官网查看 TUNA 的项目列表

项目说明会将于 5 月 11 日举行,活动细节见 https://tuna.moe/event/2024/ospp2024/

本页最后更新时间:2024/05/10

注意事项

下面是一些通用的注意事项:

  • 请先详细阅读 活动首页 的介绍、日程安排、FAQ 等,对活动形式和流程有一个基本的认识。
  • 在决定报名前,首先邮件联系导师进行交流,简单地介绍一下你自己。
  • TUNA 成员大多使用 Telegram 作为即时通讯工具,而非 QQ 或微信。希望你能注册并加入 TUNA 群组以进行更细致的讨论(加入方式见本页面底部)。
  • 不要担心太难/工作量太大,在截止日期前,项目内容都是灵活可更改的。

项目列表

自有项目

以下项目从 TUNA 的实际需求而来,目前或者将作为 TUNA 的自有项目开放源码,由 TUNA 和开发者共同维护。

Rust 基于完成的异步 QUIC

  • 项目页面:https://summer-ospp.ac.cn/org/prodetail/24c480487
  • 项目描述:QUIC 协议是 HTTP3 的基础,是新一代网络通信的基石。Rust 的 QUIC 生态处于起步阶段,仅在 tokio 这类基于就绪(Ready)的异步运行时上有成熟实现。然而,操作系统的最新发展(如 io-uring)表明,基于完成(Completion)的异步将是高性能 IO 的未来,而 Rust 的生态尚未完全就这一未来做出完善的应对。本项目希望为一个跨平台的、基于完成的异步运行时 compio 完善在 QUIC 方面的生态。
  • 项目难度:进阶
  • 项目社区导师:王宇逸
  • 导师联系方式:Strawberry_Str (at) hotmail.com
  • 项目产出要求:
    1. 为 compio 项目添加使用 QUIC 协议的 Endpoint, Connection 和 Stream。
    2. 编写单元测试并通过 CI,合并入 compio 项目主线。
    3. (可选)以 QUIC 为基础加入 HTTP3 客户端和/或服务端支持
  • 项目技术要求:
    1. 使用 Rust 语言实现
    2. 基于完成的异步编程,如 IOCP 或 io-uring
    3. 理解 Rust 在基于完成的异步中需要做的特殊处理
    4. QUIC (RFC 9000)
  • 相关的开源软件仓库列表:

上游项目

下面的项目非 TUNA 维护,由 TUNA 成员和相应的上游社区成员(可能为同一人)共同担任导师。项目成果将以 Pull Request 的形式回馈给上游项目。

CIRCT 编译器的电路划分及 Arcilator 仿真并行化

  • 项目页面:https://summer-ospp.ac.cn/org/prodetail/24c480497
  • 项目描述:CIRCT 是基于 LLVM/MLIR 开发的电子设计自动化 (EDA) 工具,提供了硬件电路的统一中间表示、不同硬件描述语言 (HDL) 的前端和输出以及综合、仿真功能。目前 Chisel HDL 使用 CIRCT 作为其后端。

    CIRCT 中的仿真器后端目前正在进行活跃开发中,原理是电路中间表示下降到 LLVM 方言上,将 HDL 所定义的电路直接编译为对应的软件仿真器。这一编译器整体称为 Arcilator (和 Verilog 仿真编译器 Verilator 对应),在 CIRCT 中主要参与的方言是 ARC 方言。目前 Arcilator / ARC 只支持单线程仿真,为了进行多线程仿真需要进行电路划分以及线程之间的同步工作。本项目的目标是为 Arcilator / ARC 添加初步的多线程仿真支持。

  • 项目难度:进阶
  • 项目社区导师:刘晓义
  • 导师联系方式:circuitcoder0 (at) gmail.com
  • 项目产出要求:
    1. 添加 Arcilator 中的电路划分支持:添加一个 LLVM Pass,将电路整体划分为多个可以单独仿真的仿真域,同时确定仿真域之间需要交换的数据。
    2. 将 Arcilator 多个仿真域的仿真并行化:在上述 Pass 中额外将仿真域的任务分配到多个线程上。线程的创建、同步可以由 Runtime library 提供,也可以直接由 Pass 生成。
  • 项目技术要求:
    1. 对添加 LLVM 编译器的编译 Pass 有经验。本项目最终将实现为一个 CIRCT 中可以打开的 LLVM Pass。
    2. 推荐对集成电路设计和 HDL 语言 (例如 SystemVerilog, VHDL, Chisel 等)有所了解。本项目中处理的 IR 将会是由上层 HDL 语言转换而来,具体的划分方式会受 HDL 语言中相应的构造(模块、寄存器等)影响。
    3. 推荐对于多线程程序的优化有所了解。本项目所完成的电路划分算法将用于软件或多片硬件仿真,降低多线程程序的通信、同步开销可能会对最终的端到端性能有所影响。
  • 相关的开源软件仓库列表:

RISC-V 向量处理器 T1 性能评估框架

  • 项目页面:https://summer-ospp.ac.cn/org/prodetail/24c480491
  • 项目描述:T1 (https://github.com/chipsalliance/t1) 是一个高性能RISC-V Vector 处理器生成器,本项目旨在为 T1 RISC-V Vector Machine 提供基于 WASM 的体系结构性能评估前端框架,将来自 T1 仿真输出的波形和日志文件中与性能相关的数据进行可视化。本项目的工作将被用于推进软硬件协同设计,提高 T1 处理器在真实软件运行环境下的性能表现。
  • 项目难度:进阶
  • 项目社区导师:刘玖阳
  • 导师联系方式:liu (at) jiuyang.me
  • 项目产出要求:
    1. 对 T1 产生的 fst 格式波形图、仿真日志进行分析
    2. 针对所有的体系结构状态进行可视化
  • 项目技术要求:
    1. 具有一定的用户界面开发经验,在本项目中可以完成用户界面的设计和实现工作
    2. 推荐使用 egui (https://www.egui.rs) 实现 UI
    3. 对处理器内部结构有所了解,以便确定能够有效表现性能数据的关键信号或日志输出
  • 相关的开源软件仓库列表:

基于前端技术栈的 OpenStreetMap 中公共交通关系编辑器

  • 项目页面:https://summer-ospp.ac.cn/org/prodetail/24c480495
  • 项目描述:OpenStreetMap 是英国人 Steve Coast 于 2004 年发起的以知识开放为原则的地图项目。其数据模型对于公共交通等现实中抽象要素采用的关系描述方式较为复杂,OSM 基金会从 2016 年至今每年都往 GSoC 提交公共交通相关的项目,但是成果和具有技术债的工具链关系密切,可用性不强。本项目旨在以现代化的前端技术栈,实现一个可跨平台使用且操作简单交互明了的编辑器。本项目过程中在交互和功能性上会与 OSM 中国社区合作。
  • 项目难度:进阶
  • 项目社区导师:赵家成
  • 导师联系方式:me@jacksonzhao.email
  • 项目产出要求:
    1. 能够在编辑器内添加站点并创建线路关系(关系内成员顺序可变)或删除关系并通过OSM API 0.6上传。
    2. 能在只有站点数据的情况下,根据图幅中路网和控制点自动计算可行的经由,和基于前述经由自动切割较长的路径以便于添加关系。
    3. 在本次 OSPP 项目中不需要整体完成最终的平台,但需实现至少包含主要功能的原型。
  • 项目技术要求:
    1. 能够使用前端技术栈开发具有复杂界面的跨平台程序,对 WebGL 有了解。(有用过 Cesium.js/MapboxGL 等 WebGL 的 GIS 框架属于加分项)
    2. 有一定算法能力,对导航算法的实现有一定的了解。(有用过开源的导航路由工具如 OSRM、Graphhopper、Valhalla 等属于加分项。)
    3. 对 OpenStreetMap 的数据模型和API有所了解。(对社区文化和协作方式有了解或曾使用过相关数据进行分析等利用可视为加分项)
    4. 推荐有一定用户界面开发经验。取决于技术栈选取,可能需要有一定 WebAssembly、图形学知识基础。
  • 相关的开源软件仓库列表:

[Read More]


项目简介

今年,中科院软件所继续举办 “开源软件供应链点亮计划——暑期2023” 项目。该项目与 Google Summer of Code 形式类似:开源社区提供项目需求并提供导师(mentor),在校学生利用暑期时间进行开发,主办方为顺利完成的项目提供一定额度的奖金。无论 GSoC 还是“点亮计划”,都是一种非常好的开源实践范式,能够有效增进高校学生对开源的理解、增加与真实社区的接触,并积累宝贵的经验。本次 TUNA 协会将继续作为社区加入这一计划,提供若干项目需求。TUNA 愿意和大家一起为国内的开源生态添砖加瓦,欢迎有能力、有热情、有时间的小伙伴们参加。

[Read More]


项目简介

今年,中科院软件所继续举办 “开源软件供应链点亮计划——暑期2022” 项目。该项目与 Google Summer of Code 形式类似:开源社区提供项目需求并提供导师(mentor),在校学生利用暑期时间进行开发,主办方为顺利完成的项目提供一定额度的奖金。无论 GSoC 还是“点亮计划”,都是一种非常好的开源实践范式,能够有效增进高校学生对开源的理解、增加与真实社区的接触,并积累宝贵的经验。本次 TUNA 协会将继续作为社区加入这一计划,提供若干项目需求。TUNA 愿意和大家一起,为国内的开源生态添砖加瓦,欢迎有能力、有热情、有时间的小伙伴们参加。

[Read More]


项目简介

今年,中科院软件所与华为 openEuler 项目继续共同举办 “开源软件供应链点亮计划——暑期2021” 项目。本次 TUNA 协会将继续作为社区加入这一计划,提供若干项目需求。欢迎有能力、有热情、有时间的小伙伴们参加,也欢迎 TUNA 成员们提出更多需求。TUNA 愿意和大家一起,为国内的开源生态添砖加瓦。

[Read More]


繁忙的期中周,悠闲的金枪鱼(只有你一个没有期中的比较闲吧)。在这种百闲之中偷着忙的 TUNA 成员应邀来到南京,来到了开源软件供应链2020峰会的现场。

开源软件供应链2020峰会是「开源软件供应链点亮计划——暑期2020」的后续会议,既「围绕现代软件构建模式的关键供应关系网络——开源软件供应链展开深入解读,论道开源最新技术前沿话题」,也对暑期的项目进行总结,并展望2021年的计划。

TUNA 作为国内较大的高校开源社区,参与了「点亮计划」,从而也参与这次峰会。

[Read More]



项目简介

今年,中科院软件所与华为 openEuler 项目共同举办了 “开源软件供应链点亮计划——暑期2020” 项目。该项目与 Google Summer of Code 形式类似:开源社区提供项目需求并提供导师(mentor),在校学生利用暑期时间进行开发,主办方为顺利完成的项目提供一定额度的奖金。无论 GSoC 还是这次的“点亮计划”,都是一种非常好的开源实践范式,能够有效地增进高校学生对开源的理解、增加与真实社区的接触,并积累宝贵的经验。

本次 TUNA 协会有意作为社区加入这一计划,提供若干项目需求。欢迎有能力、有热情、有时间的小伙伴们参加,也欢迎 TUNA 成员们提出更多需求。TUNA 愿意和大家一起,为国内的开源生态添砖加瓦。

[Read More]


开学前“小聚”

Sep 8, 2018. | By: Xavier Yao

临近开学的一个周末,我们回到了久违多年的盒子咖啡馆,举办了一场自由讨论的 tunight-lite。说是“小聚”,结果来了20多位同学,差点把咖啡馆挤爆2333。事实表明 Geek 们也是需要 social 的XD。

[Read More]


TUNA 成员参加 LC3 China 会议

Jun 25, 2018. | By: Yuxiang Zhang

六月末,由Linux基金会主办的 LC3(LinuxCon + ContainerCon + CloudOpen)中国会议,在奥利匹克公园旁的国家会议中心如期召开。会议为期三日,正好赶上清华考试周,因此 TUNA 仅有少数咸鱼成员参加了会议。会上我们见到了专程从重庆赶来参会的几位开源工场的小伙伴,并进行了亲切友好的交流。

[Read More]


2017-18 春季学期金枪鱼之夜安排

Feb 19, 2018. | By: Xavier Yao & Harry Chen

金枪鱼之夜,英文名为 Tunight,是面向 TUNA 协会成员的小型技术交流沙龙。该系列活动于 2014 年秋季学期发起,以大约每周一次的频率维持至今。活动通常围绕某一话题,以讲授、答疑、交流、实践的形式展开。金枪鱼之夜自 2015 年秋季学期起,提供活动录音 Podcast;2016 年起,在 TUNA 直播间视频直播。欢迎校内外志同道合的同学报名演讲。

[Read More]


Debian Stretch Release Party 活动记录

Jun 17, 2017. | By: Xavier Yao

 进入考试周,北京高温黄色预警信号持续多天,最高气温38℃。高温的天气让等待新版本发布的人们内心更加的躁动。2017 年 6 月 17 日下午两点,TUNA 协会联合 USTCLUG 的 Yang Boyuan 同学以及北京 GNU/Linux 用户组在李兆基科技大楼举办了 Debian Stretch Release Party。

[Read More]


2016-17 春季学期往期金枪鱼之夜

Feb 5, 2017. | By: Xavier Yao & Jason Lau

提供 2017 春季学期各金枪鱼之夜音、视频及讲稿下载。

[Read More]


2016 秋季新成员欢迎会

Oct 7, 2016. | By: Xavier Yao

2016 年国庆假期的最后一天,寒冷的天气挡不住大家参加 TUNA 活动的热情。在某世界一流隔壁大学大名鼎鼎的真维斯楼,TUNA 举行了秋季学期新成员见面会。本次百团招新,在全新设计的注册网站和全新制作的贴纸和易拉宝的助攻下,我们招到新成员的人数和往年差不多,依然是50个左右……黑线

[Read More]


2016 网络安全科普日

May 16, 2016. | By: Justin Wong

又是一年春夏之交,安全是这个时节的主题。2016 年 5 月 15 日下午两点,科普讲座——网络安全科普日·物联网时代的安全威胁,在 清华五教 5105 准时开场。

[Read More]


RHEL/CentOS 7 安装LXC

May 1, 2016. | By: Justin Wong

最近 TUNA 新增了一台跑着 RHEL7 的服务器,之前我们用的都是 Debian,虽然早年也接触过 CentOS,但是对 RH 系的生态系统还是不太熟练。这篇文章也算是 对头一次在 RHEL7 上折腾的一个备忘。

[Read More]


2015 软件自由日清华站活动报告

Sep 19, 2015. | By: Justin Wong

金秋送爽,艳阳高照,2015 年 9 月 19 日下午两点,2015软件自由日清华站在清华大学新水利馆欢乐开场。本次活动 由 TUNA 协会和北京 GNU/Linux 用户组联合举办,且得到了 Ubuntu 社区、Fedora 社区、openSUSE 社区、Firefox 社区、 阿里移动安全和七牛云存储等赞助方的大力支持,赞助方为此次活动提供了非常丰厚的礼品。

礼品一瞥

[Read More]


活动记录: TeX 与汉字处理

May 15, 2015. | By: Justin Wong

5 月的北京,夜晚的阵阵清风吹过宁静清华园,空气中飘荡着初夏的味道,这是发布新版本的季节!

2015 年 5 月 21 日,TUNA 协会邀请到了 [pTex-ng][pTex-ng] 的作者 马起园(李阿玲)、 中文 TeX 文档类/宏包 CTeX-kit 的开发者 刘海洋 还有 TUNA 协会成员,ThuThesis 维护者 赵涛(Alick Zhao) 等人, 共同分享 TeX 与汉字处理的技术与应用,还有 pTeX-ng、CTeX 2.0、最新版 ThuThesis 特性的演示。

[Read More]


鸟哥的 Linux 私房会

Mar 29, 2015. | By: Justin Wong

2015 年 3 月 29 日,沙尘退去,阳光明媚,春暖花开。众多 GNU/Linux 爱好者的启蒙人, 《鸟哥的 Linux 私房菜》作者 鸟哥·蔡德明 来到清华大学,在三教 3201 与同学们见面。

上午 10 点,来自 openSUSE 社区的 Sunny,Max 和 鸟哥 一同到达会场,活动如期开始。

[Read More]


openSUSE 13.2 Release Party 活动记录

Nov 16, 2014. | By: Justin Wong

2014 年 11 月 16 日,openSUSE 13.2 Release Party 清华站如期在中央主楼报告厅举办, 本次活动由 openSUSE 社区发起,TUNA 协会协办,SUSE 公司提供了礼品等各项资金支持。

活动中我们又见到了很多熟悉的面孔,绝对中立的 openSUSE 吸引到了来自北京各个开源社区同僚前来欢聚。

下午两点,来自 TUNA 的 Justin Wong 宣布活动开始,本次活动的主题是「做一只安静的蜥蜴」,openSUSE 作为一个 由社区驱动写作开发的自由的 Linux 发行版,深受广大自由开源软件爱好者的喜爱,「安静」二字也很符合 openSUSE 与世无争,默默贡献的特质。

[Read More]


2014 秋季新成员欢迎会

Nov 1, 2014. | By: Justin Wong

2014 年 11 月 1 日,TUNA 那举行了创会以来首次新成员欢迎会,在本次活动中,除了新入会的同学, 还有不少知其名而不知其面的同学和幽灵会员参与。

最近上线的 gdanmaku 服务为本次活动带来了弹幕支持,害羞说话的同学们即可通过弹幕参与互动,活动在轻松快乐的气氛中开始。

[Read More]


2014 软件自由日清华站活动报告

Oct 3, 2014. | By: Justin Wong

2014年9月27日下午两点,清华大学TUNA协会在中央主楼二层网络中心报告厅举行了软件自由日庆祝活动,除了TUNA成员和清华同学外, 还有来自BJGUG, BLUG, GitCafe 和 CSDN 的小伙伴一同参加了活动。 由于本学期清华开学较晚,活动时间比正常时间推迟了一周。

此次软件自由日包括4个话题:

  • CSDN CODE: 为开源而生(王殿进)
  • Arch Linux: 生命在于运动(汪彧之)
  • 台湾自由开源社区组织经验(林旅强)
  • AngularJS Workshop(Martin)

[Read More]


2014 硬件自由日清华站活动报告

Aug 30, 2014. | By: Alick Zhao

2014 年 3 月 15 日,春季学期开学后不久的一个周六,清华大学 TUNA 协会在五教 5102 主办了硬件自由日清华站的活动。 活动有超过 70 人参加。此次活动的主题为“让软件工程师硬起来”。

下午一点时分组织者和一些观众陆续到场。活动注册沿用电子注册方式,每个人在注册电脑上的 LibreOffice 表格中填写各自的信息,这个表格会转换为 csv 格式, 被最后幸运抽奖的程序读取使用。本次活动启用了微博墙实时互动,现场第二块投影幕布由 scateu 提供。

[Read More]


FUDCon APAC 2014 Report

Aug 30, 2014. | By: Alick Zhao

Note: This is a press style report of FUDCon APAC 2014, which summarizes the event highlights. Don’t miss the links to slides, videos, and photos!

FUDCon APAC 2014 was successfully held at Conference Center at New Main Building of Beihang University, Beijing, China during May 23 to 25, 2014. This year the event was held together with GNOME.Asia Summit, an annual conference for GNOME users and developers in Asia. It turns out to be a rather exciting experience of mutually beneficial cooperation of free and open source communities. In total, GNOME.Asia and FUDCon APAC 2014 attracted more than 500 registrants, and among them over 300 attended the event.

[Read More]


2013 软件自由日清华站活动报告

Sep 25, 2013. | By: Alick Zhao

上周六(9 月 21 日)北京天气晴好,由清华大学学生网管会 (TUNA) 主办,并由北京 GNOME 用户组 (BJGUG) 协办的自由软件日清华站活动顺利举行。活动有超过 60 人参加。接近下午两点时开始现场注册,这次活动的注册为电子注册,每个人在注册电脑上的 LibreOffice 表格中填写各自的信息,这个表格会被最后幸运抽奖的程序直接读取。我们准备了光盘、贴纸与宣传海报,注册后每人都可以领取。

[Read More]


清华大学 TUNA 协会原名清华大学学生网管会,注册名清华大学学生网络与开源软件协会,是由清华大学网络技术和开源软件爱好者、技术宅组成的团体。现阶段向校内外提供开源软件镜像等服务。

The best team on the planet.

rss angle-right bars envelope telegram hashtag github flickr weibo