Skip to content

Commit 1826f4a

Browse files
committed
Add pydecref to old ret value, and fix bug in benchmark
1 parent 5b7a600 commit 1826f4a

File tree

2 files changed

+23
-32
lines changed

2 files changed

+23
-32
lines changed

benchmarks/callperf.jl

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,30 @@ let
66
np = pyimport("numpy")
77
nprand = np["random"]["rand"]
88
nprand_pyo(sz...) = pycall(nprand, PyObject, sz...)
9-
nprand2d_wrap = PyFuncWrap(nprand, (Int, Int))
10-
11-
arr_size = (2,2)
12-
13-
results["nprand_pyo"] = @benchmark $nprand_pyo($arr_size...)
14-
println("nprand_pyo:\n"); display(results["nprand_pyo"])
15-
println("--------------------------------------------------")
16-
17-
results["nprand2d_wrap"] = @benchmark $nprand2d_wrap($arr_size...)
18-
println("nprand2d_wrap:\n"); display(results["nprand2d_wrap"])
19-
println("--------------------------------------------------")
20-
21-
# args already set by nprand2d_wrap calls above
22-
results["nprand2d_wrap_noargs"] = @benchmark $nprand2d_wrap()
23-
println("nprand2d_wrap_noargs:\n"); display(results["nprand2d_wrap_noargs"])
24-
println("--------------------------------------------------")
25-
26-
arr_size = ntuple(i->2, 15)
27-
28-
results["nprand_pyo2"] = @benchmark $nprand_pyo($arr_size...)
29-
println("nprand_pyo2:\n"); display(results["nprand_pyo2"])
30-
println("--------------------------------------------------")
31-
32-
results["nprand2d_wrap2"] = @benchmark $nprand2d_wrap($arr_size...)
33-
println("nprand2d_wrap2:\n"); display(results["nprand2d_wrap2"])
34-
println("--------------------------------------------------")
35-
36-
# args already set by nprand2d_wrap calls above
37-
results["nprand2d_wrap_noargs2"] = @benchmark $nprand2d_wrap()
38-
println("nprand2d_wrap_noargs2:\n"); display(results["nprand2d_wrap_noargs2"])
39-
println("--------------------------------------------------")
9+
ret = PyNULL()
10+
args_lens = (0,3,7,12,17)
11+
arr_sizes = (ntuple(i->1, len) for len in args_lens)
12+
nprand_wraps = [PyFuncWrap(nprand, map(typeof, arr_size)) for arr_size in arr_sizes]
13+
@show typeof(nprand_wraps)
14+
for (i, arr_size) in enumerate(arr_sizes)
15+
nprand_wrap = nprand_wraps[i]
16+
arr_size_str = args_lens[i] < 5 ? "$arr_size" : "$(args_lens[i])*(1,1,...)"
17+
results["nprand_pyo $arr_size_str"] = @benchmark $nprand_pyo($arr_size...)
18+
println("nprand_pyo $arr_size_str:\n"); display(results["nprand_pyo $arr_size_str"])
19+
println("--------------------------------------------------")
20+
21+
results["nprand_wrap $arr_size_str"] = @benchmark $nprand_wrap($arr_size...)
22+
println("nprand_wrap $arr_size_str:\n"); display(results["nprand_wrap $arr_size_str"])
23+
println("--------------------------------------------------")
24+
25+
# args already set by nprand_wrap calls above
26+
results["nprand_wrap_noargs $arr_size_str"] = @benchmark $nprand_wrap()
27+
println("nprand_wrap_noargs $arr_size_str:\n"); display(results["nprand_wrap_noargs $arr_size_str"])
28+
println("--------------------------------------------------")
29+
end
4030
end
4131

4232
println("")
4333
println("Mean times")
4434
println("----------")
45-
foreach((r)->println(rpad(r[1],23), ": ", mean(r[2])), results)
35+
foreach((r)->println(rpad(r[1],33), ": ", mean(r[2])), results)

src/pyfuncwrap.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ function (pf::PyFuncWrap{P, AT, N, RT})() where {P, AT, N, RT}
8282
retptr = ccall((@pysym :PyObject_Call), PyPtr, (PyPtr,PyPtr,PyPtr), pf.o,
8383
pf.pyargsptr, kw)
8484
pyincref_(retptr)
85+
pydecref(pf.ret)
8586
pf.ret.o = retptr
8687
finally
8788
sigatomic_end()

0 commit comments

Comments
 (0)