视频图像处理多核优化实例

第二部分 问题的分析。


1, 疑问点: 是不是OpenMP 的使用问题


这个应用里面CPU 使用率可以接近100%, 是不是OpenMP的使用问题。


private 这个关键字可能有些问题需要研究,有可能就是这个关键字用法的问题


OpenMP 里面对private 关键字的解释是


private(var) clause creates a local copy of var for each thread


      The value is uninitialized in the parallel region


      Private copy is not storage associated with the original


      Loop indices are private by default


不过文档里面没有说明VAR 有没有包括像 class 或者 structure 那种复杂数据类型。而我们的代码里面private 关键字里面的a, b, c是复杂类型。 我们需要证明OpenMP 考虑到了复杂类型。


private(var) clause creates a local copy of var for each thread 那么如果OpenMP 考虑到了复杂类型, 每个thread 里面的变量的地址应该不同。用下面的程序来看变量的地址


 


#include <stdio.h>


#include <omp.h>


#include <iostream>


void main()


{


class F


{


public:


       int a;


       char b;


            char * c;


                F()


                {


                        c = new char[10];


                }


                ~F()


                {


                        delete c;


                }


               


          


} ;


int tid, tsum;


F aaaa;


printf("size of class F is %d bytes\n",sizeof(F));


omp_set_num_threads(4);


#pragma omp parallel  private(aaaa)


 printf("The threadID is %d, the address of c in this thread is %p\n",omp_get_thread_num(), aaaa.c);


 


}


 


Class F 大小是12 Bytes,  f 是F类型的变量, 是12个Bytes 大, 从变量的地址看,  每个的差值都大于12,




0033EFA0 - 0033EF68 =     56 > 12 


001323E0 - 001323A8 =      56 > 12 


 


看起来OpenMP 是考虑了复杂类型的。  问题的根本不在这里。


下一个部分我们会研究其他的问题来寻找真正的关键点。


 


 



Para obtener información más completa sobre las optimizaciones del compilador, consulte nuestro Aviso de optimización.