LDA并行化实验(待完善)

    实验数据

    语料大概有1740篇文档,19889的词,机器为16核,48G内存,因为机器上有其它程序运行,实际可用内存不足6G。

    实验方案

    主要包含LDA的三种实现:第一种是LDA的单机版本,第二种是LDA的mpi版本,第三种是LDA的mpi和openmpi混合版本,不过实验条件所限,没有搭建基于MPI的集群,这里只是初步看下效果。迭代次数为1500,主题数目为50,假设n为内核数。

    实验结果

    这里先记录大概的结果,以后有时间再进行完善和补充。

    第二种方法中,实验跑了n分别等于16、8、4的时候。n=16的时候时间为6m46s,n=8的时候时间为4m29s,n=4的时候时间为 8m35s。

    第三种方法,n分别取16,8,4,运行时间都比较慢,时间至少为30分钟,而且不同cpu的负载很不均衡,有时候高的是低的2倍,这个感觉比较困惑,需要进一步分析。

    第一种算法,时间在22m26s,占用内存98M。

    实验分析

    第一:都说MPI是进程级别的并发,而openmpi是线程级别的,至于为什么第三种算法会有这样的结果暂时还不太清楚,会继续实验或者利用工具进行分析。

    第二:cpu负载的不均衡性。也就是说有些cpu的计算负载会比较大,想想会不会是文档中词有一定的聚集现象,分发的时候,有些文档集合的词集合较小,有些会比较大?

    第三从实验结果看,lda的单机版本占用内存是最小的,其它情况虽n增加会有一定的增加。

   接下来

    虽然之前玩过MPI集群,不过现在工作环境不允许,所以只好试试单机的基于openmp进行并行化。接下来,继续分析问题一和二,然后只利用openmp进行并行化试试效果,最后看能不能进行代码改进,主要包括利用指令集的方式加速浮点运算、算法的改进包括利用稀疏存储,共享内存等方式进行改进。

你可能感兴趣的:(mpi,LDA)