r197: allocate index seq names from kalloc
to reduce malloc() overhead.
This commit is contained in:
parent
5c4d040b13
commit
f81f37fef1
15
index.c
15
index.c
|
|
@ -25,6 +25,7 @@ mm_idx_t *mm_idx_init(int w, int k, int b, int is_hpc)
|
||||||
mi = (mm_idx_t*)calloc(1, sizeof(mm_idx_t));
|
mi = (mm_idx_t*)calloc(1, sizeof(mm_idx_t));
|
||||||
mi->w = w, mi->k = k, mi->b = b, mi->is_hpc = is_hpc;
|
mi->w = w, mi->k = k, mi->b = b, mi->is_hpc = is_hpc;
|
||||||
mi->B = (mm_idx_bucket_t*)calloc(1<<b, sizeof(mm_idx_bucket_t));
|
mi->B = (mm_idx_bucket_t*)calloc(1<<b, sizeof(mm_idx_bucket_t));
|
||||||
|
if (!(mm_dbg_flag & 1)) mi->km = km_init();
|
||||||
return mi;
|
return mi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -37,9 +38,12 @@ void mm_idx_destroy(mm_idx_t *mi)
|
||||||
free(mi->B[i].a.a);
|
free(mi->B[i].a.a);
|
||||||
kh_destroy(idx, (idxhash_t*)mi->B[i].h);
|
kh_destroy(idx, (idxhash_t*)mi->B[i].h);
|
||||||
}
|
}
|
||||||
|
if (!mi->km) {
|
||||||
for (i = 0; i < mi->n_seq; ++i)
|
for (i = 0; i < mi->n_seq; ++i)
|
||||||
free(mi->seq[i].name);
|
free(mi->seq[i].name);
|
||||||
free(mi->seq); free(mi->B); free(mi->S); free(mi);
|
free(mi->seq);
|
||||||
|
} else km_destroy(mi->km);
|
||||||
|
free(mi->B); free(mi->S); free(mi);
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint64_t *mm_idx_get(const mm_idx_t *mi, uint64_t minier, int *n)
|
const uint64_t *mm_idx_get(const mm_idx_t *mi, uint64_t minier, int *n)
|
||||||
|
|
@ -228,7 +232,7 @@ static void *worker_pipeline(void *shared, int step, void *in)
|
||||||
old_m = p->mi->n_seq, m = p->mi->n_seq + s->n_seq;
|
old_m = p->mi->n_seq, m = p->mi->n_seq + s->n_seq;
|
||||||
kroundup32(m); kroundup32(old_m);
|
kroundup32(m); kroundup32(old_m);
|
||||||
if (old_m != m)
|
if (old_m != m)
|
||||||
p->mi->seq = (mm_idx_seq_t*)realloc(p->mi->seq, m * sizeof(mm_idx_seq_t));
|
p->mi->seq = (mm_idx_seq_t*)krealloc(p->mi->km, p->mi->seq, m * sizeof(mm_idx_seq_t));
|
||||||
// make room for p->mi->S
|
// make room for p->mi->S
|
||||||
for (i = 0, sum_len = 0; i < s->n_seq; ++i) sum_len += s->seq[i].l_seq;
|
for (i = 0, sum_len = 0; i < s->n_seq; ++i) sum_len += s->seq[i].l_seq;
|
||||||
old_max_len = (p->sum_len + 7) / 8;
|
old_max_len = (p->sum_len + 7) / 8;
|
||||||
|
|
@ -244,7 +248,8 @@ static void *worker_pipeline(void *shared, int step, void *in)
|
||||||
uint32_t j;
|
uint32_t j;
|
||||||
if (p->keep_name) {
|
if (p->keep_name) {
|
||||||
assert(strlen(s->seq[i].name) <= 254); // a long query name breaks BAM
|
assert(strlen(s->seq[i].name) <= 254); // a long query name breaks BAM
|
||||||
seq->name = strdup(s->seq[i].name);
|
seq->name = (char*)kmalloc(p->mi->km, strlen(s->seq[i].name) + 1);
|
||||||
|
strcpy(seq->name, s->seq[i].name);
|
||||||
} else seq->name = 0;
|
} else seq->name = 0;
|
||||||
seq->len = s->seq[i].l_seq;
|
seq->len = s->seq[i].l_seq;
|
||||||
seq->offset = p->sum_len;
|
seq->offset = p->sum_len;
|
||||||
|
|
@ -364,12 +369,12 @@ mm_idx_t *mm_idx_load(FILE *fp)
|
||||||
if (fread(x, 4, 5, fp) != 5) return 0;
|
if (fread(x, 4, 5, fp) != 5) return 0;
|
||||||
mi = mm_idx_init(x[0], x[1], x[2], x[4]);
|
mi = mm_idx_init(x[0], x[1], x[2], x[4]);
|
||||||
mi->n_seq = x[3];
|
mi->n_seq = x[3];
|
||||||
mi->seq = (mm_idx_seq_t*)calloc(mi->n_seq, sizeof(mm_idx_seq_t));
|
mi->seq = (mm_idx_seq_t*)kcalloc(mi->km, mi->n_seq, sizeof(mm_idx_seq_t));
|
||||||
for (i = 0; i < mi->n_seq; ++i) {
|
for (i = 0; i < mi->n_seq; ++i) {
|
||||||
uint8_t l;
|
uint8_t l;
|
||||||
mm_idx_seq_t *s = &mi->seq[i];
|
mm_idx_seq_t *s = &mi->seq[i];
|
||||||
fread(&l, 1, 1, fp);
|
fread(&l, 1, 1, fp);
|
||||||
s->name = (char*)malloc(l + 1);
|
s->name = (char*)kmalloc(mi->km, l + 1);
|
||||||
fread(s->name, 1, l, fp);
|
fread(s->name, 1, l, fp);
|
||||||
s->name[l] = 0;
|
s->name[l] = 0;
|
||||||
fread(&s->len, 4, 1, fp);
|
fread(&s->len, 4, 1, fp);
|
||||||
|
|
|
||||||
2
main.c
2
main.c
|
|
@ -8,7 +8,7 @@
|
||||||
#include "minimap.h"
|
#include "minimap.h"
|
||||||
#include "mmpriv.h"
|
#include "mmpriv.h"
|
||||||
|
|
||||||
#define MM_VERSION "2.0-r191-dirty"
|
#define MM_VERSION "2.0-r197-dirty"
|
||||||
|
|
||||||
void liftrlimit()
|
void liftrlimit()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ typedef struct {
|
||||||
mm_idx_seq_t *seq; // sequence name, length and offset
|
mm_idx_seq_t *seq; // sequence name, length and offset
|
||||||
uint32_t *S; // 4-bit packed sequence
|
uint32_t *S; // 4-bit packed sequence
|
||||||
mm_idx_bucket_t *B; // index
|
mm_idx_bucket_t *B; // index
|
||||||
|
void *km;
|
||||||
} mm_idx_t;
|
} mm_idx_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue