HyperLink 编程和性能考量
摘要
Hyper
同时本文还讨论了 Hyper
文章的最后附上对应本文的应用代码。
1、Hyper
Hyper
$Hyper
Hyper
本文还讨论了 Hyper
2、Hyper
本节提供了一些配置 Hyper
2.1 Serdes 配置
Serdes 必须配置成期望的链接速度。 图 1 表示了输入参考时钟和输出时钟之间的关系。
输入参考时钟建议限制在 156.25MHz ~312.5MHz 范围内。Serdes PLL 的倍频系数必须合理配置生成的内部时钟(internal clock) 限制在 1.5625GHz ~ 3.125GHz 范围内。
最后的链接速度由内部时钟(internal clock)驱动,通过
2.2 Hyper
Hyper
图 2 通过 Hyper
在这个例子里面, DSP1 的存储空间映射到了 DSP0 的存储空间窗口 0x40000000~0x50000000DSP0 可以访问 DSP1 的所有内存空间,包括 LL2,SL2,DDR,就像访问自己的本地的存储空间一样。在 DSP0 上,所有的 Master 都可以通过以 0x40000000 起始的 Outbound 窗口地址来访问 DSP1 的存储空间,但是不同 master 事实上可能访问到 DSP1 上不同的存储空间。原因是Hyper
对 DSP0 与 DSP1 的内存映射关系总结在下表(表 1)。
通过上表的配置,可知
当 DSP0 的 core 0/1 访问 0x40800000,它事实上 访问了 DSP1 上的 LL2 地址空间。
当 DSP0 的 core0 访问 0x4D000000,它事实上访问了 DSP1 上 DDR 的地址空间 0x8C000000
当 DSP0 的 core1 访问 0x4D000000 ,它事实上访问了 DSP1 上 DDR 的地址空间 0x8F000000 与本文档对应的范例工程将 Hyper
[page]
对于一些简单的应用,可能只是想访问远程 DSP 的 DDR 空间,那么下面的例子用于这种情况。存储映射关系如下图所示。
图 3 通过 Hyper
这是最简单的例子,但是却可以访问远端$DSP 的大块存储空间。DSP0 上的每个 master(core 或者其他外设) 都可以可以访问 DSP1 上 256MB DDR 空间。下表描述了 core0 和 core1 的对 remote DSP DDR 存储映射。
3、Hyper
本节将让设计者对 Hyper
本文所描述的绝大部分性能数据是在 C6670EVM 上获得。C6670 EVM 上 DDR 配置成 64bit 位宽1333M, Hyper
一些影响 Hyper
3.1 通过 Hyper
下表(表 3)描述了使用 Hyper
上述数据展示了 cache 能够极大的改善 DSP 内核通过 Hyper
但是 L2 cache 却遏制了通过 Hyper
上述 EDMA 吞吐率数据是通过 TC0 (传输控制器 0)和 CC0($通道控制器 0)上测试得到,其他 TCs的数据会比 TC0 稍低。整个传输的瓶颈是在 Hyper
上述测试结果表明通过 Hyper
远程 DSP 存储空间类型不会对带宽造成明显的影响。访问远程 DSP 的 SL2 会比 LL2 快一些。
目前,通过 Hyper
大体来说,对本地存储空间的写入吞吐率是对远程空间进行写入操作的吞吐率的 3 倍。对远程空间的读性能会更差些。我们应该尽量避免远程读取数据。
3.2 DSP core 通过 Hyper
DSP 核通过 Hyper
u 一个单一的元素- 如果存储空间不能被 cache 和预存取。
u 一个 L1 cache line – 如果存储空间可以进入 cache ,但是 L2 cache 没有被使能。
u 一个 L2 cache line -如果存储空间可以进入 cache,同时 L2 cache 被使能.
u 如果存储空间可以被预存取, 预存取将会被使能为一个预存取的 buffer slot.
如果 L1/L2cache 或者预存取命中, Hyper
远程空间数据可以被本地 L1 cache/L2 cache 缓存,或者都没有被 cache。如果对应存储空间的MAR(Memory Attribute Register) 寄存器上的 PC(Permit copy)位没有被置位,那么对应存储区的数据将不会进入 cache。
如果 MAR 寄存器上 PC 位被置位,同时 L2 的 cache 空间是 0(L2 被全部配置成 SRAM),那么外部存储空间的数据可以进入 L1cache。
如果 MAR 寄存器上 PC 位被置位,L2 的 Cache 空间大于 0.那么外部存储空间的数据就可以进入 L1cache 和 L2cache。
读取远程存储空间数据也可以使用 XMC 中的 prefetch buffer。该特性可以在 MAR 寄存器PFX(PreFetchable eXternally)被置位后使能。
地址步进长度也会影响 Cache 和 Prefetch buffer 的使用效果。连续空间的访问可以最充分的利用cache 和 prefetch buffer,从而达到更好的性能。
以 64bytes 距离或者更大间隔进行步进访问将会导致每次 L1 cache 命中失败(miss),这是因为L1 cache line 的大小是 64byte。
以 128bytes 距离或者更大间隔进行步进访问将会导致每次 L2 cache 命中失败(miss)。
如果 cache miss 发生,那么 DSP 核就会被 stall(等待数据)。Stall 的时间长度等于传输延迟、传输间隔,数据返回时间,cache 请求延迟的总和。
下面的章节描述 DSP 内核通过 Hyper
下图(图 4)为 1GHz C6670EVM 上配置 DDR 64bit 1333M 测试获得的结果。通过 Hyper
Non-cachable 写是 post 操作。所以它只会 stall DSP core 很短的一段时间。
但是 read 是 non-post 的,所以 DSP 内核会等待数据的到来,所以它会 stall DSP 内核相对长一点时间。
当 cache 被使能后,DSP core 访问 remote 空间的吞吐性能高度依赖于 cache。
地址的步进间隔也会影响到 cache 的使用。连续的地址访问可以充分的利用 cache。但是地址的步进间隔超过 case line 的大小(L1 case line =64Byte,L2 Case line =128Byte)将会导致每次cache 都无法命中,从而制约了性能。所以,对连续地址空间的数据访问(像大块数据拷贝),cache 需要被使能,在其他情况下 cache 应当不要使能。
通过上面的图可以发现通过 Hyper
[page]
3.3 Hyper
初始延迟被定义为 EMDA 事件触发到真实数据之间的传输开始之间的延迟。因为初始延迟很难被测量。所以我们就测试传输的开销,它被定义为传输最小单元数据的延迟 。延迟的大小取决于源和目标端的类型。下表描述了使用 EDMA 在 1GHz TCI6618EVM 不同端口间传输一个字(word)时,从 EDMA 触发(写 ESR)到 EDMA 传输结束(读 IPR=1)的平均指令数目。
表 6 中,读 Hyper
对于小批量数据传送,传输开销(overhead)是很大的顾虑,尤其是系统中队列 DMA 阻塞的时候。单一元素的传送性能较差,延迟会占用大部分时间。所以,对于小批量数据传送,必须对使用EMDA 方式还是 DSP 核方式来访问数据进行权衡。使用内核来访问单个随机数据的延迟会比DMA 方式延迟小很多。本文 3.2 节已经做了详细的描述。
3.4 Hyper
一个 DSP 可以通过 Hyper
测试是在 Loopback 模式下测试。
1GHz C6670 的测试结果是 大概 710 个 DSP core cycles。
4、范例工程
本文的范例代码在 C6670EVM 上通过测试。EVM 板子上有两个 C6670 DSP,他们通过Hyper
在这个例子中,DSP1 存储空间通过 Hyper
本例也演示了通过 Hyper
工程代码的目录结构如下图所示。
图 7 工程代码目录树
该示例代码同样可以在其他 KeyStone DSP EVM 板上运行。只是如果板子上只有一个 DSP 芯片,那么只能运行 loopback 模式。
下表列出了 KeyStone 工程的关键代码列表。
运行这个范例工程的步骤:
1. 连通 CCS 与 DSP EVM.
2. 下载代码到 core 0 of DSP0.
3. 下载代码到 core 0 of DSP1.
4. 先运行 DSP1 , 然后运行 DSP0. (如果 EVM 上只有一个 DSP,且运行在 loopback 模式下,那么直接下载到 DSP0,再运行)
5. 检测每个 DSP 的 stdout 窗口,验证测试结果。
典型的输出信息如下:
用户可以在 Hyper
这个例子是在 CCS5.1 下编译,使用 pdk_c6618_1_0_0_5。如果在你的电脑上进行重新编译新的配置,你可能需要修改 csl 包含路径。
参考资料
1. KeyStone Architecture Hyper
2. TMS320C6670 datasheet (SPRS689)
本文由大比特收集整理(www.big-bit.com)
暂无评论