VB6里面使用多线程提高穷举速度
刚刚几个我论坛里的小同学在群里讨论已知位数密码穷举提速的方案,我也参与了一下.
我想了想,最简单的提速,就是真正的并行执行,即物理多线程,这需要至少两个CPU的硬件支持.
而我正好是双核CPU,于是就做了这个简单的例子(
代码在后面下载).
代码没有多少,但却花了点时间调试.
对于多线程的调试技术,我还非常生疏,而且经常遇到IDE与编译后结果不一致的情况,很是烦人.
不过呢,终于是整好了.
程序要解决的一个假设题是从1开始,一个一个地跑到40000000(4千万),如何提高速度.
我的做法是,简单地将目标拆分为两部分,分别扔给两个线程去执行,这样速度当然就是一倍啦!
实际测试结果也确实是这样,双线程约8秒,单线程约16秒.而将代码放到虚拟机里测试的结果,却是双
线程慢于单线程(18.X秒与17.X秒,虚拟机中是单核).看来,在只能执行一个物理线程的硬件系统中,这种
穷举使用多线程,在CPU进行逻辑线程调度时消耗的时间那还真的不少.
由于手里没有支持超线程的CPU,所以没办法测试超线程功能是啥情况.不过从超线程原理来看,貌似
只是把线程的调度从软件上改成了硬件上,本质上还是只能同时执行一个物理线程,估计也差不多....有
支持超线程CPU的朋友帮忙测试一下吧:)
扯点题外话,其实物理并行处理,我觉得并不是CPU的强项....去年在软件开发大会上看到了NVIDIA的
CUDA技术演示,那才叫牛B,由于GPU本身物理结构上的优势,它可以轻松拥有上百个物理线程并行处理的能
力....可惜NVIDIA送的那套光碟放在陈辉家里忘带走了,还有CSDN的那个包包...呃,对,那个包包已经是
莫依的了...
不过呢......我的本本是INTEL的GMA3100.....与CUDA是无缘的了- -!
扯远了.....还是把代码先发上来吧,不然还没等到各位看完,我脑袋上估计都堆了很多块砖了= =|||
源代码在此下载:
点击下载此文件
BY 嗷嗷叫的老马
紫水晶工作室
http://www.m5home.com/
2009-07-04