gpt4 book ai didi

performance - 我可以进一步优化它以使其运行得更快吗?

转载 作者:IT王子 更新时间:2023-10-29 01:19:49 25 4
gpt4 key购买 nike

正如您在下面的 pprof 输出中看到的,我有这些嵌套的 for 循环,它们占用了我程序的大部分时间。源代码在 golang 中,但代码解释如下:

  8.55mins    1.18hrs     20:   for k := range mapSource {
4.41mins 1.20hrs 21: if positions, found := mapTarget[k]; found {
. . 22: // save all matches
1.05mins 1.05mins 23: for _, targetPos := range positions {
2.25mins 2.33mins 24: for _, sourcePos := range mapSource[k] {
1.28s 15.78s 25: matches = append(matches, match{int32(targetPos), int32(sourcePos)})
. . 26: }
. . 27: }
. . 28: }
. . 29: }

目前我使用的结构是 2 个 map[int32][]int32、targetMap 和 sourceMap。

对于给定的键,这些映射包含一个整数数组。现在我想在两个映射中找到匹配的键,并将元素的组合保存在数组中。

例如:

sourceMap[1] = [3,4]
sourceMap[5] = [9,10]

targetMap[1] = [1,2,3]
targetMap[2] = [2,3]
targetMap[3] = [1,2]

唯一的共同键是1,结果将是[(3,1), (3,2), (3,3), (4,1), (4,2), (4,3)]

是否有任何可能的方法(更合适的数据结构或其他)可以提高我的程序的速度?

在我的例子中,映射可以包含 1000 到 150000 个键,而里面的数组通常很小。

编辑:并发不是一个选项,因为它已经在多个线程中同时运行了多次。

最佳答案

Can I optimise this further so that it runs faster?

Is there any possible way (a more appropriate data structure or whatever) that could improve the speed of my program?

可能。


The XY problem is asking about your attempted solution rather than your actual problem. This leads to enormous amounts of wasted time and energy, both on the part of people asking for help, and on the part of those providing help.


我们甚至没有关于您的问题的最基本信息,原始输入数据的形式、内容和频率的描述,以及您想要的输出。哪些原始数据应该驱动基准?

我创建了一些虚构的原始数据,产生了一些虚构的输出和结果:

BenchmarkPeterSO-4   30    44089894 ns/op    5776666 B/op      31 allocs/op
BenchmarkIvan-4 10 152300554 ns/op 26023924 B/op 6022 allocs/op

您的算法可能很慢。

关于performance - 我可以进一步优化它以使其运行得更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47041032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com