SparkleComm视频会议与面对面会议对比

我们的工作生活从未如此迅速地转变。经过数年(或在某些情况下是数月)的全职远程工作,现在很多人工作在混合时间表中,我们在办公室和家庭之间分配时间。

这种新的动态提出了一个有趣的问题:举行会议的最佳方式是什么?你应该去办公室吗?或者从家里的笔记本电脑加入?

enter image description here

借助SparkleComm视频会议,团队可以通过互联网连接在世界任何地方开会——该工具对于在世界各地拥有关键成员的企业或提供虚拟学习的教育系统非常有用。

另一方面,面对面的会议将参与者带到同一个物理房间。这是一个建立更密切关系并使用社交线索进行交流的机会。 那么哪个会议更好呢?让我们对比两者的优点:

  SparkleComm视频会议的好处

与面对面会议相比,SparkleComm视频会议有几个主要优势:

  1. 降低成本 

SparkleComm视频会议降低了会议成本。通过SparkleComm视频会议,无需大型会议室、复杂的技术设置、差旅费或与为参与者提供小吃、膳食或饮料等便利设施相关的费用。

  1. 更高的可访问性

SparkleComm视频会议减少了典型的进入障碍,例如旅行或时区不兼容。参与者可以从任何支持我们的设备轻松加入,从智能手机到平板电脑再到笔记本电脑。 

无论您是在酒店房间还是坐在日光浴平台上,都可以使用SparkleComm视频会议

3.记录和分享能力

SparkleComm视频会议工具允许您录制会议以供按需查看。对于那些不能在指定时间参加会议的人,录音提供了一种在用户方便的时间和地点从提供的材料中受益的方法。

录音还允许参与者根据需要查看会议点。这对于共享许多要点的重要会议特别有用。易于访问的录音使您的听众能够回顾对他们的工作特别重要的需要他们审查的要点。 

4.其他优势

SparkleComm视频会议期间,演示者可以在屏幕上共享视频和文档。这使参与者比他们在大房间的一个屏幕上获得的可见性更好。屏幕共享还使您能够进行交互式会议,让多个协作者轻松共享。

说到协作,您还可以在SparkleComm视频会议期间促进分组会议,将员工分成较小的房间,以便与工作团队协作或参加团队建设会议。

  面对面会议的好处 

1.更多“在当下”

面对面会议的参与者往往会更加专注和“出席”会议。由于对周围环境的干扰较少,参与者和演示者可以阅读肢体语言提示并根据需要进行调整,以澄清或扩大正在讨论的要点。

  1. 更具协作性

面对面的协作更简单,因为员工可以聚集在一起并在交谈时物理共享文档和资源。您不必担心视频会议礼仪,例如在适当的时间将麦克风静音和取消静音。

  在SparkleComm视频会议或面对面会议之间进行选择

充分了解SparkleComm视频会议和面对面会议的优点后,是时候决定什么适合您的业务了。

在以下情况下选择SparkleComm视频会议

您有来自不同时区或位置的参与者加入。对于来自不同时区的参与者来说,面对面的会议是不切实际的。

你想节省旅行费用。即使对于同一时区的参与者,差旅费用也会迅速增加,使面对面会议的成本过高。

您的会议有很多参与者。会议中的参与者越多,将他们全部聚集在一个物理位置就越困难。

你想在短时间内见面。如果您的工作文化依赖于自发的团队聚会,那么您需要灵活地随时随地将人员包括在内。

在以下情况下选择面对面会议: 

会议意义重大。如果您有知名客户、有大客户来访,或者会议中心的项目很重要,那么面对面的会议可能是您的最佳选择。

你想建立更密切的关系。如果您想在团队成员之间或您的团队与客户之间建立更密切的关系,面对面的会议可以帮助您创造更加个性化的体验。

  您的业务,您的选择

您的公司必须决定哪种会议形式最适合您的工作结构和文化。您甚至可以根据您的业务需求随时选择两者。 

