From 90f2fe121f454f3f1b5cdaeaaebe639bb86d4578 Mon Sep 17 00:00:00 2001 From: Shraddha Agrawal <shraddha.agrawal000@gmail.com> Date: Mon, 29 Jan 2024 22:31:57 +0530 Subject: [PATCH] attempt 10: ignore reading the decimal point when processing city temp --- README.md | 3 ++- main.go | 21 +++++++++++---------- profiles/cpu-remove-concatenation.prof | Bin 0 -> 21327 bytes 3 files changed, 13 insertions(+), 11 deletions(-) create mode 100644 profiles/cpu-remove-concatenation.prof diff --git a/README.md b/README.md index 92cac43..47ab291 100644 --- a/README.md +++ b/README.md @@ -11,4 +11,5 @@ |6|Convert temperature from `string` to `int64`, process in `int64` and convert to `float64` at the end. |2:51.50|-41.14|[7812da4](https://github.com/shraddhaag/1brc/commit/7812da4d0be07dd4686d5f9b9df1e93b08cd0dd1)| |7|In the city <> temperatures map, replaced the value for each key (city) to preprocessed min, max, count and sum of all temperatures instead of storing all recorded temperatures for the city.|1:39.81|-71.79|[e5213a8](https://github.com/shraddhaag/1brc/commit/e5213a836b17bec0a858474a11f07c902e724bba)| |8|Use producer consumer pattern to read file in chunks and process the chunks in parallel.|1:43.82|+14.01|[067f2a4](https://github.com/shraddhaag/1brc/commit/067f2a44c0d6b3bb7cc073639364f733bce09e3e)| -|9|Reduce memory allocation by processing each read chunk into a map. Result channel now can collate the smaller processed chunk maps.|0:28.544|-75.286|| \ No newline at end of file +|9|Reduce memory allocation by processing each read chunk into a map. Result channel now can collate the smaller processed chunk maps.|0:28.544|-75.286|[d4153ac](https://github.com/shraddhaag/1brc/commit/d4153ac7a841170a5ceee47d930e97738b5a19f6)| +|10|Avoid string concatenation overhead by not reading the decimal point when processing city temperature.|0:24.571|-3.973|| \ No newline at end of file diff --git a/main.go b/main.go index 7d66a20..8ff65ea 100644 --- a/main.go +++ b/main.go @@ -176,24 +176,19 @@ func readFileLineByLineIntoAMap(filepath string) (map[string]cityTemperatureInfo return mapOfTemp, nil } -func convertStringToInt64(input string) int64 { - input = input[:len(input)-2] + input[len(input)-1:] - output, _ := strconv.ParseInt(input, 10, 64) - return output -} - func processReadChunk(buf []byte, resultStream chan<- map[string]cityTemperatureInfo) { var stringsBuilder strings.Builder toSend := make(map[string]cityTemperatureInfo) var city string for _, char := range buf { - if char == ';' { + switch char { + case ';': city = stringsBuilder.String() stringsBuilder.Reset() - } else if char == '\n' { + case '\n': if stringsBuilder.Len() != 0 && len(city) != 0 { - temp := convertStringToInt64(stringsBuilder.String()) + temp, _ := strconv.ParseInt(stringsBuilder.String(), 10, 64) stringsBuilder.Reset() if val, ok := toSend[city]; ok { @@ -215,8 +210,14 @@ func processReadChunk(buf []byte, resultStream chan<- map[string]cityTemperature sum: temp, } } + + city = "" + } + case '.': + if len(city) == 0 { + stringsBuilder.WriteByte(char) } - } else { + default: stringsBuilder.WriteByte(char) } } diff --git a/profiles/cpu-remove-concatenation.prof b/profiles/cpu-remove-concatenation.prof new file mode 100644 index 0000000000000000000000000000000000000000..c56b805f18a37a73a8960ce5c05eea49e79936f2 GIT binary patch literal 21327 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 W7AYvs|NjR70RR6{O|A;Dr~m*rzfNrc literal 0 HcmV?d00001