部件号:XTCIEVMK2LX
工具/软件:TI C/C++编译器
我尝试用“无循环”(无软件流水线)编写一个简单的代码,在我们能达到的最短周期内,只做“两个”1x2 x 2x2复数的复数。 显然,我使用的内部函数的运算次数最少。 当我查看生成的.asm文件时,我发现C6000编译器不会自动使用两端,即使它可以并行运行它们(它们是独立的变量/寄存器)。 它主要发生在装载和存储(D装置)中,同时在M1和M2装置中正确并行执行多路复用。 尽管M2需要使用交叉路径(M2X),因为所有负载只在A侧进行,而存储在B侧。
实际上,我一直在努力通过软件流水线将我的代码中的内部循环最小化,我可以使它完全优化。 我进行单次无循环测试的原因是,我注意到我的代码部分在循环中所用的时间比我优化的内部循环长。 我检查了汇编文件,可以看到编译器不够智能,无法在两端并行处理,这可能会显著减少总周期。
所以,我提出了一个问题:“如何强制编译器使用A侧或B侧来执行某个内部指令?” 我知道有一些方法可以通过解开循环来更好地平衡循环中的寄存器与软件管道,但在“无循环”情况的所有TI文档中我找不到任何有关这方面的信息。 我想知道是否有方法手动执行此操作或强制编译器(可能使用pragma)平衡进程而不使用软件流水线?