在当今的混合工作模式中,您可能会发现两者都需要,一些员工远程加入,而另一些员工则在办公室参加。当今SparkleComm视频会议技术的美妙之处在于它为您提供了这种灵活性。  

SparkleComm通过强大的通信平台集成解锁数字客户参与

劳格科技,我们热衷于使公司能够与客户建立智能、个性化的联系。

多年来,我们一直提供呼叫中心解决方案,为世界上一些最大的以客户为中心的品牌的客户服务功能提供支持。首先是为客户提供市场领先的语音质量,以便在他们需要高接触支持时通过电话参与。但今天,客户想要的远不止这些——他们想随时联系,不仅通过语音,还通过任何数字渠道。有时他们想直接与实时代理进行交互,有时他们只想与智能虚拟代理发送消息以获得快速响应(这里的关键词是智能)。

enter image description here

我们在呼叫中心产品组合中的最新创新之一是将市场领先的通信平台即服务 (CPaaS) 解决方案SparkleComm集成到我们的呼叫中心产品中。通过将通信平台即服务 (CPaaS) 和呼叫中心即服务 (CCaaS) 结合在一起,我们创建了一个强大的SparkleComm解决方案,使公司能够协调全渠道、互联的客户旅程。

SparkleComm呼叫中心提供了一个低代码环境,允许企业以集中方式跨数字渠道协调客户旅程。联络中心专业人员可以使用其强大的可视化工作流程设计工具来轻松协调他们想要提供的客户体验。该工作流工具还将吸引软件开发团队,因为他们可以将其与丰富的 API 集结合使用,以创建更高级的应用程序。

SparkleComm呼叫中心集成允许您创建融合了人工智能的上下文客户旅程,将自动化和人工辅助交互连接起来

除了创建客户旅程工作流程外,公司还可以启用人工智能驱动的机器人,通过包括聊天、文本和社交消息在内的数字渠道自动与客户进行智能和个性化的交互。

使用 SparkleComm,公司可以轻松创建问答机器人和任务机器人。顾名思义,问答机器人使用基于现有知识库的人工智能和自然语言处理 (NLP) 提供常见问题的答案。任务机器人可以自动化与业务系统的交互,例如检查账户余额、最近的交易、下订单、确认发货状态或安排或取消约会。

虽然需要通过工作流和人工智能驱动的机器人进行交互自动化以提高客户满意度并减少联络中心座席的负载,但许多用例在某些时候需要将联系转移给人工座席以获得额外支持。SparkleComm呼叫中心提供从数字自动化到实时座席交互的无缝过渡,完整的客户上下文被传递到SparkleComm呼叫中心座席桌面中的座席。SparkleComm呼叫中心 座席桌面上的统一收件箱已扩展,使座席能够处理数字渠道联系人以及语音呼叫。

更新后的SparkleComm呼叫中心解决方案还提供有关数字渠道交互的报告和分析。此外,SparkleComm呼叫中心中显示的旅程数据洞察力可以捕获全渠道客户旅程的每一步和细节——浏览公司网站时的相关活动、机器人交互、销售或 CRM 系统上的新交易,甚至是与联络中心的最新交互代理。公司可以使用从这些客户旅程洞察中获得的丰富数据来推动更好的客户体验。

直接的一级 SMS 提供商关系意味着我们的客户具有更好的可靠性、可扩展性和更低的渠道使用成本

我们与所有一级运营商都有直接关系,不像其他供应商必须依赖中间商、额外的潜在故障点和延迟来提供类似的功能。 从客户的角度来看,这种独特的SparkleComm通信增值转化为更好的可靠性、可扩展性和支持,并且同样重要的是降低了该地区客户的使用成本。

虽然我们对通过SparkleComm通信平台即服务(CPaaS) 和 呼叫中心即服务(CCaaS) 集成推向市场的创新感到兴奋,但我们并没有就此止步。SparkleComm将继续扩展解决方案及其功能集,为客户提供更多价值。

