“无为”与多核计算
前面的“小国寡民”思想的分析,只是道家思想的冰山一角。不妨再将道家的“无为”思想和多核计算方面的实例联系起来进行分析,看看它们之间是否有什么相似之处。
道家的“无为”,追求的是一种顺应自然的思想,这种思想的详细阐述无须我多言,网上可以找出一大堆历史典籍。所谓“大道自然”,即做事需要使用自然的力量,不要去强求使用一些人为的力量。
自然赋给了我们人类什么力量呢?“贪心”、“自私”、“偷窃”等都是自然赋给人类的自然力量,当然自然还赋给了人类很多自然力量,本文只讨论“贪心”、“自私”、“偷窃”这三种自然力量。把道家的“无为”思想应用到多核计算上,也就是说要用自然的力量来设计多核算法,令人惊讶的是,“贪心”、“自私”、“偷窃”正是用来设计多核算法的最有效的自然力量。下面以一些实例来说明它。
先说说“贪心”,儒家认为“人之初,性本善”,西方观点则认为“人之初,性本恶”。其实,人之初是没有所谓善恶的,善恶是人类后天形成的东西,自然界给予人类的自然力量是没有所谓的善恶之分的。所谓善恶皆因贪,也许说成“人之初,性本贪”更恰当。所以可以认为“贪心”是自然赋给人的一种自然力量。
有过算法经验的人都知道,单核时代,“贪心”就是算法设计的一种普遍性的最优策略,特别是对于一些NP难题,往往可以用贪心策略设计出一些复杂度为O(N)的算法。当然在多核算法中,贪心策略也是必不可少,比如任务图分解与调度问题,它就是一个NP难题,处理这类问题贪心策略往往是最有效的方法。
再看看“自私”,试问有那个人能一点都不“自私”。如果去观察一下小孩子的行为,很容易得出“人之初,性自私”的结论。“自私”也是大自然赋给人类的一种自然力量。
“自私”也能用来设计多核算法吗?答案是不仅可以,而且“自私”还是一种最有效的设计多核算法的优化策略之一。这里举个简单的例子,比如多核中的内存管理,如果每个线程都带有一个私有的内存管理器的话,那么分配内存时就只要从私有的内存管理器里进行分配就可以了,不需要进行加锁解锁操作,效率能提高多少可想而知。有兴趣者不妨去试试Intel开源项目TBB中的内存管理算法,就知道使用“自私”这种自然力量来设计多核算法有多大的好处了。
最后再看看“偷窃”,这可能会让大多数人产生怀疑,“偷窃”在人类社会中历来都是被看成是非法行为,这难道也是大自然赋给人类的自然力量?试看看自人类有史以来,有那个朝代和那个时期能够根绝“偷窃”这种现象,偷窃路人之物者有之,偷窃公家财物者有之,偷情者有之,甚至窃国者亦有之,…。不难发现,这个世界中充满了“偷窃”现象。再看看小孩子的行为,当小孩子看到自己想要的东西时,马上就会去把它拿到自己手中,可以说,“人之初,性喜偷”。所以“偷窃”也是一种大自然赋给人类的自然力量。
也许有人要问了,我就姑且先承认“偷窃”是一种自然力量吧,难道“偷窃”也可以用来设计多核算法不成?这可问到点子上了,“偷窃”这种自然力量还真的在多核算法中得到了使用,在多核的动态任务调度算法中,就用到了“偷窃”的思想,有兴趣的不妨去看看Intel的开源项目TBB中的任务调度算法,里面就用到了“偷窃”的思想,当然这个任务调度算法也使用“自私”的思想。
值得一提的是,动态任务调度算法可不是一个普通的算法,这可是多核中最酷的三大算法之一(另外两个就是前面提到的多核查找和多核内存管理算法)。许多的并行算法都可以通过这个算法来实现,并且你只要写一个串行的算法,那么就可以动态任务调度的方式自动将它变成并行算法,用它可以实现并行排序,并行数值计算,并行搜索等各种并行算法。这意味着程序员不需要学习并行计算的知识就可以复用以前单核时代的串行算法,由动态任务调度器自动将其变成并行算法,酷毙了吧!同时这也意味着多核程序中,大量的并行计算都在调用动态任务调度算法,都在进行“偷窃”动作。可见多核程序中也将充满“偷窃”现象。在南怀瑾的《老子他说》一书中p90页最后一行写道,“照道家的看法,这个世界本来就是一个相互偷盗的世界,彼此相偷,互相混水摸鱼”,这和多核程序中的相互偷盗可谓不谋而合。
看了上面这些内容,可以发现,道家的“无为”思想在多核计算中已经得到了充分的实践,道家思想中确实蕴含了深刻的多核计算原理和思想。虽然如此,但是也许有人要不高兴了,上面说的这些自然力量怎么尽是一些“贪心”、“自私”、“偷窃”,看起来像是人类阴暗面的东西。难道要让每个人都去尽情地“贪心”、“自私”、“偷窃”,才算符合道家的顺其自然之理,这不是要让人学坏吗?如果这样理解的话,我想就从根本上误会了道家的“无为”思想。
道家之所以提倡“无为”的顺其自然之理,在于它认为最优的东西必然是使用自然力量才能达到,并不等于使用了自然力量就一定可以达到最优。如果“老子”说使用了自然的力量就一定最优,那么我不仅不会说“老子”伟大,而且会认为他是一个浑蛋。世界上的任何东西都有它的使用范围,即需要合理使用它。当“贪心”变成“贪婪”,“自私”变成“损人利己”的时候,自然就超越了这些自然力量的使用范围,当然没有人会认同这种现象的发生。
话要说回来,世界是复杂的,有圣人就有浑蛋,“圣人不死,大盗不已”,总会有人做“贪婪”、“损人利己”的事情而不自知,而且他们偏偏认为这是最优的。所谓“有无相生”,滥用自然力量的人,最终逃脱不了自然的惩罚。看看最近华尔街的金融海啸,也许可以有所启示。