170 похожих чатов

Кстати. Почему на 14 элементе в мапу происходит аллокация? Кому

тут скучно

27 ответов

23 просмотра

У меня не произошла: /1-20 147698568 8.169 ns/op 0 B/op 0 allocs/op /8-20 19205803 63.31 ns/op 0 B/op 0 allocs/op /9-20 6231040 189.9 ns/op 160 B/op 1 allocs/op /13-20 2716396 421.8 ns/op 500 B/op 2 allocs/op /14-20 2653107 431.8 ns/op 500 B/op 2 allocs/op

🏳️ Phil-Kulin Автор вопроса
🏳️ Phil Kulin
Какая версия и данные?

map[int]struct{}) go version go1.21.0 linux/amd64

🏳️ Phil-Kulin Автор вопроса

package main import ( "strconv" "testing" ) func BenchmarkName(b *testing.B) { nList := []int{1, 8, 9, 13, 14, 50} for _, n := range nList { b.Run(strconv.Itoa(n), func(b *testing.B) { for j := 0; j < b.N; j++ { m := make(map[int]struct{}) for k := 0; k < n; k++ { m[k] = struct{}{} } } }) } }

🏳️ Phil-Kulin Автор вопроса
Rostislav Teryaev
package main import ( "strconv" "testing" ) ...

phil@wtvlab:~/test14$ go test -test.bench . -test.benchmem his_test.go goos: linux goarch: amd64 cpu: AMD Ryzen 7 5800H with Radeon Graphics /1-16 100000000 10.52 ns/op 0 B/op 0 allocs/op /8-16 13891986 87.02 ns/op 0 B/op 0 allocs/op /9-16 4624732 257.7 ns/op 160 B/op 1 allocs/op /13-16 3367443 362.8 ns/op 196 B/op 2 allocs/op /14-16 1786410 671.4 ns/op 517 B/op 3 allocs/op /50-16 528997 2292 ns/op 1394 B/op 10 allocs/op PASS ok command-line-arguments 8.523s phil@wtvlab:~/test14$ go version go version go1.20.6 linux/amd64 phil@wtvlab:~/test14$ uname -a Linux wtvlab 5.15.90.1-microsoft-standard-WSL2 #1 SMP Fri Jan 27 02:56:13 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

🏳️ Phil-Kulin Автор вопроса
Rostislav Teryaev
package main import ( "strconv" "testing" ) ...

@all А погоняйте вот это пожалуйста с go test -test.bench . -test.benchmem his_test.go и потом go version и uname -a (винду просто укажите)

🏳️ Phil Kulin
@all А погоняйте вот это пожалуйста с go test -tes...

xbt573@cheembox ~/c/g/playground> go test -test.bench . -test.benchmem his_test.go goos: linux goarch: amd64 cpu: Intel(R) Xeon(R) CPU E5-2666 v3 @ 2.90GHz BenchmarkName/1-20 69441450 17.74 ns/op 0 B/op 0 allocs/op BenchmarkName/8-20 7175889 165.7 ns/op 0 B/op 0 allocs/op BenchmarkName/9-20 1460438 959.2 ns/op 160 B/op 1 allocs/op BenchmarkName/13-20 600056 2113 ns/op 500 B/op 2 allocs/op BenchmarkName/14-20 556844 2146 ns/op 500 B/op 2 allocs/op BenchmarkName/50-20 136639 7764 ns/op 2743 B/op 9 allocs/op PASS ok command-line-arguments 10.486s xbt573@cheembox ~/c/g/playground> go version go version go1.21.0 linux/amd64 xbt573@cheembox ~/c/g/playground> uname -a Linux cheembox 6.4.10-gentoo-dist #1 SMP PREEMPT_DYNAMIC Mon Aug 14 21:19:48 MSK 2023 x86_64 Intel(R) Xeon(R) CPU E5-2666 v3 @ 2.90GHz GenuineIntel GNU/Linux xbt573@cheembox ~/c/g/playground>

🏳️ Phil Kulin
@all А погоняйте вот это пожалуйста с go test -tes...

