并行计算中期复习
并行计算导论中期复习
2024年5月19日
前言/碎碎念
说实话,并行计算课上到现在第13周我大概还是云里雾里的。上课听讲的人也没有多少,以至于我现在感觉自己在“为往圣继绝学”,然而我大概率不是合适人选。
在复习之前我先吐槽一下“大模型代码搜索数据集”的研究,我在这个暗无天日的研究中体悟到了大模型和数据集的玄妙。如果让openai必须二选一,开源他的模型或者开源他的数据集,openai肯定选开源模型而不是数据集。我感觉相比模型,数据集更像资产,你开源个模型,但是不讲这个模型的底层原理和设计,那很多技术还是在自己手里,但是数据集就不一样,直接就是人类脑力劳动堆出来的东西,而且其技术含量远没有模型那么高,开源出去就真的相当于送给别人了。
我们这个数据集要用来发表论文,肯定得开源。我想我们高质量的数据集将给代码搜索领域带来福音,就算我们论文没有成功登堂入室,huggingface社区的人也会非常感激我们。
而且我也意识到了为什么代码搜索会比代码生成冷这么多。我们数据集构建的其中一个步骤是给query生成对应的code片段。如果用GPT4/claude3生成的code已经完全匹配了几乎所有query,这就说明没必要去代码仓库里面搜索相关的代码片段。反而是工程级大项目的代码有必要去搜索,因为大模型现在显然生成不了一整个大项目的代码。当然,目前大模型生成较复杂代码还是不准确的,特别是对于精确的算法很容易犯错……我特别研究了对代码搜索有价值的应用场景(代码生成解决不了的应用场景),得出的结论是:根据自然语言的query去搜索代码片段可能会局限于某些领域或场景(1.复杂逻辑和大规模项目的、2.偏数学和算法的、3.特定领域和前沿技术的、4.对性能和安全要求高的、5.系统级编程和并发编程的、6.特定版本库与API集成和使用的)。
章节
老师的章节安排总体是按照《Introduction to Parallel Computing》这本书来的。
第一章讲了并行计算介绍,分为三个部分:
- 推动并行化的因素
- 并行计算的应用范围
- 课程组织和内容(这个不在书上,不过书上有“本书的组织及内容)
第二章讲了并行计算平台,顺序基本还是按照书上的来,不过章节的层次不是完全按照书上的:
- 隐式并行:微处理器架构的发展趋势
- 内存系统性能的局限
- 并行计算平台剖析
- 并行平台的通信模型
- 并行平台的物理组织
- 并行机器的通信开销
- 消息传递开销模型和路由机制
- 图映射技术
- 案例学习
第三章讲了并行算法设计原则:
- 并行算法介绍
- 任务与分解
- 进程与映射
- 进程vs处理器
- 分解技术
- 递归分解
- 探索性/启发式 分解
- 混合分解
- 任务与交互的特性
- 任务生成、粒度和上下文
- 任务间交互的特性
- 负载均衡的映射技术
- 静态映射和动态映射
- 最小化交互开销的方法
- 最大化数据本地性
- 最小化争用与热点
- 使计算与交互重叠
- 复制vs.通信
- 组通信 vs. 点对点通信
- 并行算法设计模型
- 数据并行、工作池、任务图、主-从、流水线和混合模型
知识点
上面的章节描述来看一下每个部分。
并行计算介绍
推动并行化的因素:
计算能力不断提高→并行计算如何有效利用晶体管?
处理器速度与内存访问速度之间的差距→并行计算如何提供更好内存性能?
计算资源在分布式网络中→如何实现基于通信的并行化计算?
并行计算应用范围:工程及设计、科学计算、商业应用、计算机系统
并行计算平台
隐式并行:隐式并行主要是在硬件(处理器)层面的讲了流水线上的超标量执行和超长指令字两种技术。这些技术是硬件自动实现的,我们在软件层面并没有直接的感知,所以称为“隐式”是合适的。