Git Product home page Git Product logo

am-kernels's People

Contributors

gftytkklt avatar jiangyy avatar rijuyuezhu avatar sashimi-yzh avatar wenz-jam avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

am-kernels's Issues

在wsl2下,命令行mainargs参数不会更新,导致abstract-machine下trm.c不会重新编译

0.环境:

WSL 版本: 2.1.5.0 ===》 Ubuntu22.04
内核版本: 5.15.146.1-2
WSLg 版本: 1.0.60
MSRDC 版本: 1.2.5105
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.22621.3296

1.描述:

这是在提前make clean-all abstract-machine的情况

image

再一次执行,却没有重新编译,至少应该要重新编译一下trm.c

image

盲点就是编译时间永远都固定了,一直都是那个时间
image

microbench中format_time存在整数溢出

位置在am-kernels/benchmarks/microbench/src/bench.c

 13 static char *format_time(uint64_t us) {
 14   static char buf[32];
 15   uint32_t ms = us / 1000;
 16   us -= ms * 1000;
 17   assert(us < 1000);
      ...

当us的值超过UINT32_MAX时,十六行的ms*1000就可能发生整数溢出,导致17行的断言被触发
直接改成(uint64_t) ms*1000即可
虽然说benchmark跑四千多秒好像没什么意义,但是这里有个大冤种跑超时了

PA2 声卡加锁 ( #5 continue)

#5 中提到了 PA2 中 nemu 实现声卡的问题。固然进程间加锁超出了 ICS 课程的范围,但是作为封装良好的开源库,SDL 在手册中给定了使用规范和约束:

SDL_OpenAudio

Description

desired->callback

... This function usually runs in a separate thread, and so you should protect data structures that it accesses by calling SDL_LockAudio and SDL_UnlockAudio in your code. ...

是故学生不需要理解其原理,造成噪声等问题的原因是未按照手册要求使用 API。学生不需要使用朴素的进程锁,只需要严格按照要求调用 SDL 的 API LockAudioUnlockAudio 即可。

这是一次很好的训练,告知学生使用库函数时不可凭空猜测其用法,而是应当仔细阅读文档。经过测试,在没有进行同步时,遇到噪音的可能性是不小的,学生大概率会遇到这个问题。可以在讲义中添加仔细阅读 SDL 文档的提示。任何认真阅读了 SDL_OpenAudio 文档的学生尽管可能不能理解问题的本质,但是应该有能力正确实现 API。如此一来,也不需要对框架代码进行修改(虽然似乎 am_native 也没有正确实现)。

添加的提示可以是:

!!! 在播放音乐的时候出现不明噪声

    原因可能是没有严格遵守 SDL 的 API 规范。在 [SDL 库的文档](https://wiki.libsdl.org/SDL2/CategoryAPI)中提及了 SDL 库的 API 的使用规范和约束。使用库函数时,**任何未满足规范和约束的使用的结果是未知的**。请确保仔细阅读文档并严格满足 API 规范和约束。

PA2 声卡加锁

通过查阅手册得知,SDL 音频系统在一个单独的线程中运行,不时回调 NEMU audio.c 中我们自己定义的回调函数填充缓冲区。这个函数在读完缓冲区的时候应该会修改 reg_count。而与此同时,主线程中,如果 NEMU 中的 AM 程序刚好写完缓冲区,两个线程同时修改 reg_count,这会造成冲突。(这个分析可能有问题)

我在实现声卡时加了锁,但是有一位同学实现时没有加锁,仍然能够成功运行。

只是好奇,这样究竟会不会出现冲突的问题?

对于声卡缓冲区的实现(如果不改寄存器定义),理解是 AM 自己维护写指针,NEMU 维护读指针,两者共同维护 reg_count。AM 将写指针减去 reg_count 得读指针,NEMU 将读指针加上 reg_count 得写指针。

我去确认了一下,确实是可能多线程同时操作,理论上确实是需要加锁,因为可能出现并发冲突。

但是对于ICS来说锁超纲了所以框架默认没加,加上声卡这部分这个不加锁触发并发冲突问题这个几率不大,加上即使出现也只是偶发的声音失真,所以不加这部分功能实现也没事。

王慧妍

由于加锁涉及多个项目,而且需要更改讲义内容。我先提 Issue。如果可以,我也可以提 PR。

cpu-tests 测试用例缺少覆盖范围

查看了针对 riscv32 指令集, cpu-tests下生成的反汇编结果, 缺少对以下 指令 的覆盖

  • slti
  • sltiu
  • ori
  • bgeu
  • lb
  • mulhsu
  • mulhu
  • divu
  • remu

感觉尤其要添加覆盖测试的是 mulhsu,因为它的实现是 non trivial 的

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.