我的机子是4core的,用多线程分词之后,统计含某个词语的语句。我有一个主线程分配任务,又启动了4个线程分词。通过输出调试信息,4个线程确实都执行了分词任务。但运行时发现速度不快。通过任务管理器观察,cpu仅使用了25%。我想cpu使用率如果达到70-90%才比较正常。是否需要增加线程数到10?由于缺乏经验,不知道问题出在哪里。请朋友们指点。

解决方案 »

  1.   

    我也遇到类似的问题,我的机器是4 core的,一个IHO S57海图后台选图程序(就是把图文件从硬盘读入内存,读入的过程相对复杂,除IO外,CPU的运算量相对较大,有非常复杂的解密过程)。线程池共20个,真正同时起的,也不超过20个。一次同时起的时候,会自动根据操作起线程。多的时候,也就16个,至今没有超过16个。CPU最高也就50%,而且就是那么一瞬间。我所想到的解释,就是CPU的运算速度远超过其它的访问速度。
      

  2.   

    是不是可以通过设置线程的亲缘性,让指定的CPU去执行相应的线程
      

  3.   

    多核要用OpenMP
    #pragma   omp   parallel   shared 
      

  4.   

    OpenMP相关的网页:
    http://www.cnblogs.com/P_awl/archive/2009/12/26/1632894.html
    http://blog.csdn.net/drzhouweiming/article/details/1131537
      

  5.   

    动态设置并行循环的线程数量
    http://www.diybl.com/course/3_program/c++/cppsl/200864/121425.html
      

  6.   

    原来还有并行语法,哈 我双核机器上,跑一个死循环只占50%cpu,这下我可以把100%都占了。
      

  7.   

    高精度计时
    http://www.docin.com/p-52893127.html
      

  8.   

    #pragma omp for schedule(dynamic, 500)这个指令很重要。500*sizeof()<1级cache,就可以有很好的效果。设置线程的亲缘性也很重要。我的cpu是Q8200,1级cache为64k,设置4个线程,相应绑定4个core,一次schedule500-1000个语句,效果非常好。12分钟处理600万个语句。否则要100分钟。贴在这里给朋友们参考。
      

  9.   

    Intel有个分析器,VS2010也有个性能分析器。多线程并不意味着高CPU利用率,礼貌释放CPU时间片可能不会造成高CPU利用率的。