Home
Li Shi
Cancel

TileLink笔记(一):架构与信号描述

笔记基于1.7.1-draft版本,但TileLink最新版本为1.8.1,最新版本的spec可以在这里下载。笔记中的中文译文引自刘鹏等人翻译的《SiFive TileLink规格书1.7.1草案预发布版本(中文)》。 TileLink是一个芯片级互连标准,允许多个主设备,以支持一致性的存储器映射方式访问存储器和其他从设备。TileLink的设计目标是为片上系统提供一个具有低延迟和高吞吐率...

《内存一致性与缓存一致性》笔记(九):异构系统的内存一致性与缓存一致性

在异构架构中,我们可以在CPU和加速器之间暴露一个全局的共享内存接口,我们假设CPU、GPU等设备共享相同的物理内存(如手机上的SoC这种情况),如下图所示。在这种系统中,共享内存会引发一些新的问题,如什么是内存一致性模型?内存一致性模型如何实现?加速器和处理器的私有缓存如何保持一致?我们接下来首先讨论加速器内的内存一致性和缓存一致性,重点是GPU,然后讨论跨加速器的内存一致性和缓存一致性。...

《内存一致性与缓存一致性》笔记(八):目录一致性协议

我们在上一节中注意到,总线嗅探协议的扩展性较差。我们接下来介绍目录协议,不需要可以保证全局顺序的广播网络。和之前一样,我们先从MSI开始介绍简单的目录协议,然后增加功能并进行优化,进一步讨论更复杂的协议,介绍如何表示目录状态以及如何实现目录协议。 目录协议的关键是建立一个目录,维护每个缓存块的一致性状态,跟踪哪些缓存拥有缓存块以及处于什么状态。需要发出一致性请求的缓存控制器直接发送给目录(...

《内存一致性与缓存一致性》笔记(七):总线嗅探一致性协议

在这一节中我们进一步深入讨论总线嗅探的缓存一致性协议,首先从MSI开始,然后进一步讨论更复杂的协议。总线嗅探基于这样一个想法,所有的一致性控制器都以相同的顺序观察到总线上的一致性请求来保持一致性,因此我们对一致性请求的顺序到达有一定要求。我们考虑下面图中的例子,如果一致性请求的顺序没有保证,可能会出现缓存不一致的情况。 总线嗅探一致性协议的简单例子 传统的嗅探协议在所有缓存块中都保持请...

CONNECT AXI Chisel Wrapper Documentation (Draft)

Introduction The AXI4 wrapper is built over the CONNECT NoC, which is a network generator targeting FPGA. The wrapper supports the following protocols. AXI4 AXI4-Lite ...

CONNECT Note (7) - So... why Chisel?

We define our AXI4 protocol interface as follows. trait AXI4Id extends Bundle with AXI4Parameters { val id = UInt(AXI4IdWidth.W) } class AXI4LiteChannelA extends Bundle with AXI4Parameters { ...

《内存一致性与缓存一致性》笔记(六):缓存一致性协议

我们从这一节开始讨论缓存一致性协议,包括协议的工作原理、如何定义缓存一致性协议、协议的设计空间等。 我们先前已经讨论过缓存一致性协议的目标,具体包括: 单写多读(single-writer-multiple-reader, SWMR)不变性:对任何内存地址A,在任何时间点上只存在一个可以向A写入的内核,但可以存在多个从A读取的内核。 数据-值(data...

《数据并行C++》笔记(六):面向FPGA编程

基于kernel的编程一开始是作为访问GPU的一种方式而流行的,但也慢慢普及到其他类型的加速器上,包括FPGA。为了更好地利用FPGA进行加速,我们需要回答一些问题,如我们应该什么时候使用FPGA、程序的哪些部分可以用FPGA加速、以及应该如何编写FPGA可以运行的高性能代码。在SYCL标准之上,DPC++额外支持FPGA选择器和管道(pipe)。 基本概念 对于传统的基于ISA的处理器...

《数据并行C++》笔记(五):常见并行模式

在并行编程中有一些常见的模式反复出现,这些模式都是通用的,可以在任何级别的并行和任何设备上应用,但我们仍然要考虑这些模式的某些属性(比如可扩展性),可能需要在不同的设备上微调参数,或者直接采用不同的模式来提高性能。我们在本节中主要讨论以下一些问题: 哪些模式是最重要的? 这些模式和不同设备的特性有什么关联? DPC++函数和库已经支持...

《数据并行C++》笔记(四):深入DPC++并行编程

我们继续深入讨论DPC++并行编程,首先我们从任务图开始研究kernel调度的机制以及数据移动的机制,接下来讨论如何将一个大任务分解成一些小任务,用并行的思维去看待问题,最后我们讨论如何有多种方法定义kernel。 Kernel调度与数据移动 图调度 我们之前讨论过依赖关系的概念,包括RAW、WAR与WAW。我们之前讨论过,一个命令组可以包含一个动作、依赖关系以及其他主机代码,其中动作...