diff options
| author | dam <dam@gudinoff> | 2022-11-15 01:12:42 +0000 |
|---|---|---|
| committer | dam <dam@gudinoff> | 2022-11-15 01:12:42 +0000 |
| commit | 01ea9b45bcbb950a51fcb2eedba1b563d8044805 (patch) | |
| tree | 21cbca63474cbc7fc35c63997e7757f823b1700c | |
| parent | 625b44ca131d4b74c73ffb32aef19c35aa08cb09 (diff) | |
| download | task-time-tracker-01ea9b45bcbb950a51fcb2eedba1b563d8044805.tar.zst task-time-tracker-01ea9b45bcbb950a51fcb2eedba1b563d8044805.zip | |
Fixed bug on import_from_csv.
| -rw-r--r-- | main.c | 97 |
1 files changed, 97 insertions, 0 deletions
@@ -460,10 +460,34 @@ void update_times(database_st *db) { } } +int64_t super_add(int64_t x, int64_t y) { + int64_t result; + if (__builtin_add_overflow(x, y, &result)) { + result = (x > 0 ? INT64_MAX : INT64_MIN); +// result = (x >> 63) ^ INT64_MAX; +// result = ((uint64_t)x >> 63) + INT64_MAX; + } + return result; +} + // Recalculates database totals. void update_total_times(database_st *db) { assert(db != NULL); + /* + // 100 MOPS + int64_t *total_times = db->total_times; + memset(db->total_times, 0, NUM_WEEK_DAYS * SIZEOF_INT64); + for (size_t idx = 0; idx < db->count; idx++) { + int64_t *times = db->tasks[idx].times; + for (int it = 0; it < NUM_WEEK_DAYS; it++) { + total_times[it] = add_int64(total_times[it], times[it]); + } + } + */ + + /* + // 120 MOPS int64_t *d0 = &db->total_times[0]; int64_t *d1 = &db->total_times[1]; int64_t *d2 = &db->total_times[2]; @@ -483,6 +507,66 @@ void update_total_times(database_st *db) { *d5 = add_int64(*d5, times[5]); *d6 = add_int64(*d6, times[6]); } + */ + + /* + // 122 MOPS + memset(db->total_times, 0, NUM_WEEK_DAYS * SIZEOF_INT64); + for (size_t idx = 0; idx < db->count; idx++) { + int64_t *times = db->tasks[idx].times; + db->total_times[0] = add_int64(db->total_times[0], times[0]); + db->total_times[1] = add_int64(db->total_times[1], times[1]); + db->total_times[2] = add_int64(db->total_times[2], times[2]); + db->total_times[3] = add_int64(db->total_times[3], times[3]); + db->total_times[4] = add_int64(db->total_times[4], times[4]); + db->total_times[5] = add_int64(db->total_times[5], times[5]); + db->total_times[6] = add_int64(db->total_times[6], times[6]); + } + */ + + /* + // 140 MOPS + memset(db->total_times, 0, NUM_WEEK_DAYS * SIZEOF_INT64); + for (size_t idx = 0; idx < db->count; idx++) { + int64_t *times = db->tasks[idx].times; + __builtin_add_overflow(db->total_times[0], times[0], &db->total_times[0]); + __builtin_add_overflow(db->total_times[1], times[1], &db->total_times[1]); + __builtin_add_overflow(db->total_times[2], times[2], &db->total_times[2]); + __builtin_add_overflow(db->total_times[3], times[3], &db->total_times[3]); + __builtin_add_overflow(db->total_times[4], times[4], &db->total_times[4]); + __builtin_add_overflow(db->total_times[5], times[5], &db->total_times[5]); + __builtin_add_overflow(db->total_times[6], times[6], &db->total_times[6]); + } + */ + + // 140 MOPS + memset(db->total_times, 0, NUM_WEEK_DAYS * SIZEOF_INT64); + for (size_t idx = 0; idx < db->count; idx++) { + int64_t *times = db->tasks[idx].times; + db->total_times[0] = super_add(db->total_times[0], times[0]); + db->total_times[1] = super_add(db->total_times[1], times[1]); + db->total_times[2] = super_add(db->total_times[2], times[2]); + db->total_times[3] = super_add(db->total_times[3], times[3]); + db->total_times[4] = super_add(db->total_times[4], times[4]); + db->total_times[5] = super_add(db->total_times[5], times[5]); + db->total_times[6] = super_add(db->total_times[6], times[6]); + } + + /* + // 110 MOPS + memset(db->total_times, 0, NUM_WEEK_DAYS * SIZEOF_INT64); + int64_t *totals = db->total_times; + for (size_t idx = 0; idx < db->count; idx++) { + const int64_t *restrict times = db->tasks[idx].times; + totals[0] = add_int64(totals[0], times[0]); + totals[1] = add_int64(totals[1], times[1]); + totals[2] = add_int64(totals[2], times[2]); + totals[3] = add_int64(totals[3], times[3]); + totals[4] = add_int64(totals[4], times[4]); + totals[5] = add_int64(totals[5], times[5]); + totals[6] = add_int64(totals[6], times[6]); + } + */ } // Resets the times of the provided task (and adjusts database totals). @@ -1256,6 +1340,19 @@ int main(int argc, char *argv[]) { load_database(&database, db_file_path); + // TODO WIP WIP + clock_t start = clock() ; + update_total_times(&database); + clock_t end = clock() ; + double time_sec = (end-start) / (double)CLOCKS_PER_SEC; + double speed = (double)database.count / (1000000.0 * time_sec); + double usPM = 1000000.0 * 1000.0 * time_sec / (double)database.count; + endwin(); + fprintf(stderr, "update of %zd took: %9.3fms\n", database.count, time_sec); + fprintf(stderr, "speed: %9.3f MOPS\n", speed); + fprintf(stderr, "tpm : %9.3f usPM\n", usPM); + return EXIT_FAILURE; + flushinp(); ungetch(KEY_RESIZE); for (int key; ((key = getch()) != 'q') && (key != 'Q'); ) { |
