Skip to content

Instantly share code, notes, and snippets.

@synapticarbors
Created January 13, 2014 01:28
Show Gist options
  • Save synapticarbors/8393229 to your computer and use it in GitHub Desktop.
Save synapticarbors/8393229 to your computer and use it in GitHub Desktop.
Benchmarking some code from the numba mailing list
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Comparison of pure python, autojit and jit versions of the `legal` method"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numba\n",
"from numba import bool_, list_\n",
"\n",
"dim = 3\n",
"d = 3\n",
"o = [[[False]*d for _ in range(d)] for _ in range(d)]\n",
"\n",
"def legal(i,j,k,mat):\n",
" return 0<=i and 0<=j and 0<=k and i<dim and j<dim and k<dim and not(mat[i][j][k])\n",
"\n",
"aj_legal = numba.autojit()(legal)\n",
"j_legal = numba.jit(numba.bool_(numba.i8, numba.i8, numba.i8, list_(list_(list_(bool_, 3), 3), 3)))(legal)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%timeit legal(0,1,0,o)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1000000 loops, best of 3: 594 ns per loop\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%timeit aj_legal(0,1,0,o)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1 loops, best of 3: 8.11 \u00b5s per loop\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%timeit j_legal(0,1,0,o)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1000000 loops, best of 3: 510 ns per loop\n"
]
}
],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print legal(0,1,0,o)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"True\n"
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print aj_legal(0,1,0,o)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"True\n"
]
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print j_legal(0,1,0,o)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"True\n"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's consider a case where `o` is a numpy array"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"o_arr = np.array(o, dtype=np.bool)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def legal_arr(i,j,k,mat):\n",
" return 0<=i and 0<=j and 0<=k and i<dim and j<dim and k<dim and not(mat[i,j,k])\n",
"\n",
"aj_legal_arr = numba.autojit()(legal_arr)\n",
"j_legal_arr = numba.jit(numba.bool_(numba.i8, numba.i8, numba.i8, numba.bool_[:,:,:]))(legal_arr)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%timeit legal_arr(0,1,0,o_arr)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1000000 loops, best of 3: 695 ns per loop\n"
]
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%timeit aj_legal_arr(0,1,0,o_arr)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1 loops, best of 3: 6.91 \u00b5s per loop\n"
]
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%timeit j_legal_arr(0,1,0,o_arr)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1000000 loops, best of 3: 320 ns per loop\n"
]
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print legal_arr(0,1,0,o_arr)\n",
"print aj_legal_arr(0,1,0,o_arr)\n",
"print j_legal_arr(0,1,0,o_arr)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"True\n",
"True\n",
"True\n"
]
}
],
"prompt_number": 25
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment