搞过icpc和发过并行算法论文的人回答:
大部分所说的并行算法是强调实现的,称其为algorithm不如说是implementation。
比如并行字符串匹配这样非常非常难并行的问题,一般的程序是不会接触到的。不会像icpc那里的基本数据结构和算法应用那么广泛。
而且并行很大程度上是硬件相关的,c 编译器有时难以最大程度优化程序,手写asm也是常有的事,这样耗费大量时间的事是不适合做比赛的。
(题外话:很多其他回答对于并行算法的认识很肤浅啊。说什么并行算法简单粗暴的,依赖硬件的,真是呵呵了。说并行计算相关的算法和普通的算法竞赛差距太大,也是因为并行算法的学习门槛比较高。竞赛中的问题(除了网络流)用到的算法都能并行,不过以一般OI选手的学习能力,大概花半年到一年的时间还达不到学习到这类算法的阶段。而把这些时间花在学现在的竞赛题,那早就可以在OJ上刷的风生水起了。这也从层面说明了并行算法难度过大,不适合作为竞赛内容。因此致力于简化并行算法也是我们目前主要的课题之一。)
我也是不太认同将并行加入程序竞赛的,因为设计好的并行算法需要对于architecture的了解,需要很多细节的考量,这个和ICPC之类抽象的层面解决问题的要求是背道而驰的。
其实对于并行算法的竞赛问题,我们业界内也是有过很多讨论的。像现在ISC这种主要靠“搞”的比赛明显是不可取的(因此你看除了中国之外,世界上并没有主流学校参与,也没有意愿参与。ACM/ICPC世界上还是所有名牌大学都参与的)。但是由于并行算法太难,简单的问题都有现成的写法,稍微有点难度的问题所需要的知识一般本科阶段的理解力基本掌握不了,因此也是很头疼的事情。
ps. 经评论指出,其实很多其他答案和评论说的是(并行编程/语言/实现),不是并行算法。当然这些是学习并行算法的基础,但是不是一码事。类比学习C++/Java语言和学习算法。既然说到竞赛,那肯定是指算法,毕竟也没有C++/Java语言比赛(除了混乱C大赛),只有算法竞赛。不过非常遗憾的是除了复旦的唐老师之外,我还不知道国内有谁还算是比较懂并行算法的了,于是如此完善的一个算法体系,并没有任何中文的教材和中文的课程,所以大家根本不知道他的存在也就不足为奇了。(所以说中国的CS教育和美国的差距还有好几光年啊!)