Maison  >  Article  >  développement back-end  >  Comment effectuer du calcul parallèle de code C++ ?

Comment effectuer du calcul parallèle de code C++ ?

WBOY
WBOYoriginal
2023-11-03 10:15:331100parcourir

Comment effectuer du calcul parallèle de code C++ ?

Avec l'amélioration continue des performances du matériel informatique, le calcul parallèle pour les processeurs multicœurs est devenu un sujet important dans le domaine de la programmation. En tant que langage de programmation efficace, le C++ dispose naturellement de diverses méthodes pour implémenter le calcul parallèle. Cet article présentera plusieurs méthodes de calcul parallèle C++ couramment utilisées et montrera respectivement leur implémentation de code et leurs scénarios d'utilisation.

  1. OpenMP

OpenMP est une API de calcul parallèle basée sur la mémoire partagée qui peut facilement ajouter du code de parallélisation aux programmes C++. Il utilise la directive #pragma pour identifier les segments de code qui doivent être parallélisés et fournit une série de fonctions de bibliothèque pour implémenter le calcul parallèle. Voici un exemple de programme OpenMP simple :

#include <iostream>
#include <omp.h>

using namespace std;

int main() {
    int data[1000], i, sum = 0;
    for (i=0;i<1000;i++){
        data[i] = i+1;
    }

    #pragma omp parallel for reduction(+:sum)
    for (i=0;i<1000;i++){
        sum += data[i];
    }
    cout << "Sum: " << sum << endl;
    return 0;
}

Dans cet exemple, la directive #pragma omp est utilisée pour paralléliser la boucle for. En même temps, utilisez l'instruction réduction(+:sum) pour indiquer à OpenMP d'ajouter la variable sum. Lorsque ce programme est exécuté sur un ordinateur utilisant 4 cœurs, vous pouvez constater que le temps d'exécution est 3 à 4 fois plus rapide que la version monothread.

  1. MPI

MPI est une interface de transmission de messages qui permet le calcul parallèle distribué entre plusieurs ordinateurs. L'unité de base d'un programme MPI est un processus, et chaque processus est exécuté dans un espace mémoire indépendant. Les programmes MPI peuvent s'exécuter sur un seul ordinateur ou sur plusieurs ordinateurs. Ce qui suit est un exemple de programme MPI de base :

#include <iostream>
#include <mpi.h>

using namespace std;

int main(int argc, char** argv) {
    int rank, size;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    cout << "Hello world from rank " << rank << " of " << size << endl;

    MPI_Finalize();
    return 0;
}

Dans cet exemple, l'environnement MPI est initialisé via la fonction MPI_Init(), et les fonctions MPI_Comm_rank() et MPI_Comm_size() sont utilisées pour obtenir le numéro de processus d'un seul processus et le nombre total de processus. Ici, je produis simplement une phrase. En exécutant la commande mpirun -np 4, ce programme peut être exécuté sur 4 processus.

  1. TBB

Intel Threading Building Blocks (TBB) est une bibliothèque C++ qui fournit des outils pour simplifier le calcul parallèle. Le concept principal de TBB est celui des tâches, qui parallélisent certains travaux grâce à la collaboration entre les nœuds et les tâches. Voici un exemple de programme TBB :

#include <iostream>
#include <tbb/tbb.h>

using namespace std;

class Sum {
public:
    Sum() : sum(0) {}
    Sum(Sum& s, tbb::split) : sum(0) {}
    void operator()(const tbb::blocked_range<int>& r) {
        for (int i=r.begin();i!=r.end();i++){
            sum += i;
        }
    }
    void join(Sum&s) {
        sum += s.sum;
    }
    int getSum() const {
        return sum;
    }

private:
    int sum;
};

int main() {
    Sum s;
    tbb::parallel_reduce(tbb::blocked_range<int>(0, 1000), s);
    cout << "Sum: " << s.getSum() << endl;
    return 0;
}

Dans cet exemple, une classe Sum est définie pour implémenter le calcul parallèle, tbb::blocked_range changement de fonction. Lorsque ce programme est exécuté sur un ordinateur utilisant 4 cœurs, vous pouvez constater que le temps d'exécution est 3 à 4 fois plus rapide que la version monothread.

Ces trois méthodes ont chacune leurs propres avantages et inconvénients. La méthode à choisir dépend principalement du scénario d'application spécifique. OpenMP peut être utilisé sur une seule machine avec mémoire partagée et peut facilement ajouter du code de parallélisation aux programmes C++ existants pour accélérer l'exécution du programme. MPI convient à une utilisation sur des clusters informatiques distribués et peut réaliser la parallélisation en transmettant des messages entre plusieurs ordinateurs. TBB est une bibliothèque C++ multiplateforme qui fournit des outils efficaces pour simplifier le calcul parallèle.

En résumé, pour les applications nécessitant un calcul parallèle, C++ offre une variété d'options pour obtenir une parallélisation efficace. Les développeurs peuvent choisir une ou plusieurs méthodes pour accomplir leurs tâches en fonction de leurs propres besoins et scénarios d'application, et améliorer les performances du programme à un nouveau niveau.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn