Voici ce que je fais:Meilleure façon de copier plusieurs vecteurs std :: en 1? (Multithreading)
Je prends des points de Bézier et en cours d'exécution interpolation Bézier puis stocker le résultat dans un std::vector<std::vector<POINT>.
Le calcul de Bézier a été me ralentir en est ainsi ce J'ai fait.
Je commence par un std::vector<USERPOINT>
qui est une structure avec un point et 2 autres points pour les poignées bezier.
Je les divise en ~ 4 groupes et assigner chaque fil à faire 1/4 du travail. Pour ce faire, j'ai créé 4 std::vector<std::vector<POINT> >
pour stocker les résultats de chaque thread.A la fin, tous les points doivent être en 1 vecteur continu, avant d'utiliser le multithreading j'ai accédé directement à ceci, mais maintenant je réserve la taille des 4 vecteurs produits par le threads et les insérer dans le vecteur d'origine, dans le bon ordre. Cela fonctionne, mais malheureusement la partie de copie est très lente et la rend plus lente que sans multithreading. Alors maintenant, mon nouveau goulot d'étranglement copie les résultats au vecteur. Comment pourrais-je faire de cette façon plus efficacement?
Merci
+1 mais Note: Vous devrez peut-être utiliser des pointeurs sur les éléments du vecteur au lieu de passer le vecteur lui-même ici car les conteneurs STL peuvent être étranges en ce qui concerne le comportement multithread. –
@Billy: Excellent point. –
Je pense que la préoccupation de @Billy ONeal est suffisamment importante pour que vous en fassiez partie avant de vous donner un point. Un petit exemple de code serait également utile. – Omnifarious