about Sdsoc_examples

网址:https://github.com/Xilinx/SDSoC_Examples/tree/master/cpp/getting_started

一、Array_partion
1:zero_copy-->Which has Direct Memory Interface with DDR and PL(AXI-master),以前以为只有读+写型数组才可用zero_copy放在共享区,原来只读型数组也可以!
2:硬件函数内部的local memory是由BRAM(最多两个端口:一个时钟最多访问2个位置)实现的!一般将only-read型数组从DDR内burst read给local memory(支持随机访问);将结果写给local memory,然后一次性burst write给结果形参。书上和例子中都推荐这么做。(好像对形参是DDR的才推荐burst read/write?)
3:对每一个for循环,只要loop bound是形参变量,都要使用LOOP_TRIPCOUNT(哪怕两个for使用同一个变量,那么也要LOOP_TRIPCOUNT两次)(如果使用assert是否只要一次?)
4:PIPELINE下级的loops都会自动unroll。但因为A and B are local memorys(DRAM),max port is 2.所以arraypart3不可能自动unroll completely,而是自动unroll 2 times.

arraypart1: for (int i = 0; i < mat_dim; i++) {
#pragma HLS LOOP_TRIPCOUNT min=64 max=64
	arraypart2: for (int j = 0; j < mat_dim; j++) {
	#pragma HLS LOOP_TRIPCOUNT min=64 max=64
	#pragma HLS PIPELINE
	    int result = 0;
	    arraypart3: for (int k = 0; k < MAX_SIZE; k++) {
		result += A[i][k] * B[k][j];
	    }
	    C[i][j] = result;
	}
}


二、burst read and write
1:burst-->到底怎样才叫burst,看第一个例子我以为是将DDR中的数组与local memory直接的读/写才叫burst read/write,但是这个例子不是local memory:

void vec_incr_accel(int *in, int *out, int size, int inc_value){
    calc_write: for(int j=0; j < size; j++){
    #pragma HLS LOOP_TRIPCOUNT min=1 max=2048
    #pragma HLS PIPELINE
        out[j] = in[j] + inc_value;
    }
}

所以应该是DDR中的数组in/out只要是使用类似上述结构read/write都叫burst read/write!

三、custom data type
1:struct-->struct里类型之和一定要是32bit的整数倍!这样能高效率的访问全局变量!所以当自定义的struct不到32bit时一定要凑到32bit,哪怕多增加一个元素

typedef struct RGBcolor_struct
{
  unsigned char r;
  unsigned char g;
  unsigned char b;
  unsigned char pad;
 } __attribute__ ((packed, aligned(4))) RGBcolor;


四、direct connect
1:access_pattern:默认是RANDOM,只有指定为SEQUENTIAL才是流形式访问(从这个例子的注释看也意味着在DDR中)?!
2:burst_write:因为这个例子direct connect与第一个例子array partition都有对乘法的加速,不同之处是array partition中write时是从local memory写道DDR的;而这个例子是直接写到DDR,没有使用local memory。我将这两个例子的乘法硬件函数的输入数组大小都设置成64x64,差别就是第一个例子使用zero_copy优化且使用了local memory进行read/write;而这个例子使用的是access_pattern:SEQUENTIAL优化,只使用了local memory来read,没有使用local memory来write而是直接write。
    当我重新编译并比较这两个函数的报告:函数1的HLS报告latency是12883个时钟,Data motion network 报告的Accelerator Callsites中的Data mover setup time是976,transfer time是14005540;函数2的HLS报告latency是8201个时钟,Data motion network 报告的Accelerator Callsites中的Data mover setup time是1112,transfer time是28524。
    我以为第二种方法使用了流,传输会更快,好像报告显示也是这样哦;我以为第一种方法全部使用了local memory那么函数HLS报告中时钟应该更少,可是却显示更多?!那些官网文档不是都很提倡使用local cache吗说这样很快啊?

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元气少女缘结神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值