Hetcompute Array Processing Example(1)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38498942/article/details/98746714

一、抽象
1)在Tutorial中,介绍了基于HetCompute编程模型下,对数组进行运算。

二、实现过程
1)实例简介:
在这里插入图片描述
以上为main函数部分,初始化matrixDataA数组元素全为1,matrixDataB全为0。接下来使用HetCompute SDK提供的数组操作函数对其进行运算。shutdown()函数的功能为当所有的任务运行结束时,进行close操作。以上三个函数都是在CPU上运行,最后可以返回它们执行完成后所需的时间。在这里插入图片描述
此处通过对API输入参数,实现了对矩阵的初始化。最后通过计算得出所用的时间。pscan_inclusive()的详细实现包含在pscan.hh中,它的前两个参数确定了数组边界,第三个参数则是一个函数声明,将会在后面被当做设定方法来调用。因此使用起来十分便利。
在这里插入图片描述 此处实现的是对数组的迭代,函数原型比较好理解,此处对DataA和DataB同时进行了遍历。相比于用容器和循环,它的操作更为简单,只需要提供所需的数组及其相关参数,便可实现。同理,在最后返回所需的时间。函数中的第三个参数,将作为包装好的引用,在SDK中进行调用,并最终实现对输入数组进行运算并返回,里面涉及到很多的指针调用。
在这里插入图片描述 此处实现了对数组元素进行循环运算,传入参数与以上几个函数类似。最后在init这块实现的运算为:
init = join(init, *(first + k));join为双层指针(第四个参数),这几个函数初次看到都会感觉到复杂,不过追出去之后便可以看到它的具体实现过程,同时函数上方有示例,可以方便使用者理解。
最后在这里提醒下各位读者,在SDK中有大量的同名实现,参数也不尽相同,大家可以可以根据作用域来进行寻找。当然它们大部分之间是相互调用的关系,大家可以整理下它们的调用关系,最终加强自己对于此处的理解。相对于传统的数组操作来说,此处提供的API更加的方便,下面也可以看到它们最后所耗时间,对于程序的优化有很大的帮助。
以上为对三个函数实例进行的简要介绍,它其中的很多参数实现过程用到了模板,同时基于数据类型的优势,因此兼容性和可移植性都很强。另外基于它对方法自定义的优势,也满足了很多开发环境的需求。

三、实验结果分析
在这里插入图片描述 通过以上可以看到,初始化过程所用时间为12ms,迭代所用时间为8ms,数组运算所用时间为7ms。虽然此处的函数参数和实现过程相对来说比较复杂,但不难发现算法的时间复杂度较低,对于大型工程来说,可以有效的实现对程序的优化。

展开阅读全文

没有更多推荐了,返回首页