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.

Reply via email to