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

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

тут скучно

27 ответов

8 просмотров

У меня не произошла: /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 Автор вопроса
🏳️ 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 Автор вопроса
🏳️ Phil-Kulin Автор вопроса
🏳️ 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 Автор вопроса

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

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

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

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

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
11
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Карта сайта