Skip to content

Instantly share code, notes, and snippets.

@sdiehl
Created August 17, 2012 02:35
Show Gist options
  • Select an option

  • Save sdiehl/3375416 to your computer and use it in GitHub Desktop.

Select an option

Save sdiehl/3375416 to your computer and use it in GitHub Desktop.
Numba / Cython / Fortran
$ uname -a
Linux thinkpad 3.4.9-ARCH #1 SMP PREEMPT Sat Jul 9 14:57:41 CEST 2011 x86_64 Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz GenuineIntel GNU/Linux
$ gcc --version
gcc (GCC) 4.6.1 20110819 (prerelease)
$ gfortran --version
GNU Fortran (GCC) 4.6.1 20110819 (prerelease)
# ========
# n=200
# ========
$ python a.py
time = 3.08248782158
sum(D) = 129281.283888
$ gfortran -Wall -Wextra -Wimplicit-interface -fPIC -Werror -fmax-errors=1 -O3 -march=native -ffast-math -funroll-loops a.f90
time = 3.33300000000000003E-003
sum(D) = 126301.16313791432
$ gfortran -Wall -Wextra -Wimplicit-interface -fPIC -Werror -fmax-errors=1 -O3 -march=native -ffast-math -funroll-loops a-iter.f90
$ ./a.out
time = 6.10626800000000020E-004
sum(D) = 126301.16313791432
# Cython Built with GCC
$ ipython
In [1]: import numpy as np
In [2]: from memview_bench_v4 import pairwise
In [3]: X = np.random.random((500, 3))
In [4]: timeit pairwise(X)
100 loops, best of 3: 2.55 ms per loop
# ========
# n=2000
# ========
$ python a.py
time = 49.7804400921
sum(D) = 2002766.86661
$ ./a.out
time = 3.33300000000000003E-003
sum(D) = 126301.16313791432
In [3]: X = np.random.random((2000, 3))
In [4]: time D = pairwise(X)
CPU times: user 0.05 s, sys: 0.08 s, total: 0.13 s
Wall time: 0.13 s
# ========
# n = 10000
# ========
In [5]: X = np.random.random((10000, 3))
In [6]: time D = pairwise(X)
CPU times: user 1.02 s, sys: 0.97 s, total: 1.99 s
Wall time: 2.00 s
In [7]: %timeit pairwise(X)
10 loops, best of 3: 40.6 ms per loop
$ python numba_pairwise.py (env: science)
{'blocks': {0: <llvm.core.BasicBlock object at 0x133ef90>,
33: <llvm.core.BasicBlock object at 0x133efd0>,
43: <llvm.core.BasicBlock object at 0xcf9050>,
46: <llvm.core.BasicBlock object at 0xcf9090>,
49: <llvm.core.BasicBlock object at 0xcf9110>,
52: <llvm.core.BasicBlock object at 0xcf9150>,
62: <llvm.core.BasicBlock object at 0xcf9190>,
65: <llvm.core.BasicBlock object at 0xcf91d0>,
68: <llvm.core.BasicBlock object at 0xcf9250>,
77: <llvm.core.BasicBlock object at 0xcf9290>,
87: <llvm.core.BasicBlock object at 0xcf92d0>,
90: <llvm.core.BasicBlock object at 0xcf9310>,
93: <llvm.core.BasicBlock object at 0xcf9390>,
158: <llvm.core.BasicBlock object at 0xcf9350>,
178: <llvm.core.BasicBlock object at 0xcf9210>,
182: <llvm.core.BasicBlock object at 0xcf90d0>},
'blocks_dom': {0: set([0]),
33: set([0, 33]),
43: set([0, 33, 43, 46, 49, 52, 65, 178]),
46: set([0, 33, 46]),
49: set([0, 33, 46, 49]),
52: set([0, 33, 46, 49, 52]),
62: set([0, 33, 46, 49, 52, 62, 65, 68, 77, 90, 158]),
65: set([0, 33, 46, 49, 52, 65]),
68: set([0, 33, 46, 49, 52, 65, 68]),
77: set([0, 33, 46, 49, 52, 65, 68, 77]),
87: set([0, 33, 46, 49, 52, 65, 68, 77, 87, 90, 93]),
90: set([0, 33, 46, 49, 52, 65, 68, 77, 90]),
93: set([0, 33, 46, 49, 52, 65, 68, 77, 90, 93]),
158: set([0, 33, 46, 49, 52, 65, 68, 77, 90, 158]),
178: set([0, 33, 46, 49, 52, 65, 178]),
182: set([0, 33, 46, 182])},
'blocks_in': {0: set(),
33: set([0]),
43: set([178]),
46: set([33, 43]),
49: set([46]),
52: set([49]),
62: set([158]),
65: set([52, 62]),
68: set([65]),
77: set([68]),
87: set([93]),
90: set([77, 87]),
93: set([90]),
158: set([90]),
178: set([65]),
182: set([46])},
'blocks_out': {0: set([33]),
33: set([46]),
43: set([46]),
46: set([49, 182]),
49: set([52]),
52: set([65]),
62: set([65]),
65: set([68, 178]),
68: set([77]),
77: set([90]),
87: set([90]),
90: set([93, 158]),
93: set([87]),
158: set([62]),
178: set([43]),
182: set()},
'blocks_reaching': {0: set([0]),
33: set([0, 33]),
43: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
46: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
49: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
52: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
62: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
65: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
68: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
77: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
87: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
90: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
93: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
158: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
178: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178]),
182: set([0,
33,
43,
46,
49,
52,
62,
65,
68,
77,
87,
90,
93,
158,
178,
182])},
'blocks_reads': {0: set([0, 1]),
33: set([2]),
43: set(),
46: set([6]),
49: set(),
52: set([2]),
62: set(),
65: set([7]),
68: set(),
77: set([3]),
87: set(),
90: set([9]),
93: set([0, 6, 7, 8, 9]),
158: set([1, 6, 7, 8]),
178: set(),
182: set([1])},
'blocks_writer': {0: {2: 9, 3: 12, 4: 24, 5: 27},
33: {6: 42},
43: {6: 43},
46: {6: 46},
49: {},
52: {7: 61},
62: {7: 62},
65: {7: 65},
68: {8: 71},
77: {9: 86},
87: {9: 87},
90: {8: 90, 9: 90},
93: {8: 152},
158: {},
178: {},
182: {}},
'blocks_writes': {0: set([0, 1, 2, 3, 4, 5]),
33: set([6]),
43: set([6]),
46: set([6]),
49: set(),
52: set([7]),
62: set([7]),
65: set([7]),
68: set([8]),
77: set([9]),
87: set([9]),
90: set([8, 9]),
93: set([8]),
158: set(),
178: set(),
182: set()},
'translator': <numba.translate.Translate object at 0xc7ee90>}
op_LOAD_ATTR(): 3 106 shape <Variable(val=<llvm.core.Argument object at 0x133ee90>, _llvm=<llvm.core.Argument object at 0x133ee90>, typ='arr[f64]')> arr[f64]
op_LOAD_ATTR(): { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }*
op_LOAD_ATTR(): 18 106 shape <Variable(val=<llvm.core.Argument object at 0x133ef50>, _llvm=<llvm.core.Argument object at 0x133ef50>, typ='arr[f64]')> arr[f64]
op_LOAD_ATTR(): { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }*
('op_CALL_FUNCTION():', <Variable(val=<built-in function range>, _llvm=None, typ=['func'])>)
str_to_llvmtype(): str = 'i64'
add_phi_incomming(): reaching_defs = {33: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 33},
43: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 43, 7: 65}}
crnt_block=46, pred=43, local=6
op_BINARY_ADD(): <Variable(val=<llvm.core.PHINode object at 0xcf9c10>, _llvm=<llvm.core.PHINode object at 0xcf9c10>, typ='i64')> + <Variable(val=<llvm.core.ConstantInt object at 0xcf9750>, _llvm=<llvm.core.ConstantInt object at 0xcf9750>, typ='i64')>
resolve_type(): arg1 = <Variable(val=<llvm.core.PHINode object at 0xcf9c10>, _llvm=<llvm.core.PHINode object at 0xcf9c10>, typ='i64')>, arg2 = <Variable(val=<llvm.core.ConstantInt object at 0xcf9750>, _llvm=<llvm.core.ConstantInt object at 0xcf9750>, typ='i64')>
resolve_type() ==> 'i64'
resolve_type(): arg1 = <Variable(val=<llvm.core.PHINode object at 0xcf9c10>, _llvm=<llvm.core.PHINode object at 0xcf9c10>, typ='i64')>, arg2 = <Variable(val=<llvm.core.Instruction object at 0xcf9510>, _llvm=<llvm.core.Instruction object at 0xcf9510>, typ='i64')>
resolve_type() ==> 'i64'
('op_CALL_FUNCTION():', <Variable(val=<built-in function range>, _llvm=None, typ=['func'])>)
str_to_llvmtype(): str = 'i64'
add_phi_incomming(): reaching_defs = {52: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 46, 7: 52},
62: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 46, 7: 62, 8: 90, 9: 90}}
crnt_block=65, pred=62, local=7
op_BINARY_ADD(): <Variable(val=<llvm.core.PHINode object at 0xcf96d0>, _llvm=<llvm.core.PHINode object at 0xcf96d0>, typ='i64')> + <Variable(val=<llvm.core.ConstantInt object at 0xcf9bd0>, _llvm=<llvm.core.ConstantInt object at 0xcf9bd0>, typ='i64')>
resolve_type(): arg1 = <Variable(val=<llvm.core.PHINode object at 0xcf96d0>, _llvm=<llvm.core.PHINode object at 0xcf96d0>, typ='i64')>, arg2 = <Variable(val=<llvm.core.ConstantInt object at 0xcf9bd0>, _llvm=<llvm.core.ConstantInt object at 0xcf9bd0>, typ='i64')>
resolve_type() ==> 'i64'
resolve_type(): arg1 = <Variable(val=<llvm.core.PHINode object at 0xcf96d0>, _llvm=<llvm.core.PHINode object at 0xcf96d0>, typ='i64')>, arg2 = <Variable(val=<llvm.core.Instruction object at 0xcf9510>, _llvm=<llvm.core.Instruction object at 0xcf9510>, typ='i64')>
resolve_type() ==> 'i64'
('op_CALL_FUNCTION():', <Variable(val=<built-in function range>, _llvm=None, typ=['func'])>)
str_to_llvmtype(): str = 'f64'
add_phi_incomming(): reaching_defs = {77: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 46, 7: 65, 8: 68, 9: 77},
87: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 46, 7: 65, 8: 93, 9: 87}}
crnt_block=90, pred=87, local=8
str_to_llvmtype(): str = 'i64'
add_phi_incomming(): reaching_defs = {77: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 46, 7: 65, 8: 68, 9: 77},
87: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 46, 7: 65, 8: 93, 9: 87}}
crnt_block=90, pred=87, local=9
op_BINARY_ADD(): <Variable(val=<llvm.core.PHINode object at 0xcf97d0>, _llvm=<llvm.core.PHINode object at 0xcf97d0>, typ='i64')> + <Variable(val=<llvm.core.ConstantInt object at 0xcf9cd0>, _llvm=<llvm.core.ConstantInt object at 0xcf9cd0>, typ='i64')>
resolve_type(): arg1 = <Variable(val=<llvm.core.PHINode object at 0xcf97d0>, _llvm=<llvm.core.PHINode object at 0xcf97d0>, typ='i64')>, arg2 = <Variable(val=<llvm.core.ConstantInt object at 0xcf9cd0>, _llvm=<llvm.core.ConstantInt object at 0xcf9cd0>, typ='i64')>
resolve_type() ==> 'i64'
resolve_type(): arg1 = <Variable(val=<llvm.core.PHINode object at 0xcf97d0>, _llvm=<llvm.core.PHINode object at 0xcf97d0>, typ='i64')>, arg2 = <Variable(val=<llvm.core.Instruction object at 0xcf9490>, _llvm=<llvm.core.Instruction object at 0xcf9490>, typ='i64')>
resolve_type() ==> 'i64'
op_BINARY_SUBSCR(): arr_var.typ = arr[f64]
str_to_llvmtype(): str = 'f64'
%32 = load double* %31
op_BINARY_SUBSCR(): arr_var.typ = arr[f64]
str_to_llvmtype(): str = 'f64'
%43 = load double* %42
resolve_type(): arg1 = <Variable(val=<llvm.core.Instruction object at 0xcf9e50>, _llvm=<llvm.core.Instruction object at 0xcf9e50>, typ='f64')>, arg2 = <Variable(val=<llvm.core.Instruction object at 0xcf9f10>, _llvm=<llvm.core.Instruction object at 0xcf9f10>, typ='f64')>
resolve_type() ==> 'f64'
op_BINARY_SUBSCR(): arr_var.typ = arr[f64]
str_to_llvmtype(): str = 'f64'
%55 = load double* %54
op_BINARY_SUBSCR(): arr_var.typ = arr[f64]
str_to_llvmtype(): str = 'f64'
%66 = load double* %65
resolve_type(): arg1 = <Variable(val=<llvm.core.Instruction object at 0xcf9ed0>, _llvm=<llvm.core.Instruction object at 0xcf9ed0>, typ='f64')>, arg2 = <Variable(val=<llvm.core.Instruction object at 0xd05110>, _llvm=<llvm.core.Instruction object at 0xd05110>, typ='f64')>
resolve_type() ==> 'f64'
resolve_type(): arg1 = <Variable(val=<llvm.core.Instruction object at 0xcf9fd0>, _llvm=<llvm.core.Instruction object at 0xcf9fd0>, typ='f64')>, arg2 = <Variable(val=<llvm.core.Instruction object at 0xcf9e10>, _llvm=<llvm.core.Instruction object at 0xcf9e10>, typ='f64')>
resolve_type() ==> 'f64'
op_BINARY_ADD(): <Variable(val=<llvm.core.PHINode object at 0xcf98d0>, _llvm=<llvm.core.PHINode object at 0xcf98d0>, typ='f64')> + <Variable(val=<llvm.core.Instruction object at 0xcf9ed0>, _llvm=<llvm.core.Instruction object at 0xcf9ed0>, typ='f64')>
resolve_type(): arg1 = <Variable(val=<llvm.core.PHINode object at 0xcf98d0>, _llvm=<llvm.core.PHINode object at 0xcf98d0>, typ='f64')>, arg2 = <Variable(val=<llvm.core.Instruction object at 0xcf9ed0>, _llvm=<llvm.core.Instruction object at 0xcf9ed0>, typ='f64')>
resolve_type() ==> 'f64'
op_STORE_SUBSCR(): 174 60 None
op_STORE_SUBSCR(): <Variable(val=<llvm.core.Argument object at 0x133ef50>, _llvm=<llvm.core.Argument object at 0x133ef50>, typ='arr[f64]')>[<Variable(val=(<Variable(val=<llvm.core.PHINode object at 0xcf9c10>, _llvm=<llvm.core.PHINode object at 0xcf9c10>, typ='i64')>, <Variable(val=<llvm.core.PHINode object at 0xcf96d0>, _llvm=<llvm.core.PHINode object at 0xcf96d0>, typ='i64')>), _llvm=None, typ='tuple')>] = <Variable(val=<llvm.core.PHINode object at 0xcf98d0>, _llvm=<llvm.core.PHINode object at 0xcf98d0>, typ='f64')>
op_STORE_SUBSCR(): arr_lval = '{ i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %output', arr_ltype = '{ i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }*'
str_to_llvmtype(): str = 'f64'
str_to_llvmtype(): str = 'arr[]'
; ModuleID = 'pairwise_numba_mod_c7ee90'
define { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* @pairwise_numba({ i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %X, { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %output) {
Entry:
%0 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %X, i32 0, i32 4
%1 = load i64** %0
%2 = getelementptr i64* %1, i32 0
%3 = load i64* %2
%4 = getelementptr i64* %1, i32 1
%5 = load i64* %4
%6 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %output, i32 0, i32 4
%7 = load i64** %6
%8 = getelementptr i64* %7, i32 0
%9 = load i64* %8
%10 = getelementptr i64* %7, i32 1
%11 = load i64* %10
br label %BLOCK_33
BLOCK_33: ; preds = %Entry
br label %BLOCK_46
BLOCK_43: ; preds = %BLOCK_178
%12 = add i64 %13, 1
br label %BLOCK_46
BLOCK_46: ; preds = %BLOCK_43, %BLOCK_33
%13 = phi i64 [ 0, %BLOCK_33 ], [ %12, %BLOCK_43 ]
%14 = icmp slt i64 %13, %3
br i1 %14, label %BLOCK_49, label %BLOCK_182
BLOCK_182: ; preds = %BLOCK_46
ret { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %output
BLOCK_49: ; preds = %BLOCK_46
br label %BLOCK_52
BLOCK_52: ; preds = %BLOCK_49
br label %BLOCK_65
BLOCK_62: ; preds = %BLOCK_158
%15 = add i64 %16, 1
br label %BLOCK_65
BLOCK_65: ; preds = %BLOCK_62, %BLOCK_52
%16 = phi i64 [ 0, %BLOCK_52 ], [ %15, %BLOCK_62 ]
%17 = icmp slt i64 %16, %3
br i1 %17, label %BLOCK_68, label %BLOCK_178
BLOCK_178: ; preds = %BLOCK_65
br label %BLOCK_43
BLOCK_68: ; preds = %BLOCK_65
br label %BLOCK_77
BLOCK_77: ; preds = %BLOCK_68
br label %BLOCK_90
BLOCK_87: ; preds = %BLOCK_93
%18 = add i64 %20, 1
br label %BLOCK_90
BLOCK_90: ; preds = %BLOCK_87, %BLOCK_77
%19 = phi double [ 0.000000e+00, %BLOCK_77 ], [ %79, %BLOCK_87 ]
%20 = phi i64 [ 0, %BLOCK_77 ], [ %18, %BLOCK_87 ]
%21 = icmp slt i64 %20, %5
br i1 %21, label %BLOCK_93, label %BLOCK_158
BLOCK_158: ; preds = %BLOCK_90
%22 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %output, i32 0, i32 5
%23 = load i64** %22
%24 = getelementptr i64* %23, i32 0
%25 = load i64* %24
%26 = mul i64 %13, %25
%27 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %output, i32 0, i32 2
%28 = load i8** %27
%29 = getelementptr i8* %28, i64 %26
%30 = bitcast i8* %29 to double*
%31 = getelementptr double* %30, i64 %16
store double %19, double* %31
br label %BLOCK_62
BLOCK_93: ; preds = %BLOCK_90
%32 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %X, i32 0, i32 5
%33 = load i64** %32
%34 = getelementptr i64* %33, i32 0
%35 = load i64* %34
%36 = mul i64 %13, %35
%37 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %X, i32 0, i32 2
%38 = load i8** %37
%39 = getelementptr i8* %38, i64 %36
%40 = bitcast i8* %39 to double*
%41 = getelementptr double* %40, i64 %20
%42 = load double* %41
%43 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %X, i32 0, i32 5
%44 = load i64** %43
%45 = getelementptr i64* %44, i32 0
%46 = load i64* %45
%47 = mul i64 %16, %46
%48 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %X, i32 0, i32 2
%49 = load i8** %48
%50 = getelementptr i8* %49, i64 %47
%51 = bitcast i8* %50 to double*
%52 = getelementptr double* %51, i64 %20
%53 = load double* %52
%54 = fsub double %42, %53
%55 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %X, i32 0, i32 5
%56 = load i64** %55
%57 = getelementptr i64* %56, i32 0
%58 = load i64* %57
%59 = mul i64 %13, %58
%60 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %X, i32 0, i32 2
%61 = load i8** %60
%62 = getelementptr i8* %61, i64 %59
%63 = bitcast i8* %62 to double*
%64 = getelementptr double* %63, i64 %20
%65 = load double* %64
%66 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %X, i32 0, i32 5
%67 = load i64** %66
%68 = getelementptr i64* %67, i32 0
%69 = load i64* %68
%70 = mul i64 %16, %69
%71 = getelementptr { i64, i32*, i8*, i32, i64*, i64*, i8*, i8*, i32, i8*, i8*, i8*, i64* }* %X, i32 0, i32 2
%72 = load i8** %71
%73 = getelementptr i8* %72, i64 %70
%74 = bitcast i8* %73 to double*
%75 = getelementptr double* %74, i64 %20
%76 = load double* %75
%77 = fsub double %65, %76
%78 = fmul double %54, %77
%79 = fadd double %19, %78
br label %BLOCK_87
}
*** glibc detected *** python: double free or corruption (!prev): 0x000000000117f030 ***
======= Backtrace: =========
/lib/libc.so.6(+0x77326)[0x7fb4c79bc326]
/usr/lib/python2.7/site-packages/numpy/core/multiarray.so(+0x8ff86)[0x7fb4c6180f86]
/usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0xd49)[0x7fb4c7fda819]
/usr/lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x895)[0x7fb4c7fdfeb5]
/usr/lib/libpython2.7.so.1.0(PyEval_EvalCode+0x32)[0x7fb4c7fdff82]
/usr/lib/libpython2.7.so.1.0(+0xf5eba)[0x7fb4c7ff8eba]
/usr/lib/libpython2.7.so.1.0(PyRun_FileExFlags+0x92)[0x7fb4c7ff9cb2]
/usr/lib/libpython2.7.so.1.0(PyRun_SimpleFileExFlags+0xdb)[0x7fb4c7ffa6cb]
/usr/lib/libpython2.7.so.1.0(Py_Main+0xc32)[0x7fb4c800b9d2]
/lib/libc.so.6(__libc_start_main+0xed)[0x7fb4c796638d]
python[0x400631]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:07 3167087 /home/stephen/.virtualenvs/science/bin/python
00600000-00601000 rw-p 00000000 08:07 3167087 /home/stephen/.virtualenvs/science/bin/python
007a2000-014d2000 rw-p 00000000 00:00 0 [heap]
7fb4c1a63000-7fb4c1ae3000 rwxp 00000000 00:00 0
7fb4c1ae3000-7fb4c1af8000 r-xp 00000000 08:07 3548442 /usr/lib/libgcc_s.so.1
7fb4c1af8000-7fb4c1cf8000 ---p 00015000 08:07 3548442 /usr/lib/libgcc_s.so.1
7fb4c1cf8000-7fb4c1cf9000 rw-p 00015000 08:07 3548442 /usr/lib/libgcc_s.so.1
7fb4c1cf9000-7fb4c1de6000 r-xp 00000000 08:07 3540482 /usr/lib/libstdc++.so.6.0.16
7fb4c1de6000-7fb4c1fe5000 ---p 000ed000 08:07 3540482 /usr/lib/libstdc++.so.6.0.16
7fb4c1fe5000-7fb4c1fed000 r--p 000ec000 08:07 3540482 /usr/lib/libstdc++.so.6.0.16
7fb4c1fed000-7fb4c1fef000 rw-p 000f4000 08:07 3540482 /usr/lib/libstdc++.so.6.0.16
7fb4c1fef000-7fb4c2004000 rw-p 00000000 00:00 0
7fb4c2004000-7fb4c2c43000 r-xp 00000000 08:07 3176524 /home/stephen/.virtualenvs/science/lib/python2.7/site-packages/llvm/_core.so
7fb4c2c43000-7fb4c2e42000 ---p 00c3f000 08:07 3176524 /home/stephen/.virtualenvs/science/lib/python2.7/site-packages/llvm/_core.so
7fb4c2e42000-7fb4c2e9e000 r--p 00c3e000 08:07 3176524 /home/stephen/.virtualenvs/science/lib/python2.7/site-packages/llvm/_core.so
7fb4c2e9e000-7fb4c2eb2000 rw-p 00c9a000 08:07 3176524 /home/stephen/.virtualenvs/science/lib/python2.7/site-packages/llvm/_core.so
7fb4c2eb2000-7fb4c2ebb000 rw-p 00000000 00:00 0
7fb4c2ebb000-7fb4c2ef3000 r-xp 00000000 08:07 3599350 /usr/lib/python2.7/site-packages/numpy/random/mtrand.so
7fb4c2ef3000-7fb4c30f2000 ---p 00038000 08:07 3599350 /usr/lib/python2.7/site-packages/numpy/random/mtrand.so
7fb4c30f2000-7fb4c30f3000 r--p 00037000 08:07 3599350 /usr/lib/python2.7/site-packages/numpy/random/mtrand.so
7fb4c30f3000-7fb4c3127000 rw-p 00038000 08:07 3599350 /usr/lib/python2.7/site-packages/numpy/random/mtrand.so
7fb4c3127000-7fb4c3128000 rw-p 00000000 00:00 0
7fb4c3128000-7fb4c312d000 r-xp 00000000 08:07 3617307 /usr/lib/python2.7/lib-dynload/strop.so
7fb4c312d000-7fb4c332c000 ---p 00005000 08:07 3617307 /usr/lib/python2.7/lib-dynload/strop.so
7fb4c332c000-7fb4c332d000 r--p 00004000 08:07 3617307 /usr/lib/python2.7/lib-dynload/strop.so
7fb4c332d000-7fb4c332f000 rw-p 00005000 08:07 3617307 /usr/lib/python2.7/lib-dynload/strop.so
7fb4c332f000-7fb4c3339000 r-xp 00000000 08:07 3599342 /usr/lib/python2.7/site-packages/numpy/fft/fftpack_lite.so
7fb4c3339000-7fb4c3538000 ---p 0000a000 08:07 3599342 /usr/lib/python2.7/site-packages/numpy/fft/fftpack_lite.so
7fb4c3538000-7fb4c3539000 r--p 00009000 08:07 3599342 /usr/lib/python2.7/site-packages/numpy/fft/fftpack_lite.so
7fb4c3539000-7fb4c353a000 rw-p 0000a000 08:07 3599342 /usr/lib/python2.7/site-packages/numpy/fft/fftpack_lite.so
7fb4c353a000-7fb4c353c000 r-xp 00000000 08:07 3617337 /usr/lib/python2.7/lib-dynload/grp.so
7fb4c353c000-7fb4c373b000 ---p 00002000 08:07 3617337 /usr/lib/python2.7/lib-dynload/grp.so
7fb4c373b000-7fb4c373c000 r--p 00001000 08:07 3617337 /usr/lib/python2.7/lib-dynload/grp.so
7fb4c373c000-7fb4c373d000 rw-p 00002000 08:07 3617337 /usr/lib/python2.7/lib-dynload/grp.so
7fb4c373d000-7fb4c3772000 r-xp 00000000 08:07 3540505 /usr/lib/libquadmath.so.0.0.0
7fb4c3772000-7fb4c3971000 ---p 00035000 08:07 3540505 /usr/lib/libquadmath.so.0.0.0
7fb4c3971000-7fb4c3972000 rw-p 00034000 08:07 3540505 /usr/lib/libquadmath.so.0.0.0
7fb4c3972000-7fb4c3a88000 r-xp 00000000 08:07 3540495 /usr/lib/libgfortran.so.3.0.0
7fb4c3a88000-7fb4c3c88000 ---p 00116000 08:07 3540495 /usr/lib/libgfortran.so.3.0.0
7fb4c3c88000-7fb4c3c8a000 rw-p 00116000 08:07 3540495 /usr/lib/libgfortran.so.3.0.0
7fb4c3c8a000-7fb4c3c8b000 rw-p 00000000 00:00 0
7fb4c3c8b000-7fb4c3ce2000 r-xp 00000000 08:07 3565459 /usr/lib/libblas.so.3.4.0
7fb4c3ce2000-7fb4c3ee1000 ---p 00057000 08:07 3565459 /usr/lib/libblas.so.3.4.0
7fb4c3ee1000-7fb4c3ee2000 rw-p 00056000 08:07 3565459 /usr/lib/libblas.so.3.4.0
7fb4c3ee2000-7fb4c443c000 r-xp 00000000 08:07 3565462 /usr/lib/liblapack.so.3.4.0
7fb4c443c000-7fb4c463b000 ---p 0055a000 08:07 3565462 /usr/lib/liblapack.so.3.4.0
7fb4c463b000-7fb4c463e000 rw-p 00559000 08:07 3565462 /usr/lib/liblapack.so.3.4.0
7fb4c463e000-7fb4c474c000 rw-p 00000000 00:00 0
7fb4c474c000-7fb4c4751000 r-xp 00000000 08:07 3599445 /usr/lib/python2.7/site-packages/numpy/linalg/lapack_lite.so
7fb4c4751000-7fb4c4951000 ---p 00005000 08:07 3599445 /usr/lib/python2.7/site-packages/numpy/linalg/lapack_lite.so
7fb4c4951000-7fb4c4952000 r--p 00005000 08:07 3599445 /usr/lib/python2.7/site-packages/numpy/linalg/lapack_lite.so
7fb4c4952000-7fb4c4953000 rw-p 00006000 08:07 3599445 /usr/lib/python2.7/site-packages/numpy/linalg/lapack_lite.so
7fb4c4953000-7fb4c4958000 r-xp 00000000 08:07 3598565 /usr/lib/python2.7/site-packages/numpy/lib/_compiled_base.so
7fb4c4958000-7fb4c4b58000 ---p 00005000 08:07 3598565 /usr/lib/python2.7/site-packages/numpy/lib/_compiled_base.so
7fb4c4b58000-7fb4c4b59000 r--p 00005000 08:07 3598565 /usr/lib/python2.7/site-packages/numpy/lib/_compiled_base.so
7fb4c4b59000-7fb4c4b5a000 rw-p 00006000 08:07 3598565 /usr/lib/python2.7/site-packages/numpy/lib/_compiled_base.so
7fb4c4b5a000-7fb4c4c1b000 rw-p 00000000 00:00 0
7fb4c4c1b000-7fb4c4c1e000 r-xp 00000000 08:07 3617345 /usr/lib/python2.7/lib-dynload/_functools.so
7fb4c4c1e000-7fb4c4e1d000 ---p 00003000 08:07 3617345 /usr/lib/python2.7/lib-dynload/_functools.so
7fb4c4e1d000-7fb4c4e1e000 r--p 00002000 08:07 3617345 /usr/lib/python2.7/lib-dynload/_functools.so
7fb4c4e1e000-7fb4c4e1f000 rw-p 00003000 08:07 3617345 /usr/lib/python2.7/lib-dynload/_functools.so
7fb4c4e1f000-7fb4c4e22000 r-xp 00000000 08:07 3562820 /usr/lib/python2.7/lib-dynload/_heapq.so
7fb4c4e22000-7fb4c5021000 ---p 00003000 08:07 3562820 /usr/lib/python2.7/lib-dynload/_heapq.so
7fb4c5021000-7fb4c5022000 r--p 00002000 08:07 3562820 /usr/lib/python2.7/lib-dynload/_heapq.so
7fb4c5022000-7fb4c5024000 rw-p 00003000 08:07 3562820 /usr/lib/python2.7/lib-dynload/_heapq.so
7fb4c5024000-7fb4c5026000 r-xp 00000000 08:07 3617355 /usr/lib/python2.7/lib-dynload/_bisect.so
7fb4c5026000-7fb4c5225000 ---p 00002000 08:07 3617355 /usr/lib/python2.7/lib-dynload/_bisect.so
7fb4c5225000-7fb4c5226000 r--p 00001000 08:07 3617355 /usr/lib/python2.7/lib-dynload/_bisect.so
7fb4c5226000-7fb4c5227000 rw-p 00002000 08:07 3617355 /usr/lib/python2.7/lib-dynload/_bisect.so
7fb4c5227000-7fb4c522f000 r-xp 00000000 08:07 3617326 /usr/lib/python2.7/lib-dynload/operator.so
7fb4c522f000-7fb4c542e000 ---p 00008000 08:07 3617326 /usr/lib/python2.7/lib-dynload/operator.so
7fb4c542e000-7fb4c542f000 r--p 00007000 08:07 3617326 /usr/lib/python2.7/lib-dynload/operator.so
7fb4c542f000-7fb4c5431000 rw-p 00008000 08:07 3617326 /usr/lib/python2.7/lib-dynload/operator.so
7fb4c5431000-7fb4c5437000 r-xp 00000000 08:07 3617321 /usr/lib/python2.7/lib-dynload/_collections.so
7fb4c5437000-7fb4c5636000 ---p 00006000 08:07 3617321 /usr/lib/python2.7/lib-dynload/_collections.so
7fb4c5636000-7fb4c5637000 r--p 00005000 08:07 3617321 /usr/lib/python2.7/lib-dynload/_collections.so
7fb4c5637000-7fb4c5639000 rw-p 00006000 08:07 3617321 /usr/lib/python2.7/lib-dynload/_collections.so
7fb4c5639000-7fb4c5663000 r-xp 00000000 08:07 3598666 /usr/lib/python2.7/site-packages/numpy/core/scalarmath.so
7fb4c5663000-7fb4c5862000 ---p 0002a000 08:07 3598666 /usr/lib/python2.7/site-packages/numpy/core/scalarmath.so
7fb4c5862000-7fb4c5863000 r--p 00029000 08:07 3598666 /usr/lib/python2.7/site-packages/numpy/core/scalarmath.so
7fb4c5863000-7fb4c5865000 rw-p 0002a000 08:07 3598666 /usr/lib/python2.7/site-packages/numpy/core/scalarmath.so
7fb4c5865000-7fb4c5869000 r-xp 00000000 08:07 3617334 /usr/lib/python2.7/lib-dynload/cStringIO.so
7fb4c5869000-7fb4c5a68000 ---p 00004000 08:07 3617334 /usr/lib/python2.7/lib-dynload/cStringIO.so
7fb4c5a68000-7fb4c5a69000 r--p 00003000 08:07 3617334 /usr/lib/python2.7/lib-dynload/cStringIO.so
7fb4c5a69000-7fb4c5a6b000 rw-p 00004000 08:07 3617334 /usr/lib/python2.7/lib-dynload/cStringIO.so
7fb4c5a6b000-7fb4c5a7d000 r-xp 00000000 08:07 3617327 /usr/lib/python2.7/lib-dynload/cPickle.so
7fb4c5a7d000-7fb4c5c7c000 ---p 00012000 08:07 3617327 /usr/lib/python2.7/lib-dynload/cPickle.so
7fb4c5c7c000-7fb4c5c7d000 r--p 00011000 08:07 3617327 /usr/lib/python2.7/lib-dynload/cPickle.so
7fb4c5c7d000-7fb4c5c7e000 rw-p 00012000 08:07 3617327 /usr/lib/python2.7/lib-dynload/cPickle.so
7fb4c5c7e000-7fb4c5c97000 r-xp 00000000 08:07 3598696 /usr/lib/python2.7/site-packages/numpy/core/_sort.so
7fb4c5c97000-7fb4c5e96000 ---p 00019000 08:07 3598696 /usr/lib/python2.7/site-packages/numpy/core/_sort.so
7fb4c5e96000-7fb4c5e97000 r--p 00018000 08:07 3598696 /usr/lib/python2.7/site-packages/numpy/core/_sort.so
7fb4c5e97000-7fb4c5e98000 rw-p 00019000 08:07 3598696 /usr/lib/python2.7/site-packages/numpy/core/_sort.so
7fb4c5e98000-7fb4c5eeb000 r-xp 00000000 08:07 3598706 /usr/lib/python2.7/site-packages/numpy/core/umath.so
7fb4c5eeb000-7fb4c60ea000 ---p 00053000 08:07 3598706 /usr/lib/python2.7/site-packages/numpy/core/umath.so
7fb4c60ea000-7fb4c60eb000 r--p 00052000 08:07 3598706 /usr/lib/python2.7/site-packages/numpy/core/umath.so
7fb4c60eb000-7fb4c60f0000 rw-p 00053000 08:07 3598706 /usr/lib/python2.7/site-packages/numpy/core/umath.so
7fb4c60f0000-7fb4c60f1000 rw-p 00000000 00:00 0
7fb4c60f1000-7fb4c61e7000 r-xp 00000000 08:07 3598676 /usr/lib/python2.7/site-packages/numpy/core/multiarray.so
7fb4c61e7000-7fb4c63e7000 ---p 000f6000 08:07 3598676 /usr/lib/python2.7/site-packages/numpy/core/multiarray.so
7fb4c63e7000-7fb4c63e9000 r--p 000f6000 08:07 3598676 /usr/lib/python2.7/site-packages/numpy/core/multiarray.so
7fb4c63e9000-7fb4c63f6000 rw-p 000f8000 08:07 3598676 /usr/lib/python2.7/site-packages/numpy/core/multiarray.so
7fb4c63f6000-7fb4c63f7000 rw-p 00000000 00:00 0
7fb4c63f7000-7fb4c63fe000 r-xp 00000000 08:07 3617328 /usr/lib/python2.7/lib-dynload/_struct.so
7fb4c63fe000-7fb4c65fd000 ---p 00007000 08:07 3617328 /usr/lib/python2.7/lib-dynload/_struct.so
7fb4c65fd000-7fb4c65fe000 r--p 00006000 08:07 3617328 /usr/lib/python2.7/lib-dynload/_struct.so
7fb4c65fe000-7fb4c6600000 rw-p 00007000 08:07 3617328 /usr/lib/python2.7/lib-dynload/_struct.so
7fb4c6600000-7fb4c6607000 r-xp 00000000 08:07 3562163 /usr/lib/libffi.so.6.0.0
7fb4c6607000-7fb4c6806000 ---p 00007000 08:07 3562163 /usr/lib/libffi.so.6.0.0
7fb4c6806000-7fb4c6807000 r--p 00006000 08:07 3562163 /usr/lib/libffi.so.6.0.0
7fb4c6807000-7fb4c6808000 rw-p 00007000 08:07 3562163 /usr/lib/libffi.so.6.0.0
7fb4c6808000-7fb4c6822000 r-xp 00000000 08:07 3617329 /usr/lib/python2.7/lib-dynload/_ctypes.so
7fb4c6822000-7fb4c6a21000 ---p 0001a000 08:07 3617329 /usr/lib/python2.7/lib-dynload/_ctypes.so
7fb4c6a21000-7fb4c6a22000 r--p 00019000 08:07 3617329 /usr/lib/python2.7/lib-dynload/_ctypes.so
7fb4c6a22000-7fb4c6a26000 rw-p 0001a000 08:07 3617329 /usr/lib/python2.7/lib-dynload/_ctypes.so
7fb4c6a26000-7fb4c6a67000 rw-p 00000000 00:00 0
7fb4c6a67000-7fb4c6a6e000 r-xp 00000000 08:07 3617311 /usr/lib/python2.7/lib-dynload/math.so
7fb4c6a6e000-7fb4c6c6d000 ---p 00007000 08:07 3617311 /usr/lib/python2.7/lib-dynload/math.so
7fb4c6c6d000-7fb4c6c6e000 r--p 00006000 08:07 3617311 /usr/lib/python2.7/lib-dynload/math.so
7fb4c6c6e000-7fb4c6c70000 rw-p 00007000 08:07 3617311 /usr/lib/python2.7/lib-dynload/math.so
7fb4c6c70000-7fb4c6c7a000 r-xp 00000000 08:07 3617340 /usr/lib/python2.7/lib-dynload/itertools.so
7fb4c6c7a000-7fb4c6e79000 ---p 0000a000 08:07 3617340 /usr/lib/python2.7/lib-dynload/itertools.so
7fb4c6e79000-7fb4c6e7a000 r--p 00009000 08:07 3617340 /usr/lib/python2.7/lib-dynload/itertools.so
7fb4c6e7a000-7fb4c6e7f000 rw-p 0000a000 08:07 3617340 /usr/lib/python2.7/lib-dynload/itertools.so
7fb4c6e7f000-7fb4c6e83000 r-xp 00000000 08:07 3617349 /usr/lib/python2.7/lib-dynload/time.so
7fb4c6e83000-7fb4c7082000 ---p 00004000 08:07 3617349 /usr/lib/python2.7/lib-dynload/time.so
7fb4c7082000-7fb4c7083000 r--p 00003000 08:07 3617349 /usr/lib/python2.7/lib-dynload/time.so
7fb4c7083000-7fb4c7085000 rw-p 00004000 08:07 3617349 /usr/lib/python2.7/lib-dynload/time.so
7fb4c7085000-7fb4c724a000 r--p 00000000 08:07 3558268 /usr/lib/locale/locale-archive
7fb4c724a000-7fb4c733d000 r-xp 00000000 08:07 2883604 /lib/libm-2.15.so
7fb4c733d000-7fb4c753c000 ---p 000f3000 08:07 2883604 /lib/libm-2.15.so
7fb4c753c000-7fb4c753d000 r--p 000f2000 08:07 2883604 /lib/libm-2.15.so
7fb4c753d000-7fb4c753e000 rw-p 000f3000 08:07 2883604 /lib/libm-2.15.so
7fb4c753e000-7fb4c7540000 r-xp 00000000 08:07 2887882 /lib/libutil-2.15.so
7fb4c7540000-7fb4c773f000 ---p 00002000 08:07 2887882 /lib/libutil-2.15.so
7fb4c773f000-7fb4c7740000 r--p 00001000 08:07 2887882 /lib/libutil-2.15.so
7fb4c7740000-7fb4c7741000 rw-p 00002000 08:07 2887882 /lib/libutil-2.15.so
7fb4c7741000-7fb4c7743000 r-xp 00000000 08:07 2883603 /lib/libdl-2.15.so
7fb4c7743000-7fb4c7943000 ---p 00002000 08:07 2883603 /lib/libdl-2.15.so
7fb4c7943000-7fb4c7944000 r--p 00002000 08:07 2883603 /lib/libdl-2.15.so
7fb4c7944000-7fb4c7945000 rw-p 00003000 08:07 2883603 /lib/libdl-2.15.so
7fb4c7945000-7fb4c7add000 r-xp 00000000 08:07 2883734 /lib/libc-2.15.so
7fb4c7add000-7fb4c7cdd000 ---p 00198000 08:07 2883734 /lib/libc-2.15.so
7fb4c7cdd000-7fb4c7ce1000 r--p 00198000 08:07 2883734 /lib/libc-2.15.so
7fb4c7ce1000-7fb4c7ce3000 rw-p 0019c000 08:07 2883734 /lib/libc-2.15.so
7fb4c7ce3000-7fb4c7ce7000 rw-p 00000000 00:00 0
7fb4c7ce7000-7fb4c7cfe000 r-xp 00000000 08:07 2883595 /lib/libpthread-2.15.so
7fb4c7cfe000-7fb4c7efd000 ---p 00017000 08:07 2883595 /lib/libpthread-2.15.so
7fb4c7efd000-7fb4c7efe000 r--p 00016000 08:07 2883595 /lib/libpthread-2.15.so
7fb4c7efe000-7fb4c7eff000 rw-p 00017000 08:07 2883595 /lib/libpthread-2.15.so
7fb4c7eff000-7fb4c7f03000 rw-p 00000000 00:00 0
7fb4c7f03000-7fb4c806e000 r-xp 00000000 08:07 3561750 /usr/lib/libpython2.7.so.1.0
7fb4c806e000-7fb4c826e000 ---p 0016b000 08:07 3561750 /usr/lib/libpython2.7.so.1.0
7fb4c826e000-7fb4c826f000 r--p 0016b000 08:07 3561750 /usr/lib/libpython2.7.so.1.0
7fb4c826f000-7fb4c82ad000 rw-p 0016c000 08:07 3561750 /usr/lib/libpython2.7.so.1.0
7fb4c82ad000-7fb4c82bc000 rw-p 00000000 00:00 0
7fb4c82bc000-7fb4c82dd000 r-xp 00000000 08:07 2887872 /lib/ld-2.15.so
7fb4c833d000-7fb4c837e000 rw-p 00000000 00:00 0
7fb4c837f000-7fb4c8401000 rw-p 00000000 00:00 0
7fb4c8433000-7fb4c84ba000 rw-p 00000000 00:00 0
7fb4c84d8000-7fb4c84d9000 rw-p 00000000 00:00 0
7fb4c84d9000-7fb4c84da000 rwxp 00000000 00:00 0
7fb4c84da000-7fb4c84dc000 rw-p 00000000 00:00 0
7fb4c84dc000-7fb4c84dd000 r--p 00020000 08:07 2887872 /lib/ld-2.15.so
7fb4c84dd000-7fb4c84de000 rw-p 00021000 08:07 2887872 /lib/ld-2.15.so
7fb4c84de000-7fb4c84df000 rw-p 00000000 00:00 0
7fff96799000-7fff967d7000 rw-p 00000000 00:00 0 [stack]
7fff967ff000-7fff96800000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
zsh: abort python numba_pairwise.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment