订阅业界RSS CSDN首页> 业界

专访POWER 8编程挑战赛选手刘毅超:“核武”处理器与极致算法

发表于2015-03-27 15:59| 来源未知| 作者CSDN

摘要:第三期POWER8大赛已有数百名开发者报名并参加,为了让更多的开发者了解此次大赛的进展情况,日前,我们专访了其中一位参赛选手刘毅超,希望通过他的参赛经历,吸引更多的技术达人参与到大赛之中。

由CSDN和IBM联合举办的“2014 Power 8极限性能挑战赛 ”自正式启动以来,受到了许多编程爱好者及程序员们的关注。 该大赛以云计算的方式为开发者提供了Power 8开发环境,开发者将利用Power 8的特性,基于不同场景进行应用开发。

此次大赛主要面向广大CSDN注册开发者,大赛以云计算的方式为开发者提供了Power 8开发环境,开发者利用Power 8的特性,基于不同场景进行应用开发。此次大赛,不仅使更多的开发者充分利用了Power 8,也为开发者、技术达人提供一个展示自我的舞台。

Power 8极限性能挑战赛已成功举办两期。(第一期“博客反垃圾”、第二期“敏感词大文本过滤”)。现在,我们又迎来了极限算法挑战赛第三期本期挑战赛的题目是“文章TOP 100”,具体任务由CSDN提供30万篇文章浏览记录(总计1000万次),用户需要将曝光次数最多的T0P100文章输出。需要说明的是,大赛主要考察程序的是算法的正确率及处理速度,对开发语言、开发工具并不进行限定。

到目前为止,已经有数百名开发者报名并参加了此次大赛,为了让更多的开发者了解此次大赛的进展情况,日前,我们专访了其中一位参赛选手刘毅超,希望通过他的参赛经历,吸引更多的技术达人参与到大赛之中。

1.可否介绍一下你的技术开发经历?目前,主要关注哪些技术领域?

本人主要研究算法,参加过ACM竞赛,略懂机器学习相关算法,熟悉Java与C。平时比较喜欢算法,乐于将程序优化到极致,关注大数据,机器学习相关领域。本人是即将毕业的本科生,在这些领域会向前辈多多求教。

2.关于您算法设计的思路,主要用到了什么计算模型?请简单描述一下所设计算法的基本思路?

统计每个id的数量借鉴了桶排序的思想,在每个位置记录这个id的出现次数。例如pos[3] = 5,表示id=3出现了5次。pos[a]=b,用long long型数值c=b<<32 + a存储次数和id信息。然后用一个大小为111的小根堆存储long long型的值们。首先将前111个值压入堆,后面的值依次与堆顶元素比较,如果大于堆顶元素,弹出堆顶元素,压入该值。最终的堆里面111个元素就是最大的111个元素。

3.在设计算法过程中遇到了哪些困难?如何解决的?

IO慢,载入数据时,不一行一行读入,而是直接按照一个一个比较大的数据块载入。

4.相对于其他方式您之所以选择这一模型,主要是源于哪方面的优势?是否还有继续优化的可能?

速度快。有,但是优化空间不大了。比如,输出可以按数据块输出,还有统计前111个可以参照桶排序的思想,也能线性速度。不过这两步都消耗时间很短,没做优化。

5.基于这一思路的算法设计,能否充分发挥IBM Power8的多线程计算优势?您是否尝试过比较多线程与单 线程的性能差距?(请简单描述您的感想)

使用了多线程,使用多线程略快,但是速度没有办法线性增长。统计每一id的次数时,我将数据块分成了多个区间,每个线程只处理一个区间。然后再用多线程进行汇总。本身复杂度就增加了。但是我感觉使用多线程后,每个线程所分到的Cache就少了。该问题需要访问大量内存,而不是对于某一块内存连续使用。因此,多线程后,每个线程计算时,Cache命中率自然就低了,因此速度无法随着线程增加线性增加。

6.对于IBM Power 8,你最关注的技术要点是什么?能否谈谈对未来这一领域技术趋势的看法?

大数据处理能力,并行处理能力。未来几年,我个人感觉是大数据的时代,用大量的数据样本使机器变的更加智能。

7.对于多线程及并发编程技术的发展,你怎么看?你认为还有哪些可以改进的方面?

我觉得随着硬件越来越便宜,Cache会越来越大,访存时间不再成为瓶颈,逐渐向CPU的计算速度靠拢。线程同步的开销越来越小。

0
0