Great! Very kind of you On Fri, Sep 1, 2017 at 11:01 AM, peterGo <go.peter...@gmail.com> wrote:
> Michael and Sebastien, > > Since my bytconv package is currently private, I'm fixing it up for > publication. I hope to make bytconv available in go get'able form within a > week. I'll let you know when it' is avalable. > > Peter > > On Friday, September 1, 2017 at 3:50:29 AM UTC-4, Sebastien Binet wrote: >> >> Hi, >> >> I'd also be very interested in looking at 'bytconv'. And most probably >> should use it in anger :) >> >> -s >> >> sent from my droid >> >> On Aug 31, 2017 8:28 PM, "Michael Jones" <michae...@gmail.com> wrote: >> >>> Nice! Is "bytconv" shared somewhere? >>> >>> On Thu, Aug 31, 2017 at 10:53 AM, peterGo <go.pe...@gmail.com> wrote: >>> >>>> Michael, >>>> >>>> n your code, you have : >>>> >>>> const n = 1000 * 1000 >>>> >>>> for i := 0; i < n && scan.Scan(); i++ { >>>> d, _ := strconv.Atoi(scan.Text()) >>>> array[i] = int64(d) >>>> } >>>> >>>> https://play.golang.org/p/SgpAXyvsGs >>>> >>>> Here's a benchmark that demonstrates the fundamental issue, unnecessary >>>> string conversions. >>>> , >>>> BenchmarkAtoiBytconv-4 50000000 30.4 ns/op 0 B/op 0 >>>> allocs/op >>>> BenchmarkAtoiStrconv-4 20000000 102 ns/op 8 B/op 1 >>>> allocs/op >>>> >>>> https://play.golang.org/p/oSQ8RZeGL7 >>>> >>>> Peter >>>> >>>> >>>> On Thursday, August 31, 2017 at 12:24:20 PM UTC-4, peterGo wrote: >>>>> >>>>> Michael, >>>>> >>>>> Your read times look slow to me. I used bytconv instead of strconv. >>>>> >>>>> bytconv: >>>>> read 1000000 98.517584ms >>>>> sort 1000000 481.994354ms >>>>> >>>>> strconv: >>>>> read 1000000 174.720883ms >>>>> sort 1000000 479.437831ms >>>>> >>>>> bytconv is the missing Go standard library package. bytconv is the >>>>> byte input analog of string input strconv. >>>>> >>>>> Peter >>>>> >>>>> On Wednesday, August 30, 2017 at 7:43:49 PM UTC-4, Michael Jones wrote: >>>>>> >>>>>> good point. I was trying to show that the buffered stdin was "just >>>>>> like" normal scanning but the performance was less compared to the >>>>>> updated >>>>>> scanning code. >>>>>> >>>>>> here is another version, this time with a data generator and since >>>>>> the input is line oriented, the default split function is fine. >>>>>> >>>>>> https://play.golang.org/p/SgpAXyvsGs >>>>>> read 1000000 65.362993ms >>>>>> sort 1000000 187.092493ms >>>>>> >>>>>> >>>>>> On Wed, Aug 30, 2017 at 2:56 PM, Patrick Smith <pat42...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> That is simpler, but slower. Not nearly as slow as using unbuffered >>>>>>> io though. Timings on my machine, reading 1e6 integers chosen randomly >>>>>>> from >>>>>>> the range [0,1e18): >>>>>>> >>>>>>> Original code https://play.golang.org/p/grB-muK7hw >>>>>>> 5.626974435s >>>>>>> 155.367779ms >>>>>>> >>>>>>> Original poster's optimized code https://play.golang.org/p >>>>>>> /1Aoxwwv-zo >>>>>>> 168.638597ms >>>>>>> 150.923225ms >>>>>>> >>>>>>> Michael's simpler code https://play.golang.org/p/tMyipz6sYU >>>>>>> 954.543351ms >>>>>>> 166.710399ms >>>>>>> >>>>>>> So this is about 6 times slower. My guess is this is due to the use >>>>>>> of reflection in fmt.Fscanf. But that is just a guess; I don't really >>>>>>> have >>>>>>> any evidence to back it up. >>>>>>> >>>>>>> On Wed, Aug 30, 2017 at 1:33 PM, Michael Jones <michae...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> This can be much simpler... >>>>>>>> https://play.golang.org/p/tMyipz6sYU >>>>>>>> >>>>>>>> On Wed, Aug 30, 2017 at 7:55 AM, Nilsocket <nils...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> Can you provide example code for how you read the input? >>>>>>>>>> >>>>>>>>> >>>>>>>>> Both of them were given same input size is:1000000, (i.e., 1 >>>>>>>>> million) >>>>>>>>> >>>>>>>>> https://play.golang.org/p/grB-muK7hw >>>>>>>>> // Time taken to read input : 9.840256889s >>>>>>>>> // Time taken to sort: 731.469604ms >>>>>>>>> >>>>>>>>> I have implemented the same using bufio: >>>>>>>>> >>>>>>>>> https://play.golang.org/p/1Aoxwwv-zo >>>>>>>>> // Time taken to read input : 377.038152ms >>>>>>>>> // Time taken to sort: 688.20638ms >>>>>>>>> >>>>>>>>> -- >>>>>>>>> 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...@googlegroups.com. >>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Michael T. Jones >>>>>>>> michae...@gmail.com >>>>>>>> >>>>>>>> -- >>>>>>>> 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...@googlegroups.com. >>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Michael T. Jones >>>>>> michae...@gmail.com >>>>>> >>>>> -- >>>> 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...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> >>> >>> -- >>> Michael T. Jones >>> michae...@gmail.com >>> >>> -- >>> 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...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> > -- Michael T. Jones michael.jo...@gmail.com -- 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.