spider@calculate /tmp/tmp.bCgA0z2fvx $ go test -test.bench . -test.benchmem his_test.go goos: linux goarch: amd64 cpu: 11th Gen Intel(R) Core(TM) i5-1145G7 @ 2.60GHz BenchmarkName/1-8 120934110 10.02 ns/op 0 B/op 0 allocs/op BenchmarkName/8-8 13424506 93.07 ns/op 0 B/op 0 allocs/op BenchmarkName/9-8 4502892 261.9 ns/op 160 B/op 1 allocs/op BenchmarkName/13-8 3315483 372.9 ns/op 196 B/op 2 allocs/op BenchmarkName/14-8 1986396 640.4 ns/op 517 B/op 3 allocs/op BenchmarkName/50-8 561596 2157 ns/op 1394 B/op 10 allocs/op PASS ok command-line-arguments 10.652s spider@calculate /tmp/tmp.bCgA0z2fvx $ go version go version go1.19.4 linux/amd64 spider@calculate /tmp/tmp.bCgA0z2fvx $ uname -a Linux calculate 5.15.82-calculate #1 SMP PREEMPT Tue Dec 13 09:40:40 UTC 2022 x86_64 11th Gen Intel(R) Core(TM) i5-1145G7 @ 2.60GHz GenuineIntel GNU/Linux

🏳️ Phil Kulin
@all А погоняйте вот это пожалуйста с go test -tes...

так и не нашел разгадку? подсказать? :)))

🏳️ Phil-Kulin Автор вопроса
Andrey S
так и не нашел разгадку? подсказать? :)))

Хотя идея со стеком интересная. Вон, в ядре 6+ не повторяется

🏳️ Phil Kulin
Хотя идея со стеком интересная. Вон, в ядре 6+ не ...

go test -test.bench . -test.benchmem qqq_test.go goos: linux goarch: amd64 cpu: AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx BenchmarkName/1-8 66432248 15.89 ns/op 0 B/op 0 allocs/op BenchmarkName/8-8 7442712 156.1 ns/op 0 B/op 0 allocs/op BenchmarkName/9-8 2221542 528.4 ns/op 160 B/op 1 allocs/op BenchmarkName/13-8 1648663 757.2 ns/op 196 B/op 2 allocs/op BenchmarkName/14-8 884330 1352 ns/op 517 B/op 3 allocs/op BenchmarkName/50-8 292698 4072 ns/op 1395 B/op 10 allocs/op PASS ok command-line-arguments 8.563s uname -a Linux HUAWEI-NB 6.2.0-26-generic #26-Ubuntu SMP PREEMPT_DYNAMIC Mon Jul 10 23:39:54 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux повторяется :)

🏳️ Phil Kulin
Хотя идея со стеком интересная. Вон, в ядре 6+ не ...

первая аллокация на 9 - и это 160 байт - больше чем порог :) поищи про 128 байт - точно что-то было :)

🏳️ Phil-Kulin Автор вопроса
Andrey S
первая аллокация на 9 - и это 160 байт - больше че...

Первая алокация 9 потому что это правило 8. До 8 элементов ьакет не аллоцируется. А 128это ты путаешь с размером ключа или значения. Если они больше, то в бакет кладется указатель, а для значения делаетмя аллокация

🏳️ Phil Kulin
Первая алокация 9 потому что это правило 8. До 8 э...

https://cs.opensource.google/go/go/+/refs/tags/go1.21.0:src/runtime/map_fast64.go;l=93

🏳️ Phil-Kulin Автор вопроса
Гамлет Avetikyan
https://cs.opensource.google/go/go/+/refs/tags/go1...

Мне нужна пояснительная бригада

🏳️ Phil-Kulin Автор вопроса

Кто-нибудь нашёл?

https://github.com/golang/go/blob/ff00fdfdbeeb72ca8981a04290765452d6a31b26/src/runtime/map.go#L69

🏳️ Phil-Kulin Автор вопроса
Василий Сиунов
https://github.com/golang/go/blob/ff00fdfdbeeb72ca...

У моего вопроса есть целая история тут в чате

🏳️ Phil-Kulin Автор вопроса
Василий Сиунов
Есть ссылка на первую главу?)

Дав вот от того, на что ответил вниз почитать

🏳️ Phil-Kulin Автор вопроса

И вниз по треду даже бенчи делали

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта