J'ai des fichiers volumineux (de plusieurs gigaoctets à des centaines de gigaoctets) que je cherche et essaye de trouver chaque occurrence d'une chaîne donnée.Lors d'une recherche parallèle, quand la bande passante de la mémoire deviendra-t-elle le facteur limitant?
J'ai cherché à faire fonctionner ceci en parallèle et j'ai quelques questions.
Comment est-ce que je devrais faire ceci? Je ne peux pas copier le fichier entier en mémoire car c'est trop gros. Est-ce que plusieurs pointeurs FILE * fonctionneront?
Combien de threads puis-je mettre sur le fichier avant que la bande passante du disque ne devienne un facteur limitant, plutôt que le processeur? Comment puis-je contourner cela?
Actuellement, ce que je pensais est j'utiliser 4 fils, tâche chacun avec un FILE * soit à 0%, 25%, 50%, et ainsi de 75% à travers le dossier et de chaque sauvegarde son résultats à un fichier ou une mémoire, puis collecter les résultats dans une dernière étape. Bien qu'avec cette approche, en fonction de la bande passante, je pourrais facilement ajouter plus de threads et éventuellement obtenir une plus grande accélération.
Qu'en pensez-vous?
EDIT: Quand j'ai dit la bande passante de la mémoire, j'ai réellement signifié l'E/S de disque. Désolé pour ça.
Vous devez disposer de disques durs rapides si le goulot d'étranglement n'est pas dans les E/S disque. – balpha
Mes pensées exactement :) –
La bande passante (E/S ou mémoire) deviendra un goulot d'étranglement lorsque le matériel ne peut pas suivre. Quel genre de dépend du * matériel *. Envoyez-moi votre ordinateur et je le testerai pour vous. Ou vous pouvez l'essayer vous-même sur votre propre système, puisque c'est le seul moyen d'obtenir un résultat fiable. Il n'y a pas de réponse générale. – jalf