What has been learned so far from 61c
-
floating point
-
can only free the pointer directly allocated by malloc, cannot free some pointer in the middle.
-
RISC V instruction
-
RISC V assembly, so we know what is a pointer and a double pointer.
-
venus riscv simulator.
-
Logisim GUI simulator.
-
Pipeline: insert NOP to avoid hazard.
-
Cache: direct, associative , set-associative
-
L2 cache has worse hit rate just because it's accessed only when L1 is missed.
-
Cache coherency miss when running multiple core.
-
TBL is in front of Cache because Cache should use the physical addresses. multiple programs can have same virtual addresses.
-
virtual memory: page miss: not in TLB page fault: page is not in DRAM, so should be loaded by OS from Disk to DRAM. During this time, OS can choose to start a different program while waiting for page loading via context switching. AXI Stash is try to reduce the probability that page fault happens.
-
SIMD: same instruction runs multiple data at the same cycle.
-
Interupt vs Exception : Interupt is from outside and needs to be handled by process. While exception happens internally, and need OS to be involved to react on it.
-
mmu simulator : Camera cache and memeory ...
-
atomic access: A access to an address can only be done by one thread, not by multiple threads/cores in parallel. This has to be done by hardware(e.g. AXI) This is the reason why we should use language defined semaphore , rather than declare a variable and try to use it as a semaphore.
-
mapReduce
-
openmp : pragmas to enable parallel looping
-
Unroll loop to boost the performance: looping more time means executing more jal and beq.
-
proj4 numc
- use disutils with a setup.py to compile C files to a python module
- install it to local python (maybe venv)
- python c api. how to unpack arguments, tp_as_* functions ...