什么是SparkleComm呼叫中心交互式语音响应?

交互式语音响应 (IVR) 是一种电话菜单系统,允许呼叫者使用拨号盘进行识别、分段和将他们的呼叫路由到团队中最合适的座席。

enter image description here

SparkleComm呼叫中心 IVR 并不能取代对现场座席的需求,但它是一种提高客户满意度的方法,同时让座席可以处理具有更复杂问题的呼入电话。

SparkleComm交互式语音响应系统通过向呼叫者提供预先录制的消息来工作,使他们能够自行找到答案并处理各种简单的任务(付款、重置信号等)。

SparkleCommIVR 技术在高通话量时派上用场。即使是人手最充足的联络中心有时也会变得不堪重负,当这种情况发生时,拥有SparkleComm IVR 系统可以缓解呼叫拥堵,同时仍保持客户满意度。当然,并非所有问题都可以通过录音甚至交互式虚拟代理来处理。这就是为什么SparkleComm IVR 技术还能够识别呼叫者的需求并将他们连接到最佳联络中心座席以处理他们的问题的原因。这种呼叫路由功能对客户和呼叫中心代理都有好处。

SparkleComm IVR 是如何工作的?

即使是最简单的交互式语音应答系统也具有相同的基本功能。当客户或潜在客户到达呼叫中心时,他们首先会收到预先录制的欢迎信息。这是 IVR 菜单的第一步呈现给呼叫者的时间。

呼叫者有多种选择,他们的决定将决定他们呼叫旅程的下一步。例如,SparkleComm IVR 系统可能首先询问一个人是否有计费问题或技术问题。他们的选择会将他们引导至正确的菜单,在那里他们将收到额外的选项或转发给代表。

来电通常以两种方式遇到 IVR 菜单选项。最基本的使用双音多频(DTMF)信令。这允许根据呼叫者在其拨号盘上按下的号码来引导客户呼叫。计算机识别被按下的按钮并适当地处理呼叫路由。

另一方面,定向对话系统使用语音识别来引导呼叫者进一步选择适当的菜单选项。作为更先进的系统,SparkleComm IVR 软件利用自然语言语音识别和人工智能技术来理解呼叫者的完整句子,而不是几个预设的标识符。

什么是 IVR 菜单?

SparkleComm呼叫中心 IVR 中,迎接呼叫者的菜单是这项技术最重要的方面。它将决定整个通话过程中的整个客户体验。呼叫者将看到 IVR 菜单选项,允许他们通知系统他们的问题,初始菜单选项通常非常简单。

例如,呼叫者可能会得到一个选项,例如“如果您是当前客户,请按 1,如果您需要注册,请按 2”。电话菜单——通常被称为“电话树”——允许打电话的客户轻松地在系统中移动。

交互式语音响应系统允许您自定义客户体验。并非所有业务都相同,因此能够记录您自己的 IVR 系统选项很重要。当然,这并不总是必要的。这就是为什么 SparkleComm还提供可用于 IVR 菜单的预录消息。

无论您走哪条路线,主要目标都是确保正确引导客户呼叫。无论这意味着允许客户输入他们自己的付款详细信息还是将其转发给升级团队,正确的 SparkleComm IVR 系统都可以完成工作。

为什么要使用SparkleComm IVR

公司应该使用SparkleComm IVR 电话系统的原因有很多,即使是SparkleComm呼叫中心 IVR 的最基本功能也清楚地说明了为什么每个企业都应该考虑这项技术。

最明显的原因之一是缓解联络中心的拥堵。大量来电可能会使客户处于等待状态,呼叫中心代理会急于帮助每个需要帮助的人。

SparkleComm IVR 系统为客户提供自助服务选项,即使在工作时间之外,他们也可以获得常见问题的帮助并找到常见问题的答案。

联络中心还可以通过从您的座席中删除重复性任务来从交互式语音响应系统中受益。研究表明,全球三分之二的办公室工作人员对可以自动化的重复性任务感到负担过重。除了复杂的问题外,处理这些琐碎的任务可能会使员工的士气难以维持。最后,这会对生产力和效率产生负面影响。通过使用基本的SparkleComm交互式语音响应系统,您可以缓解此问题。

变焦疲劳:它是什么以及如何缓解它

什么导致变焦疲劳?

变焦疲劳是过度视频会议引起的一种精神紧张。像电脑眼睛疲劳一样,变焦疲劳部分是由盯着电脑(或智能手机)屏幕引起的。它还在某些方面对大脑造成负担,包括缺乏视觉线索和过度刺激。

enter image description here

身体语言,暗示

您可能没有意识到您对肢体语言和其他线索的依赖程度,这些线索很容易亲自接受,但通过SparkleComm视频会议很难或不可能。同样,许多人依靠某种形式的唇语来帮助他们更好地“听”。如果视频和音频不匹配,也会对大脑造成严重破坏。

你的肢体语言也有影响。当你们都在同一个房间里时,即使你瞥了一眼窗外或查看你的笔记,人们也会明白你仍然在集中注意力。但是,如果您在SparkleComm视频通话中没有直视摄像头,则可能看起来您没有在听。但是不断地盯着同一件事看是不自然的,而且也会非常消耗精力。

视觉刺激

通过视频接受所有视觉刺激也比亲自接受更具挑战性。 据报道,“画廊视图——所有会议参与者都出现布雷迪邦奇风格——挑战大脑的中心视觉,迫使它同时解码这么多人,以至于没有人有意义地通过,甚至是演讲者。”

中断

最后,不可能像在会议室里那样进行旁白或要求查看邻居的笔记,而且很难插话。不断的错误开始和相互交谈会扼杀势头。

如何缓解变焦疲劳

缓解或避免变焦疲劳的方法都是减少大脑疲劳。方法包括减少视觉刺激、保持专注和经常休息。下面的提示也可以帮助进行面对面的会议。

保持SparkleComm视频会议简短而集中。理想情况下,它们不应该连续运行超过一个小时。如果是你的会议,制定明确的议程;如果是其他人的会议,请索要摘要。参加SparkleComm视频会议时避免进行其他活动。

不说话时关掉相机。这样,您就不必担心自己在看哪里或做出什么样的表情。转到设置>视频>加入会议时关闭视频以开始没有视频的SparkleComm会议。如果您必须在镜头前,请隐藏自己的视频,这样您就不必担心分心。

如果可用,请使用演讲者视图而不是网格或画廊视图,这样您就不必一次看到所有人。

经常休息电脑。在会议前后安排时间,以远离屏幕。

限制SparkleComm视频会议。在选择SparkleComm视频通话之前,弄清楚你通过聊天、电子邮件或常规电话所做的事情。与您的同事一起安排一周中没有任何视频会议的日子,以便每个人都可以专注于其他工作。

减少会议规模。限制您的邀请列表有助于保持SparkleComm视频会议简短而集中。如果您必须举行大型聚会,请考虑使用分组讨论室。

ArrayFier:一种GPU加速平台

ArrayFier:一种GPU加速平台

论文译文

外文原文题目:ArrayFire: a GPU acceleration platform

中文译文题目:ArrayFier:一种GPU加速平台

原文作者:James Malcolm, Pavan Yalamanchili, Chris McClana- han, Vishwanath Venugopalakrishnan, Krunal Patel, 和 John Melonakos

所属单位:Emory University、Gujarat Power Engineering and Research Institute、ArrayFire等

译文作者:岳昕阳

所属单位:重庆劳格科技有限公司

原文发表于:researchgate网站

https://www.researchgate.net/publication/258716823_ArrayFire_a_GPU_acceleration_platform

版权所有 非授权谢绝转载  

摘要

ArrayFire是一个可以利用C、C++、Fortran和Python语言实现通用型GPU(general purpose GPU,GPGPU)计算应用程序的快速软件开发的GPU矩阵库。ArrayFire包含一个简单的应用程序编程接口(API)并且为CUDA框架和支持OpenCL的设备提供完整的GPU计算能力。它同样还可以提供数千种GPU调谐功能,包括线性代数、卷积、约减与快速傅立叶变换(FFTs),同时还提供信号、复数、统计学与制图学库。我们将进一步描述ArrayFire是如何支持GPU计算应用程序的开发的并且将着重介绍其中一些关键功能在实际代码操作中如何实现。

关键词:CUDA,GPU,GPGPU,ArrayFire,OpenCL



1.介绍

ArrayFire是一个搭建在AccelerEyes网站上的软件平台,它可以为使用者和编程人员提供C、C++、Fortran和Python语言的快速并行数据程序开发,并且在低级GPU应用程序编程接口(例如CUDA、OpenCL和OpenGL)上提供一种简单的高级矩阵抽象,再加上利用数千种GPU调谐组件,可以为使用者在科学、工程、金融等方面保持GPU硬件的完整优势。由于同时拥有使用简单的阵列界面、自动内存管理功能、程序运行中编译功能、用于构造环的并GPU和交互式硬件加速图像库,ArrayFire可以很好的完成并行数据算法的快速原型设计任务与构建已经部署的应用程序任务。


过去十年间,消费者和计算机开发人员对GPU的需求快速上升,尽管成功案例越来越多,GPU软件被开发出来后被采用的数量却只有缓慢的提升。采用量提升缓慢的原因主要是GUP编程较为困难


Cg、GLSH、HLSL和Brook语言的出现标志着流编程开始出现,而流编程语言又是通用型GPU编程的前身,而通用型GPU会将运算映射到图像管道进而导致收到各种限制。随着这些技术的发展,CUDA和OpenCL介绍了一种更加综合性的可编程软件结构,这种结构比流编程更简单,但是也比标准的单线程C/C++更难编程。然而,就算是新的可编程软件结构有这么多优点,绝大多数编程人员依然需要花费大量的时间学习CUDA、OpenCL等新语言才能完成一次成功的编程。


有几家私人企业同样打算达到这些目的。首批这样的公司之一,PeakStream创建了一个C/C++的运行时间和提供大量GPU构造工具集的函数库。RapidMinds公司创建了一个灵活的支持多种前端语言和多种后端硬件目标的中间层。这两项尝试都打算帮助开发人员去更好的控制硬件。而ArrayFire作为最新的GPU构造平台,打算把高级功能移植到底层硬件上去,最终实现在不牺牲整体性能的情况下,提供可编程性与可移植性。




2.ARRAYFIRE



2.1语言支持:C++、Fortran、Python

ArrayFire围绕单个矩阵对象(阵列),此矩阵可以容纳浮点值(单或双精度)、实数或复数值和布尔数据。以下是一个展示如何使用矢量化ArrayFire表示法利用蒙特卡罗估计表示π的值:创建两个向量样本(x,y),并计算有多少落在单位圆的一象限内。

enter image description here 图1 使用ArrayFire利用随机取样法估算π的值


ArrayFire的阵列式是多维度的,可以通过简单的矩阵生成函数例如(ones、randu等)生成,而且可以通过算法和函数进行操纵。另外,ArrayFire提供一条并行for循环工具——gfor——可以以并行数据的形式任意执行许多独立历程。更多细节和例子已经上传到网络上。



2.2例子:立体视差

enter image description here 图2 使用ArrayFire通过平面扫面和5-by-5相关窗口计算两个图像之间的水平差距。所有视差计算和最终最小值都是并行执行的,而且执行时保证源代码是简单且不被更改的,不需要深入到低级GPU的应用程序接口中。


在上方展示的简易例子中(图2)我们展示了两张图片之间立体视差的计算方式。这段代码可以在任何支持ArrayFire的设备上运行,而且由于不需要类似于CUDA或OpenCL的低级GPU编程API而保持了简明。ArrayFire通过使用平面扫描和5-5相关窗口实现水平差计算。所有差值计算与最终最小值都是并行执行的,且源代码可以保持干净简洁而不涉及到低级GPU应用程序编程接口。


程序是被逐行的描述的,left、right和sad的声明表明我们将使用4位浮点阵列而且left和right是我们已经获得的图像。我们假定所有阵列大小相同。我们还创建了核,一个单精度5-5滑动窗口(sliding 5-by-5 window)。


第二行利用gfor关键词表示了我们将并行运算一下模块从0到nshift共nshift+1次。所有后面的指令依然只读区一次,不过每条指令都将调用nshift+1次计算而不是只调用一次。因此,下一个指令将right图片移动一个像素、两个像素、以此类推,然后将结果(如果立刻编译并执行)作为把手(handle)储存在变量shifted中。剩下的命令行将在一个5-5的滑动窗口中计算两个图片之间的绝对差值的和。最后,就得到了所有计算所得绝对差值的和的最小值。需要注意的是在执行期间,Array Fire编译指令可以惰性编译,也就是说,前面提到的所有操作可以合并成一个GPU执行批次并派发给GPU。




3.惰性编译

ArrayFire使用了一种名叫惰性编译的技术(有时也被称为及时计算,Just-In-Time computation,JIT)用于尽可能提升用户程序的运行速度。这项正在申请专利的技术在保证了灵活性的情况下既可以在运行中生成计算设备代码又可以优化内存传输以达到最大流率。


在GPU上执行运算程序最简单的方法就是在用户输入/运行代码的时候在GPU上执行每个操作。这是可行的,而且可能加快运算速度,但并不是理论上最快的。


每当ArrayFire端口连接到GPU都需要耗费一些时间。除了计算实际耗费的时间外,设备之间通讯和GPU通讯同样会消耗时间。ArrayFire将追踪用户正在进行的计算并储存公式、输入值与最终结果,当需要执行命令时,ArrayFire将直接给出结果而不是再次进行计算以此来使第二次执行的速度更快。


考虑以下代码: enter image description here 在后台程序中,ArrayFire将建立这些部分表达式,但在实际计算任何设备代码时: enter image description here 在计算C之前I是否更改无关紧要,ArrayFire持续追踪输入源头,而你将总是得到正确答案。每当你需要C的值,它都将自动进行运算。由于对C的计算可以作为单个核进行批处理而不是把里面的每个式子都执行一遍,这种处理方式相对于把每一步都交给GPU处理一次来说节省了时间。ArrayFIre利用这些信息进一步优化更大图片的计算版本,否则一条一条执行操作将变得不可能。你能从其中得到的另一个优点是在你代码里运行计算了一个,你实际上永远不会使用的值时,ArrayFire可以直接跳过它。如果计算C所需要的内存开始不足或者计算过程开始变得极端复杂,ArrayFire也可以自行预计算C的一部分。




4.索引

ArrayFire提供了几种灵活高效的方法,用于将下标索引进数组。和C/C++、Python以及Fortran相同,Array Fire的下标也是从0开始的,即A(0)是第一个元素。索引功能可以通过以下方法的组合实现: ·整型标量 ·seq 表示线性序列 ·end 表示维度的最后一个元素 ·span 代表整个维度 ·row(i)或col(i)指定单行或单列 ·rows(first,last)或cols(first,last)指定行或列的跨度。


下标阵列索引举例: array A = randu(3,3); array a1 = A(0); //首元素 array a2 = A(0,1); //首行第二列元素


A(end); //最后一个元素 A(-1); //也表示最后一个元素 A(end-1); //倒数第二个元素


A(1,span); //第二行 A.row(end); //最后一行 A.cols(1,end); //除了第一列的全部


float b_host[] = {0,1,2,3,4,5,6,7,8,9}; array b(b_host,10,dim4(1,10)); b(seq(3)); //{0,1,2} b(seq(1,7)); //{1,2,3,4,5,6,7} b(seq(1,2,7)); //{1,3,4,7} b(seq(0,2,end)); //{0,2,4,6,8}


在考虑性能时,数组索引很重要。因为内存的移动与重排操作代价昂贵,很容易就会让对下标的索引操作吃掉你从其他地方利用快速运算获得的加速。与我们需要尽量避免利用下标访问标量值相反,下标可以表示整个向量或元素矩阵。数据是被按列以主顺序存储(与Fortran相同),因此我们建议以连续的跨度按列索引,例如调用一整列A(span,a),而不是分散访问,例如调用那些跳过元素之间内存的行A(2,span)。你可以在网络上找到更多例子。




5.图形

除了通用型计算之外,GPU也是最快最重要的图像处理器。基于这一事实,ArrayFire附带了免费的和用于商业用途的软件包。ArrayFire比较独特的一点是,他的图形引擎是在考虑了GPGPU的基础计算的情况下从头开始设计的:所有的原语都是从卡上的内存里提取。因此,所有的计算与可视化处理都由GPU处理,省去了在主机CPU与设备之间内存转换的步骤。让GPU去做那些他擅长的工作,比如并行数据处理和图像输出,而CPU则负责一系列计算和图像后端的定位。

enter image description here 图3 潜水模拟中场景的各个子视图。

图像包包含了几种基础绘图原语,其中有: ·2D与3D线性绘图 ·立体渲染 ·用于比较分析的叠加图 ·图像可视化 ·其他还有很多


图像后端的工作应该简单一些,这样你才能集中精力解决问题,而不是把精力花在OpenGL或多线程实现等这些问题上。比如要画出图三所示的图像,只需要以下几条简单的C++代码: subfigure(2,2,1); plot3d(A); subfigure(2,2,3); imgplot(A); subfigure(2,1,2); points(dx,dy,dz);




6.GFOR

ArrayFire提供仅用于GPU的并行数据循环关键词:gfor。在代码中用gfor代替标准for 循环对批进程数据做并行数据处理。比如,如果我们使用for循环计算几个矩阵连续相乘需要以下代码:

for(int I = 0; i<2 ;i++){ C(span,span,i)=A(span,span,i)*B; }


同样的三个矩阵相乘的运算,使用gfor可以一次完成而不是三次。

gfor(array i,2){ C(span,span,i)=A(span,span,i)*B; }


与前一个循环连续计算了每个矩阵乘法运算不同,后一个循环一次性完成了所有矩阵乘法运算。与之相同的,gfor可以直接用于其他类似的麻烦的并行代码。一个考虑gfor的好方法是将它视为一个语法糖(syntactic suger):gfor提供一个用于编写其他矢量算法的迭代风格。




7.多GPU互联

ArrayFire可以仅通过调用很少几条函数实现单GPU到多GPU互联的扩展配置。我们可以通过调用函数deviceset()来选择用来运算的GPU。此函数将给出允许调用ArrayFire的GPU的数量。为了同时在多个GPU上运行计算,我们将输入数据进行分块(如果必要)并将数据块分发给每个GPU。通过在循环中调用deciceset()函数来选择系统中的GPU并创建array对象可以实现上述目的。

enter image description here


然后是另一个循环,此循环调用快速傅立叶变换(FFT)函数对每个单独的数据块进行处理,所有运算过程都在系统中的各个GPU上并行运行。 enter image description here


ArrayFire同样提供同步函数sync(),此函数可以阻止主线进程直到所有其他设备结束等待中的所有函数调用。为了将数据返回给主机,我们运行另一个循环将数据传送给主机上的缓冲区。 enter image description here


如上所述,利用Array Fire中非常友好的API可以非常简单的将单个GPU扩展到多GPU并行。




8.基准

