本人最近做了一个数据处理的多线程程序,即用同一段处理代码处理不同的数据(SIMD),数据处理代码写成了一个线程函数,用这个线程函数启动了若个个处理线程,主要的运算量都在数据处理部分,为了提高程序运行效率,按照单线程程序的优化思路对数据处理部分的代码进行了优化(理论上的乘法、加法数量有了大幅减少),但放到多线程架构中去时执行速度反而变慢了!请各位帮忙分析一下原因吧!万分感谢中!

解决方案 »

  1.   

    只要你的任务没有那种可以被非CPU处理的任务,你放多线程中必然会减速。多线程之所以高效是因为一部分操作在处理时不需要CPU,因此CPU可以做别的事情。如果你的操作都在做CPU操作(也就是数据处理),放在多线程不会任何加分,只会增加CPU在不同线程间切换的开销
      

  2.   

    线程的数量越多,不一定速度越快。首先线程直接的轮转,需要占用cpu的资源,和恢复线程的数据栈内容。多线程建议在同一时刻,需要有多种数据展现形式的时候使用,如果只是单一的数据,单一的展现形式,建议只在主线程当中处理
      

  3.   

    如果数据之间没有相关性,在多核的情况下可以考虑用多线程处理,可以参考一下OpenMP的实现方法;如果是单核就没有必要了,反而会弄巧成拙的