时不时的就会发现一些例证来一遍一遍的教导自己“道理都是相通的”。
CPU受限于制造工艺的精细程度,因而提高性能的着眼点放在了并行处理上。但是并行不是说并性就可以并行的,比如Python里面为了保证数据安全,必须有一个GIL全局解释锁的存在,导致一个Python解释器同一时间只能使用一个CPU。那为什么要用GIL来保证数据安全呢,因为数据的处理需要上下文环境,换句话说也就是数据的处理结果依赖于当前执行环境的状态。只要有这个限制,各种似锁是锁的机制就要存在,就要保证CPU中断前后的环境是没有变化的。而函数式编程则可以打破上述限制,因为其给定的函数约束,必要保证一个函数的执行结果只依赖于参数而和状态无关,因而就可以方便的实现并行合作。
同样,信息爆炸了这么久,大数据的处理只靠单机来保证时效是绝对不可能的了,因而也要并发,让一群机器来通力合作,比如Map-Reduce处理框架。而合作的基础要求,仍然是状态无关特性。否则,同一机器不同时间或者不同机器不同时间状态下对同一源数据出来的结果不同,那。。。
为图形处理而生的GPU现在也在高性能计算领域展露头角,同样主频的GPU比CPU数据处理性能,按照某种说法,“高到不知道哪里去了!”。为什么?因为GPU是实实在在的并行计算。那为什么GPU可以实现并行?理由还是GPU要求的处理过程必须状态无关,各个流水线可以按照规则自己闷头做自己的事情,而CPU则受限于需要实现复杂的逻辑结构,而不得不处理各种中断,用时间片来实现伪并行。是否可以把CPU和GPU合并成为一个JoinPU?我认为答案是不可能,因为他们根据自身的前提假设,本身已经走在不一样的路上,且都有必需的理由存在。如果可以,只能在合适的环境下选择合适的PU,或者结合两兄弟来干一番大事业。