From d422bdbed92a5734a72abb9f4069ca35d449d99e Mon Sep 17 00:00:00 2001 From: Heng Li Date: Mon, 22 Feb 2021 23:26:03 -0500 Subject: [PATCH] debug flag to measure memory --- bwa.c | 1 + bwa.h | 4 +++- bwamem.c | 2 ++ fastmap.c | 3 ++- utils.c | 15 +++++++++++++-- utils.h | 5 +++-- 6 files changed, 24 insertions(+), 6 deletions(-) diff --git a/bwa.c b/bwa.c index f35b4be..8aacde3 100644 --- a/bwa.c +++ b/bwa.c @@ -40,6 +40,7 @@ #endif int bwa_verbose = 3; +int bwa_dbg = 0; char bwa_rg_id[256]; char *bwa_pg; diff --git a/bwa.h b/bwa.h index 9668950..95c324b 100644 --- a/bwa.h +++ b/bwa.h @@ -43,6 +43,8 @@ #define BWTALGO_BWTSW 2 #define BWTALGO_IS 3 +#define BWA_DBG_QNAME 0x1 + typedef struct { bwt_t *bwt; // FM-index bntseq_t *bns; // information on the reference sequences @@ -58,7 +60,7 @@ typedef struct { char *name, *comment, *seq, *qual, *sam; } bseq1_t; -extern int bwa_verbose; +extern int bwa_verbose, bwa_dbg; extern char bwa_rg_id[256]; #ifdef __cplusplus diff --git a/bwamem.c b/bwamem.c index 966e8d0..104d0c9 100644 --- a/bwamem.c +++ b/bwamem.c @@ -1223,10 +1223,12 @@ static void worker2(void *data, int i, int tid) mem_mark_primary_se(w->opt, w->regs[i].n, w->regs[i].a, w->n_processed + i); if (w->opt->flag & MEM_F_PRIMARY5) mem_reorder_primary5(w->opt->T, &w->regs[i]); mem_reg2sam(w->opt, w->bns, w->pac, &w->seqs[i], &w->regs[i], 0, 0); + fprintf(stderr, "Q\t%s\t%.3f\n", w->seqs[i].name, peakrss() / 1073741824.0); free(w->regs[i].a); } else { if (bwa_verbose >= 4) printf("=====> Finalizing read pair '%s' <=====\n", w->seqs[i<<1|0].name); mem_sam_pe(w->opt, w->bns, w->pac, w->pes, (w->n_processed>>1) + i, &w->seqs[i<<1], &w->regs[i<<1]); + fprintf(stderr, "Q\t%s\t%.3f\n", w->seqs[i<<1|0].name, peakrss() / 1073741824.0); free(w->regs[i<<1|0].a); free(w->regs[i<<1|1].a); } } diff --git a/fastmap.c b/fastmap.c index c865426..7c2f3a2 100644 --- a/fastmap.c +++ b/fastmap.c @@ -156,7 +156,7 @@ int main_mem(int argc, char *argv[]) aux.opt = opt = mem_opt_init(); memset(&opt0, 0, sizeof(mem_opt_t)); - while ((c = getopt(argc, argv, "51qpaMCSPVYjuk:c:v:s:r:t:R:A:B:O:E:U:w:L:d:T:Q:D:m:I:N:o:f:W:x:G:h:y:K:X:H:")) >= 0) { + while ((c = getopt(argc, argv, "51qpaMCSPVYjuk:c:v:s:r:t:R:A:B:O:E:U:w:L:d:T:Q:D:m:I:N:o:f:W:x:G:h:y:K:X:H:F:")) >= 0) { if (c == 'k') opt->min_seed_len = atoi(optarg), opt0.min_seed_len = 1; else if (c == '1') no_mt_io = 1; else if (c == 'x') mode = optarg; @@ -192,6 +192,7 @@ int main_mem(int argc, char *argv[]) else if (c == 'C') aux.copy_comment = 1; else if (c == 'K') fixed_chunk_size = atoi(optarg); else if (c == 'X') opt->mask_level = atof(optarg); + else if (c == 'F') bwa_dbg = atoi(optarg); else if (c == 'h') { opt0.max_XA_hits = opt0.max_XA_hits_alt = 1; opt->max_XA_hits = opt->max_XA_hits_alt = strtol(optarg, &p, 10); diff --git a/utils.c b/utils.c index 21d5281..9ceb1be 100644 --- a/utils.c +++ b/utils.c @@ -279,17 +279,28 @@ int err_gzclose(gzFile file) * Timer * *********/ -double cputime() +double cputime(void) { struct rusage r; getrusage(RUSAGE_SELF, &r); return r.ru_utime.tv_sec + r.ru_stime.tv_sec + 1e-6 * (r.ru_utime.tv_usec + r.ru_stime.tv_usec); } -double realtime() +double realtime(void) { struct timeval tp; struct timezone tzp; gettimeofday(&tp, &tzp); return tp.tv_sec + tp.tv_usec * 1e-6; } + +long peakrss(void) +{ + struct rusage r; + getrusage(RUSAGE_SELF, &r); +#ifdef __linux__ + return r.ru_maxrss * 1024; +#else + return r.ru_maxrss; +#endif +} diff --git a/utils.h b/utils.h index 9d80784..d4d4550 100644 --- a/utils.h +++ b/utils.h @@ -84,8 +84,9 @@ extern "C" { int err_fclose(FILE *stream); int err_gzclose(gzFile file); - double cputime(); - double realtime(); + double cputime(void); + double realtime(void); + long peakrss(void); void ks_introsort_64 (size_t n, uint64_t *a); void ks_introsort_128(size_t n, pair64_t *a);