Skip to content

Instantly share code, notes, and snippets.

@ctb
Last active April 6, 2017 08:06
Show Gist options
  • Save ctb/beb9a7eebf1a1282562ff0272efb4dd6 to your computer and use it in GitHub Desktop.
Save ctb/beb9a7eebf1a1282562ff0272efb4dd6 to your computer and use it in GitHub Desktop.
benchmarking RAM allocation against file load time
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Comparing load time with different hash sizes\n",
"\n",
"Q: holding everything else constant, what does increasing `-M` do to load time for k-mers?\n",
"\n",
"A: linear (nearly 1:1) increase in load time with increasing tablesize.\n",
"\n",
"----\n",
"\n",
"To generate the data file `ram-times.out`, do:\n",
"\n",
"```\n",
"for M in 5e6 1e7 5e7 1e8 5e8 1e9 2e9;\n",
"do\n",
" PYTHONPATH=../ ./load-bench.py ../data/100k-filtered.fa -M $M\n",
"done > ram-times.out\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy\n",
"%matplotlib inline\n",
"import pylab"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"fit is: [ 1.34215932e-09 6.11053232e-01]\n",
"slope is 0.61\n"
]
}
],
"source": [
"# load and do a linear fit\n",
"x = numpy.loadtxt('ram-times.out')\n",
"z = numpy.polyfit(x[:,0], x[:,1], 1)\n",
"fit = numpy.poly1d(z)\n",
"print('fit is: {}'.format(z))\n",
"print('slope is {:.2f}'.format(z[1]))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x105498438>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n0P8HY4+wIuJUjiAAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10542b048>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pylab.plot(x[:,0], x[:,1], '.-', label='data')\n",
"pylab.plot(x[:,0], fit(x[:,0]), 'r--', label='fit')\n",
"pylab.xlabel('sum RAM')\n",
"pylab.ylabel('load time (s)')\n",
"pylab.title('load time data + fit, out to 2 GB')\n",
"pylab.legend(loc='lower right')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(1000000000.0, 1.9532125557805489), (10000000000.0, 14.032646466481326), (100000000000.0, 134.82698557348911)]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10539b908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"extrapolate = [1e9, 1e10, 1e11]\n",
"pylab.plot(extrapolate, fit(extrapolate), label='fit')\n",
"pylab.title('load time fit, extrapolated out to 100 GB')\n",
"pylab.xlabel('sum RAM')\n",
"pylab.ylabel('load time (s)')\n",
"pylab.legend(loc='lower right')\n",
"print(list(zip(extrapolate, fit(extrapolate))))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
#! /usr/bin/env python
from __future__ import print_function, unicode_literals
import json
import os
import sys
import threading
import textwrap
import khmer
from khmer import khmer_args
from khmer.khmer_args import (build_counting_args, report_on_config, info,
add_threading_args, calculate_graphsize,
sanitize_help)
from khmer.kfile import check_file_writable
from khmer.kfile import check_input_files
from khmer.kfile import check_space_for_graph
from khmer.khmer_logger import (configure_logging, log_info, log_error,
log_warn)
import time
def get_parser():
parser = build_counting_args("Build a k-mer countgraph from the given"
" sequences.",
citations=['counting', 'SeqAn'])
add_threading_args(parser)
parser.add_argument('input_sequence_filename', nargs='+',
help="The names of one or more FAST[AQ] input "
"sequence files.")
parser.add_argument('-b', '--no-bigcount', dest='bigcount', default=True,
action='store_false', help="The default behaviour is "
"to count past 255 using bigcount. This flag turns "
"bigcount off, limiting counts to 255.")
parser.add_argument('--summary-info', '-s', type=str, default=None,
metavar="FORMAT", choices=[str('json'), str('tsv')],
help="What format should the machine readable run "
"summary be in? (`json` or `tsv`, disabled by"
" default)")
parser.add_argument('-f', '--force', default=False, action='store_true',
help='Overwrite output file if it exists')
parser.add_argument('-q', '--quiet', dest='quiet', default=False,
action='store_true')
return parser
def main():
args = sanitize_help(get_parser()).parse_args()
configure_logging(args.quiet)
report_on_config(args)
filenames = args.input_sequence_filename
log_info('making countgraph')
start = time.time()
countgraph = khmer_args.create_countgraph(args)
countgraph.set_use_bigcount(False)
filename = None
total_num_reads = 0
for index, filename in enumerate(filenames):
log_info('consuming input {input}', input=filename)
rparser = khmer.ReadParser(filename)
countgraph.consume_seqfile_with_reads_parser(rparser)
total_num_reads += rparser.num_reads
log_info('DONE.')
end = time.time()
print(sum(countgraph.hashsizes()), end - start)
if __name__ == '__main__':
main()
# vim: set filetype=python tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
# vim: set textwidth=79:
4999802 0.6113121509552002
9999936 0.6644558906555176
49999814 0.7513549327850342
99999894 0.9065320491790771
499999864 1.3282811641693115
999999738 1.7348880767822266
1999999730 2.948660135269165
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment