最近几年,支持GPU、DSP和FPGA加速的OpenCL通用计算框架非常热门。瑞芯微RK3399是现在比较热门的一款ARM处理器芯片,其中的ARM Mali T860 GPU核心支持OpenCL计算框架。德州仪器推出了集成DSP核心的ARM芯片,其中的C66x DSP核心也支持OpenCL。
GPU或DSP,它们跑OpenCL,到底谁更快呢?
今天我们来测试一下单核C66x DSP和4核T860 GPU的计算性能。这个测试,我们已经期待了快一年了。
我们先说说瑞芯微RK3399处理器芯片,该芯片的ARM Cortex-A72 2.0G Hz核心(总共2个A72,4个A53)和Mali T860 MP4 GPU给我留下了深刻印象。RK3399上面集成的T860是4核的,并且支持OpenCL。以下是RK3399的GPU信息。
德州仪器的AM5708处理器的CPU和GPU其实并不起眼,单核ARM Cortex-A15
1G Hz,SGX544 GPU(不支持OpenCL);然而却神奇地集成了两个双核Cortex-M4的IPU模块和一个单核的Ti C66x DSP核心。
怎么把Mali T860和C66x放在一起比呢?
由于GPU和DSP是完全不同的平台,所以,我们也要找一个通用的计算框架(比如OpenCL)来对性能进行统一的量化。
于是,本人设计了测试方案,使用gcc以默认优化编译一个opencl做冒泡法数列排序的例子,并通过程序记录跑算法过程的消耗时间。
单核C66x DSP竟然要跟4核T860 GPU比OpenCL啦,谁更胜一筹呢?
首先出场的是Mali T860 GPU,通过clinfo命令,我们可以知道它是个4核800Mhz的GPU,并且支持OpenCL 1.2。如果估算每个GPU核心有25GFLOPS的算力,4个核心就是将近100GFLOPS了。
下面我们编译一下这个OpenCL算法;因为引用了CL库,所以要加-lOpenCL;然后连续跑两次。
上面这个算法做的事情是用冒泡法把一个数组里面的元素进行从大到小的排序。计算耗时大约在1.7到1.8毫秒左右。
下面,我们再有请C66x出场,通过命令可以知道Ti AM5708处理器里的这个C66x是个781MHz的DSP核心,支持OpenCL
1.1。从频率上看,并没有达到 Ti C66x 常见的1GHz。也就是说,是个残血的DSP(估计算力大约是16GFLOPS)。Ti的另一款产品,TMS320C6678 DSP是8核C66x 1GHz的,总算力可以达到160GFLOPS(每核心20GFLOPS)。
当然,实际跑分的成绩是不能看那些字面上的参数的。谁知道这个名义上只有16GFLOPS的DSP能不能跟100GFLOPS的4核Mali T860正面杠一下呢。
下面,我们就来实际跑一下吧。同样的算法,代码几乎相同,除了指定设备有些区别。T860的代码是指定用GPU跑。C66x的代码是指定用DSP核心来跑。编译并跑两次。
先是MaliT860的成绩,耗时1.75毫秒。说实话,这速度真的挺快的,因为冒泡法的算法里有很多次嵌套的循环,相当占系统资源。能在1毫秒左右的时间里跑完,已经很让我震惊了。
然后,我们换DSP跑一下。见证奇迹的时刻到了!DSP耗时0.85毫秒!甚至比4核Mali T860 GPU更快了一倍。
通过这个测试,我们可以了解到,当不同的核心一起比较某一个算法的速度时,算力数据在测试中其实是没有实际意义的。
同等算力下,GPU跑OpenCL的效率远低于DSP。
但是有一点可以明确的是,在OpenCL计算性能上,一个残血的Ti C66x核心就可以达到4核满血Mali
T860的两倍性能,而且还更省电。
英伟达已经推出了堆了两百多个Maxwell GPU核心的Jetson,也许Ti也可效仿一下推出堆两百多个C66x DSP核的新处理器。到底哪个厉害呢?也许这会成为明年我们最期待的测试吧。
本次测试中使用的代码可以去我的Github上下载得到。测试代码全部开源,绝无任何跑分作弊。
GPU和DSP的测试源代码分别以后缀区分。代码下载地址如下:
https://github.com/xukejing/OpenCLtest
原创作品,未经权利人授权禁止转载。详情见转载须知。 举报文章
我要举报该内容理由
×