首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

第15讲 for循环优化:基本性能指标

在算法建模时,for循环经常被用到(能用for循环就不要用while循环,因为for循环会让代码更紧凑)。因此,Vivado HLS提供了针对for循环的多种优化方法,例如,loop pipelining(for循环流水),loop merge(合并for循环), loop dataflow(设置数据流),unroll(展开for循环),loop parallelism(循环的并行性)等,但更重要的是遵循指定的代码风格,否则这些优化方法将无法使用。例如,如果for循环的边界是个变量而非固定常数,那么将无法使用unroll优化方法。从这个角度而言,最好在算法建模前了解这些基本的代码风格。这些代码风格可在Vivado HLS中看到。具体操作如下:打开Vivado HLS,点击Open Example Project,点击Coding Style Examples,即可看到以loop开头的目录,创建工程即可进一步了解,如下图所示。

03

易语言 取自定义数据类型的大小

先说一下易语言的变量储存机制 易语言有基本数据类型和复合数据类型两种 基本数据类型包括:1. 各种整数 2.各种浮点 3. 逻辑值 他们都是储存在栈上的 大小都是固定的 用不着取 复合类型一般储存在堆上 然后在栈上储存堆上数据的引用 其中有几种比较特殊:字符串 字节集 数组 这两种类型的大小虽然储存在堆上的某个地方 但都有专门的取大小函数 直接调用即可 剩下就是自定义数据类型 比如类或者结构 特别是类 类的数据成员都是私有的 假如你想知道别人写的一个模块里一个类的大小 不可能通过数数据成员的方法得到 那如何取到呢?有人可能提出用“取变量地址”这个函数 可惜的是 “取变量地址”取到的永远是栈上的地址 根据上面所说 栈上地址的内容就是堆上地址 但是易语言没有一个用指针取整数的函数 这就需要用一个系统api:RtlMoveMemory 这个函数跟c语言memcpy的功能一样 但是有了他问题就变得容易的多 声明一个整形变量a  ls是一个自定义的类或者结构 RtlMoveMemory (取变量地址 (a), 取变量地址 (LS), 4) 这样a储存的就是ls在堆区的地址 之后用到一个api:LocalSize 我们都知道堆区内存分配必然用到LocalAlloc/GlobalAlloc 那么也能通过LocalSize取到大小 调试输出 (LocalSize (a)) 之后这样输出的就是ls的大小 当然 相同的数据类型 大小肯定是不变的 每次需要的时候不用都取 取一次之后当常数用就好了

02
领券