Page 485 - 《软件学报》2025年第8期
P. 485

3908                                                       软件学报  2025  年第  36  卷第  8  期


                 算法  4  展示了  DDR  加载到  AM  的乒乓流程, 数据写回     DDR  的流程同理, 在此不再赘述.

                 算法  4. DSP  乒乓算法.
                 输入: 矩阵  A, 模型批次   batch_size, 每个批次的数据量   L;
                 输出: 矩阵  C.

                 1. coreID = get_thread_id();
                 2. offset=min(coreID×L_c, L-coreID×L_c);  //批次内偏移量
                 3. malloc buffer1, buffer2, buffer3, buffer4;  //双缓冲区设置
                 4. FOR m=0 to batch_size DO in parallel
                 5.  A_b = A + m×L + offset;  //每批次单核处理数据
                 6.  if m==0 then
                 7.     ch1 = dma_p2p(A_b, buffer1);  //dma 异步传输
                 8.     dma_wait(ch1);
                 9.     ch2 = dma_p2p(A_b+L, buffer2);  //预取下一批次数据
                 10.   else
                 11.   if m%2==0 then
                 12.    dma_wait(ch1);  //异步等待
                 13.    if m ! = batch_size–1 then
                 14.     ch2 = dma_p2p(A_b+L, buffer2);
                 15.    end if
                 16.   else
                 17.    dma_wait(ch2);
                 18.    if m ! = batch_size–1 then
                 19.     ch1 = dma_p2p(A_b+L, buffer1);
                 20.    end if
                 21.   end if
                 22.  end if
                 23.  if m%2==0 then
                 24.   buffer3 = kernel_compute(buffer1);
                 25.  else
                 26.   buffer4 = kernel_compute(buffer2);
                 27.  end if
                 28. END

                    需要注意的是, 虽然乒乓操作可以通过手动循环预取降低访存延迟, 但双缓冲区的设计也使得                               AM  存储器的
                 实际存储空间减半, 在编程时应该注意分块的大小防止内存溢出. 例如在计算                        softmax  时, AM  存储器需存储当前
                 输入, 下一批次输入, 当前输出, 下一批次输出以及计算中间结果共                   5  个数据块. 此时每个核处理的向量数量应该
                 小于  512  个.

                 4   实验分析

                    本文设计并完成了一系列实验回答以下问题:
   480   481   482   483   484   485   486   487   488   489   490