J'ai le code ci-dessous, souhaite ajouter / soustraire la valeur "1" de chaque élément. Quel est le moyen le plus rapide de faire cela? Demandé parce que j'ai 1 million d'éléments au sein de la matrice de MyByte. Le code ci-dessous ne montre que 3, mais s'il y a un million, cela prendra une très longue période.
myByte := []byte("a","b","c")
for i:=0; i<len(myByte); i++ {
myByte[i]+=1
}
3 Réponses :
Parallèle Votre code peut aider, le traitement parallèle est un citoyen de première classe en déplacement, d'où le < code> aller code> instruction et goroutines em> . P>
Aussi Les instructions SIMD permettent d'améliorer de vastes améliorations de performance pour de tels calculs. Voici un package Go pour les utiliser . P>
Diviser et conquérir. Divisez votre énorme tableau en n sections contiguës, puis gérez chaque section avec un goroutine. p>
TIME IT et essayez de paralléliser
$ go test -bench=. goos: darwin goarch: amd64 BenchmarkSimple-4 1130 1035976 ns/op BenchmarkPara-4 10000 559050 ns/op PASS ok _/Users/jamandre/wip/add 6.923s
Essayez de passer les tranches par valeur, pas besoin de l'indirection du pointeur.
Oui, vous avez raison de passer de cette façon semble plus rapide / moins CPU / Mieux / Plus simple
Il n'y a pas de manière "la plus rapide". Écrivez un indice de référence approprié à l'aide de l'outillage fourni par GO Test-banc et test de package et expérimentez sur tout le matériel pertinent. Notez que fonctionnant de manière séquentielle via la mémoire est assez rapide car le matériel est optimisé pour ce type de charge de travail. Selon votre configuration matérielle exacte i>, le fonctionnement de la première et de la seconde moitié en parallèle pourrait valoir la peine d'essayer. Ne vous attendez pas à ce que la division dans de nombreux morceaux ait diminué le temps de parallore, alors que vous déduirez votre cache de processeur.
Un de plus: un million d'octets est fondamentalement rien i> sur le matériel moderne. Si ce n'est pas sur votre chemin de code à chaud: ne vous dérangeez pas avec des microoptimisations qui prennent beaucoup de temps à mettre en œuvre, de déboguer, de maintenir mais ne fournissent pas de véritables améliorations mesurables à votre programme.
Ce que @volker dit est correct. Probablement un bon moyen de passer votre temps à regarder les optimisations de la mémoire d'allocation. Cet article présente un intérêt segment.com/blog/... < / a>