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+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to