随机线性网络编码与无线网格创新测试平台的技术探索
随机线性网络编码的CUDA实现
在GPU上实现随机线性网络编码时,GF(28)上的乘法和除法操作较为复杂。若每次都通过循环方式计算结果,会浪费大量时钟周期。更好的办法是预先计算结果并存储在表中,由于字段大小为28 = 256,乘法和除法表各占256x256字节 = 65 kB,可存储在图形内存中,并绑定到CUDA纹理引用,以便快速查找数组。
编码过程
编码本质上是GF域中的矩阵乘法,可视为高度并行的计算问题。在CUDA中,GPU只能访问图形内存,因此所有系数和原始数据包需先从主机传输到图形内存,编码结果也需从图形内存传输回系统内存,不过CUDA提供了高效的内存管理功能。
关于线程任务划分,若为每个编码数据包启动一个线程,并行度不够。更优的方法是每个GPU线程仅编码编码数据包的单个字节,这样编码整个一代数据包需要L×N个线程。进一步优化可按4字节块处理原始数据包数据,每个线程负责计算编码数据包的4字节块(即32位整数),此时整个一代数据包需要N×L/4个线程。CUDA编码实现使用CPU生成的随机系数,并在编码开始前传输到图形内存,方便与基于CPU的实现结果进行比较。
编码过程操作步骤如下:
1. 生成随机系数并从CPU传输到图形内存。
2. 将原始数据包从主机传输到图形内存。
3. 启动线程进行编码,每个线程负责一个字节或4字节块。
4. 将编码结果从图形内存传输回系统内存。
优化方法 | 线程数量 | 优势 | <
---|