Optimierung und warum openmp ist viel langsamer als der sequentielle Art und Weise?

Ich bin ein Neuling in der Programmierung mit OpenMp. Ich schrieb ein einfaches c-Programm zu multiplizieren matrix mit einem Vektor. Leider, durch den Vergleich der Ausführung Zeit habe ich festgestellt, dass die OpenMP ist viel langsamer als die Sequentielle Art und Weise.

Hier ist mein code (Hier wird die matrix N*N-int, vector int N, Ergebnis N long long):

#pragma omp parallel for private(i,j) shared(matrix,vector,result,m_size)
for(i=0;i<m_size;i++)
{  
  for(j=0;j<m_size;j++)
  {  
    result[i]+=matrix[i][j]*vector[j];
  }
}

- Und dies ist der code für sequentielle Weise:

for (i=0;i<m_size;i++)
        for(j=0;j<m_size;j++)
            result[i] += matrix[i][j] * vector[j];

Als ich versuchte, diese beiden Implementierungen mit einer 999x999 matrix und einem 999-Vektor, der Zeitpunkt der Ausführung ist:

Sequentiell: 5439 ms
Parallel: 11120 ms

Kann ich wirklich nicht verstehen, warum OpenMP ist viel langsamer als der sequentielle Algorithmus (über 2 mal langsamer!) Wer kann mein problem lösen?

  • Wie viele Kerne sind Sie mit OpenMP?
  • Wie Messen Sie die execution time? Verwenden Sie die gefürchtete clock() / CLOCKS_PER_SEC Methode?
InformationsquelleAutor Alex Zhou | 2013-05-04
Schreibe einen Kommentar