ArrayFire很快。它利用GPU的并行数据处理能力获得比其他已知的所有商业用途或免费的库更强大的性能优势。我们对Array Fire支持的大量功能进行了样本基准测试。所有曲线都表示吞吐量,更高的曲线则表示更好的性能。所有测试均在以下标准下测试: ·硬件:Intel i7 920, Tesla C2050 ·软件:ArrayFire 1.0, Intels MKL 10.3, Intels IPP 7.0, Eigen 3.0. enter image description here enter image description here enter image description here enter image description here enter image description here




9.总结

新的软件工具与基于GPU的高性价比电脑的出现,为研究技术问题的科学家、工程师和分析师开创了一个新的时代。这篇文章描述的ArrayFire平台为那些正在寻找利用GPU计算能力的非计算机科学家提供了更加高效的选择。ArrayFire是一个快速GPU矩阵库,可以用C/C++ 、Fortran和Python语言编写通用GPU计算程序。本文展示了Array Fire的简单的API,并描述了为何它能快速构造GPU运算应用程序。ArrayFire实用性的关键元素是一边进行文字描述一边利用实际代码举例。最后,我们的测试结果展示了ArrayFire提供了一种快速的GPU计算方法。




参考文献

[1] AccelerEyes. Addr.: 800 W Peachtree St NW, Atlanta, GA 30308, USA. URL: http://www.accelereyes.com.

[2] Andy Webb: “MATLABs Racing Jacket”. Automated Trader, vol. 16, no. 1, pp 54–61. 2010.

[3] AccelerEyes: “Jacket v1.7.1: Getting Started Guide”. URL: http://www.accelereyes.com/services/documentation

[4] Mark Harris, “Optimizing CUDA”. SuperComputing 2007 Tutorial, Reno, NV, USA. November 2007.

[5] V.Volkov and J.W.Demmel,“Benchmarking GPUs to Tune Dense Linear Algebra”. SC ’08: Proceedings of the 2008 ACM/IEEE conference on Supercomputing, pp. 1-11, Austin, Texas, USA, 2008.

[6] Torben’s Corner. Available at the Wiki of AccelerEyes at: URL:http://www.accelereyes.com/wiki/index.php?title=Torben’s_Corner.

[7] nVidia, “CUDA programming guide 1.1,” Available at http://developer.download.nvidia.com/ compute/cuda/1_1/NVIDIA_CUDA_Programming_Guide_1.1.pdf

[8] nVidia, “CUDA CUBLAS Library 1.1,” Available at http://developer.download.nvidia.com/ compute/cuda/1_1/CUBLAS_Library_1.1.pdf

[9] nVidia, “CUDA CUFFT Library 1.1,” Available at http://developer.download.nvidia.com/compute/ cuda/1_1/CUFFT_Library_1.1.pdf

[10] nVidia, “PTX: Parallel Thread Execution ISA Version 1.1”, Available at http://www.nvidia.com/ object/cuda_develop.html

[11] Buck, I., Foley, T., Horn, D., Sugerman, J., Fatahalian, K., Houston, M., and Hanrahan, P., “Brook for GPUs: Stream computing on graphics hardware.” Transactions on Graphics and Visualization vol. 23, no. 3, Aug. 2004.

[12] Tarditi, D., Puri, S., and Oglesby, J.. Accelerator: Using data parallelism to program GPUs for General- Purpose uses. In International Conference on Architectural Support for Programming Languages and Op- erating Systems (2006)

[13] McCool, M. and Toit, S.D., Metaprogramming GPUs with Sh. A K Peters, 2004.

[14] Mark, W.R., Glanville, R.S., Akeley, K., and Kilgard, M.J. “Cg: A system for programming graphics in a c-like language.” Transactions on Graphics and Visualization vol. 22, no. 3, pp. 896-907, 2003

[15] Matt Pharr, ed., GPU Gems 2, Addison-Wesley, 2005.

[16] Hubert Nguyen, ed., GPU Gems 3, Addison-Wesley, 2007.

[17] D. G ̈oddeke, GPGPU Basic Math Tutorial, tech. report 300, Fachbereic Mathematik, Universitt Dortmund, 2005