- 博客(767)
- 收藏
- 关注
原创 最简单的 CUDA 程序,hello world from CUDA
【代码】最简单的 CUDA 程序,hello world from CUDA。
2025-04-08 14:32:37
99
原创 (done) 并行计算 CS149 Lecture4 (并行编程基础) (ISPC性能分析, ISPC常见错误, 并行编程步骤, 问题分解分配协同映射, 求解器例子)
TODO: here。
2025-04-07 17:30:38
330
原创 SIMD和SPMD的区别
单指令多数据和单程序多数据都是可以处理多数据的,不同点是SIMD是从指令级上看的,这意味着SIMD处理的多数据是执行相同的操作,比如都执行加法。而SPMD是从程序级上看的,这意味着处理的多数据不一定是执行相同的操作,因为程序里面可以有分支等,即执行路径可以是多条。一句话,SIMD是多个数据执行相同的操作,SPMD是多个数据可以执行不同的操作也可以执行相同的操作。
2025-04-07 10:04:18
315
原创 (done) 并行计算 CS149 Lecture3 (现代多核处理器2 + ISPC编程抽象) (超线程, 流水线, GPU原理, 内存IO瓶颈, 计算访存指令比例, ISPC)
TODO: here。
2025-04-06 20:44:19
138
原创 (done) 并行计算 CS149 Lecture2 (现代多核处理器) (SIMD, 多核, 超标量, 数据预取, 超线程)
视频 url: https://www.bilibili.com/video/BV1du17YfE5G?大佬笔记 url: https://zhuanlan.zhihu.com/p/8129089606。
2025-04-06 15:17:20
85
原创 (done) 并行计算 CS149 Lecture1 (Why parallelism? Why efficiency?) (并行基本概念、硬件基础)
TODO: here。
2025-04-06 12:25:09
87
原创 ulimit 可限制用户资源上限,比如限制用户可打开的最多文件描述符、可使用的最大内存等
可以查看当前所有选项的设置、以及解释。可查看当前设置的最大内存。
2025-04-01 09:56:46
92
原创 strings: 一个命令行工具,主要用于从二进制文件中提取可打印的字符串。
strings 是一个命令行工具,主要用于从二进制文件中提取可打印的字符串。它在逆向工程、调试和分析文件时非常有用。
2025-03-31 16:02:47
138
原创 计算机中的 Stub 代表什么?
在计算机科学中,Stub(存根)是一种临时或简化的代码/组件,用于模拟或替代更复杂的功能,通常用于开发、测试或系统集成。
2025-03-31 11:25:24
132
原创 C 语言中的隐性共享内存:全局未初始化匿名结构体变量 C语言允许存在多个未初始化的同名全局变量
url: https://stackoverflow.com/questions/7189982/two-variables-with-same-name-and-type-in-two-different-c-files-compile-with-g
2025-03-27 16:01:34
331
原创 (done) 梳理 xv6-lab-2023 fs.img 生成过程,以及 xv6 磁盘结构
由于写 LAB8 时调试文件系统并发 bug 遇到了很大困难,这里决定读读 xv6 文件系统源码,来帮助调试。
2025-03-15 19:37:04
118
原创 一个简易的内核 race detector 原理 (灵感源于 xv6 KCSAN)
操作系统内核中的代码,每次发生写内存操作时,记录这个写的地址在一个 watchpoints 列表里,随后延迟这个写操作 (约 200000 cycles)。接着,在每次读写内存操作时,检查 watchpoints 列表,看 watchpoints 列表中是否有地址与当前的读写地址相同,若有,说明发生了数据竞争。当我们对操作系统内核进行 race detector 时,由于操作系统内核并不能提供完善的运行时环境,我们只能自己去实现。
2025-03-11 14:38:30
235
原创 (done) 梳理 xv6-lab-2023 LAB8 实验代码(kalloctest,理清 test1)
可以看到只有 test1 失败了,因此只需要关注 test1。此外,还需关注红圈圈起来的数字代表什么。
2025-03-11 10:12:20
203
原创 C 语言宏定义替换 #pragma
你可以直接在 C 源文件中使用 #define 来定义宏,从而将 MY_OMP_FOR 替换为 #pragma omp parallel for default(none) shared(aj, detj)。这种方法更加直观,且不需要在编译命令中额外指定 -D 选项。来源:deepseek(已验证)
2025-03-10 14:50:12
326
原创 valgrind 检测多线程 bug,检测 并发 bug concurrent bug parallel bug
【代码】valgrind 检测多线程 bug,检测 并发 bug concurrent bug parallel bug。
2025-03-05 13:53:40
224
原创 (undone) SeTAR: Out-of-Distribution Detection with Selective Low-Rank Approximation
分布外(OOD)检测对于神经网络的安全部署至关重要。现有的基于CLIP的方法通过设计新颖的评分函数或复杂的微调方法来进行OOD检测。在本研究中,我们提出了SeTAR,一种新颖的、无需训练的OOD检测方法,该方法利用视觉-语言和纯视觉模型中权重矩阵的选择性低秩近似。SeTAR通过使用简单的贪心搜索算法对模型的权重矩阵进行事后修改,从而增强了OOD检测。基于SeTAR,我们进一步提出了SeTAR+FT,这是一种微调扩展,旨在优化模型在OOD检测任务中的性能。
2025-02-26 18:51:09
710
原创 (undone) Long Term Memory : The Foundation of AI Self-Evolution
url: https://arxiv.org/html/2410.15665v1
2025-02-26 09:57:28
122
原创 (done) 什么是 PCI? Peripheral Component Interconnect
x86 架构 MMIO 的方式:先对 PCI_CONFIG_ADDR 写入数据,告诉总线内核要读写哪块寄存器,再通过 PCI_CONFIG_DATA 进行真正的读写。如下是计算设备配置空间地址的方式,访问起来其实有点类似于 page table 对于 va —> pa 映射的计算。PCI标准手册 url1: https://ics.uci.edu/~iharris/ics216/pci/PCI_22.pdf。在 PCI 标准中,要求每个设备都一个块空间作为配置空间。也可以通过 class ID 查到设备。
2025-02-23 16:02:21
210
原创 (done) 研究 xv6-lab-2023 网络这一节的实验代码(e1000初始化过程)
网页:https://pdos.csail.mit.edu/6.S081/2023/labs/net.html。任务:分析清楚 e1000 网卡的初始化过程 (doing)
2025-02-23 10:54:32
121
原创 valgrind gdb 检测内存访问越界 段错误 Segmentation fault signal 11
更合适的是使用 valgrind。使用 gdb 是通常的做法。
2025-02-14 14:11:57
98
原创 (done) openMP学习 (Day14: 总结)
新手并行程序员与专家并行程序员之间的区别是专家have a collection of these fundamental design patterns in their minds.
2025-02-09 23:33:27
319
原创 (done) openMP学习 (Day13: 线程私有数据和如何支持库(Pi again),蒙特卡洛计算 Pi,线性同余法)
视频:https://www.bilibili.com/video/BV1SW411s7ST?会产生更高的 error 的原因是:想象我们是在一串伪随机数上随机选一段连续的数字作为随机数。那么在并行条件下,我们选取多段连续数字,这些多段连续数字可能会 overlap。这里出现了一个问题:随机数生成器也许不支持并行,从而导致上述代码无法并行。现在 LCG方法 已经实现线程安全了,但是可以看到它的分布和单线程有差别。经过测试:并行时,同样参数生成的伪随机数并不同。使用上述方法,多线程的随机数和单线程一摸一样。
2025-02-09 23:29:36
431
原创 (done) openMP学习 (Day12: Pairwise同步的陷阱)
视频:https://www.bilibili.com/video/BV1SW411s7ST/?将上述例子用OpenMP并行化,如下所示,这个改法有个极低概率的bug,就是flag = 1;关于 pairwise synchronization 的定义如下。一个例子,生产者-消费者模型的例子。
2025-02-09 22:53:00
275
原创 (done) openMP学习 (Day11: 可怕的东西:内存模型,Atomics,Flush(Pairwise同步))
TODO: here。
2025-02-09 20:27:01
168
原创 (done) openMP学习 (Day10: Tasks 原语)
总的来说,首先使用 #pragma omp single 只让一个线程运行,这个线程会循环更新 p 值,随后每次使用新的 p 值创建一个新的线程来运行 process§ 函数。本章节内容仅提供引入,关于 task 更详细的细节请看 openMP 手册或者源材料。总的来说,task 创建一个并行任务,可以并行运行。下面这张图能很好的辅助解释。
2025-02-09 20:14:21
353
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人