0
votes

Quel est le moyen le plus rapide d'ajouter / soustraire une valeur d'un tableau de chiffres?

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
}

go

3 commentaires

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 , 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 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>


3 Réponses :



2
votes

Diviser et conquérir. Divisez votre énorme tableau en n sections contiguës, puis gérez chaque section avec un goroutine.


0 commentaires

1
votes

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


2 commentaires

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