this has a little improved performance BenchmarkFindHex-2 2000000 954 ns/op 0 B/op 0 allocs/op BenchmarkFindHexOpti-2 2000000 *759 ns/op* 0 B/op 0 allocs/op
Le mercredi 15 novembre 2017 19:13:15 UTC+1, Tamás Gulácsi a écrit : > > Help the compiler and put everything that can be looked up beforehand into > a separate variable: > > hhi0, hhi1 := bufferHexHash[i], bufferHexHash[i+1] > for j = 0; j < lenBufferHexSearch; j++ { > hsj0, hsj1 := bufferHexSearch[j][0], bufferHexSearch[j][1] > for k = 0; k < lenMaskHex; k++ { > if hsj0 == hhi0&maskHex[k][0] && hsj1 == > hhi1&maskHex[k][1] { > bFind = true > break LoopSearch > } > } > } > > 2017. november 15., szerda 18:15:32 UTC+1 időpontban Christian LeMoussel a > következőt írta: >> >> Hi, >> >> I have this program (https://play.golang.org/p/qHPzjj2uj3) that take a >> decent amount of time for computing. >> Let’s open pprof and see what it spent its time on. >> Type: cpu >> Time: Nov 15, 2017 at 5:48pm (CET) >> Duration: 9.92s, Total samples = 9.78s (98.54%) >> Entering interactive mode (type "help" for commands, "o" for options) >> (pprof) list main.main >> Total: 9.78s >> ROUTINE ======================== main.main in >> c:\Users\lemoussel\go\src\C-Libraries\main.go >> 80ms 9.78s (flat, cum) 100% of Total >> . . 170: bufferHexHash, err := HexToUint32(hash, >> binary.BigEndian) >> . . 171: /*for i, val := range bufferHexHash { >> . . 172: fmt.Printf("bufferHexHash[%d]: >> %08x \n", i, val) >> . . 173: }*/ >> . . 174: startTime = time.Now() >> 20ms 20ms 175: for i := 0; i < 10000000; i++ { >> 60ms 9.76s 176: result = findHex(bufferHexSearch, >> bufferHexHash) >> . . 177: } >> . . 178: fmt.Printf("findHex() Find: >> %t Time : %.2f sec.\n", result, time.Now().Sub(startTime).Seconds()) >> . . 179:} >> >> Ok, so it seems we spent most of the time in findHex, makes sense! >> >> (pprof) list main.findHex >> Total: 9.78s >> ROUTINE ======================== main.findHex in >> c:\Users\lemoussel\go\src\C-Libraries\main.go >> 9.52s 9.52s (flat, cum) 97.34% of Total >> . . 72: {0x00000fff, 0xfffffff0, 0x0}, // 5 >> . . 73: {0x000000ff, 0xffffffff, 0x0}, // 6 >> . . 74: {0x0000000f, 0xffffffff, 0xf0000000}, // 7 >> . . 75:} >> . . 76: >> 20ms 20ms 77:func findHex(bufferHexSearch [8][3]uint32, >> bufferHexHash []uint32) bool { >> . . 78: var bFind = false >> . . 79: var i, j, k int >> . . 80: var lenBufferHexHash = len(bufferHexHash) >> . . 81: var lenBufferHexSearch = >> len(bufferHexSearch) >> . . 82: var lenMaskHex = len(maskHex) >> . . 83:LoopSearch: >> 300ms 300ms 84: for i = 0; i < lenBufferHexHash; i++ { >> 410ms 410ms 85: for j = 0; j < >> lenBufferHexSearch; j++ { >> 2.53s 2.53s 86: for k = 0; k < >> lenMaskHex; k++ { >> 6.16s 6.16s 87: if >> bufferHexSearch[j][0] == bufferHexHash[i]&maskHex[k][0] && >> 100ms 100ms 88: >> bufferHexSearch[j][1] == bufferHexHash[i+1]&maskHex[k][1] { >> . . 89: bFind = >> true >> . . 90: break >> LoopSearch >> . . 91: } >> . . 92: } >> . . 93: } >> >> Oh ! most of the time is in the line if bufferHexSearch[j][0] == >> bufferHexHash[i]&maskHex[k][0] && >> >> I don't understand why? >> Should I use goroutine to compute concurrently? >> I'm interested in any recommendations to optimize this program. >> >> >> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.