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 [email protected].
For more options, visit https://groups.google.com/d/optout.