王昱顺 发表于 2024-12-28 20:01:46

MDU32D测试, 加速7.47倍,更快的AI8H2K12U-B版本的一些注意事项

<h3>最近,新出来的AI8H2K12U-B版芯片增加了重磅的MDU32D功能,许老师也放出了他提前写好的库,正好我就沾沾许老师的光,来测试一下这个MDU32D。</h3>
<h3>因为除法对51芯片的时间影响虽大,所以测试就选取32位的除法,对芯片的加速能力进行测试。</h3>
<p>以下是测试的部分代码和结果:</p>
<pre><code class="language-c">unsigned long ul1 = 123456;
/*计算部分测试*/
EA = 0;//避免干扰
P14 = 1;//开始测试,输出为为芯片1脚
for(cnt = 0; cnt&lt;200; cnt++)//循环200次,增加观测时间
{
        r3 = ul1/3;//得数应该为41152,实际测试计算正确
}
P14 = 0;
EA = 1;//结束测试
</code></pre>
<p><img src="data/attachment/forum/202412/28/194404vsx2shxyesvqnscq.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202412/28/194410no9hllug71jlllcj.png" alt="image.png" title="image.png" /></p>
<h3>通过计算可以得到,MDU32D对32位除法的加速程度是:</h3>
<h2>3.25ms/435us=7.47倍</h2>
<h3>同时,使用MDU32D的时候,还需要注意:</h3>
<p><img src="data/attachment/forum/202412/28/195301ntzrpu7wpp91pt44.png" alt="image.png" title="image.png" /></p>
<h3>最后的4个指令,因为其输出是超过原有函数正常定义的宽度的,所以需要在进入计算前对乘数部分的数据进行保护,计算完成后再恢复出来。否则如果连续计算同一个乘数,编译器会优化掉后一个乘数的加载,造成计算结果错误。</h3>
<p><img src="data/attachment/forum/202412/28/195559xbx2gpb2xib7k3pk.png" alt="image.png" title="image.png" /></p>
<h3>在对16位乘法进行测试的时候,后一个连续运算的数据出现了错误。这里对16位乘法的R4和R5进行保护后,计算结果就正常了。</h3>
<p><img src="data/attachment/forum/202412/28/195849q98qhqs3r1kq0hq9.png" alt="image.png" title="image.png" /></p>
<h3>不过目前float类型的乘法在复杂小数的情况下出现了一些数值偏差,这部分我就不大会改了,可能要许老师亲自操刀来解决了。</h3>

王昱顺 发表于 2024-12-28 20:03:35

以下是目前编译使用的MDU32D Lib库,上传分为源码版本和编译后lib库版本:
(浮点数乘法还有点精度问题(但是我不会修),其他测试都是OK的)

lib库:
源码压缩包:

lgnstar 发表于 2024-12-30 11:21:26

{:quantou:}

East Wind 41 发表于 2024-12-30 11:27:45

牛,向楼主学习.谢谢你的源码.汇编LIB库!看不懂{:yun:}转成C语言多好啊

王昱顺 发表于 2024-12-30 12:52:55

East Wind 41 发表于 2024-12-30 11:27
牛,向楼主学习.谢谢你的源码.汇编LIB库!看不懂转成C语言多好啊

您好,感谢关注。
MDU32D是使用R0~R7寄存器组进行计算的,为了让计算更加高效,所以必须使用汇编。
包括一些压栈弹栈操作,也是只有汇编才能使用的

Ayb_ice 发表于 2024-12-30 14:02:51

应该取随机数来测试

East Wind 41 发表于 2024-12-31 17:16:17

王昱顺 发表于 2024-12-30 12:52
您好,感谢关注。
MDU32D是使用R0~R7寄存器组进行计算的,为了让计算更加高效,所以必须使用汇编。
包括 ...

学习了.谢谢王版主的解答

LAOXU 发表于 2025-2-7 07:39:56

关于 float类型的乘法在复杂小数的情况下出现了一些数值偏差,
===========================================
请举出具体实例(比如 某数*某数 , 应该为 某数, 但实际值不准确),便于跟踪查找原因

Ayb_ice 发表于 2025-2-7 08:27:17

应该不止加速这么点

zhaoye818 发表于 2025-2-7 08:36:09

{:qiang:}
页: [1] 2
查看完整版本: MDU32D测试, 加速7.47倍,更快的AI8H2K12U-B版本的一些注意事项