From 1bd2c4b02ed8161639104667a43908a820db5a8f Mon Sep 17 00:00:00 2001 From: Paul Melis Date: Thu, 3 Sep 2020 21:13:54 +0200 Subject: [PATCH] Looked more into why we get back Python lists under Blender, but not when running the same code under plain Python (where it returns numpy arrays). No clear cause found, see #2 for details --- readme.md | 14 +++++++++++--- test.blend | Bin 5241372 -> 5247360 bytes test/callit.py | 37 +++++++++++++++++++++++++++++++------ test/fn.jl | 8 ++++---- test/get_array.py | 18 ++++++++++++++++++ test/return_array.jl | 12 ++++++++++++ test/subdiv.py | 28 ++++++++++++++++++++++++++++ 7 files changed, 104 insertions(+), 13 deletions(-) create mode 100644 test/get_array.py create mode 100644 test/return_array.jl create mode 100644 test/subdiv.py diff --git a/readme.md b/readme.md index eb98f10..ab1f2e5 100644 --- a/readme.md +++ b/readme.md @@ -97,14 +97,18 @@ far more efficient compiled code compared to Python's interpreted execution. Possible optimizations on the Julia side: - Performance annotations, such as `@inbounds`, `@fastmath` and `@simd` + - Reduce the number of allocations. E.g. for the case above `@time` reports `0.255132 seconds (277.99 k allocations: 44.658 MiB, 16.89% gc time)`. The high number of allocations is partly caused by having separate `HalfEdge` instances. The Bunny model has 104288 edges, leading to roughly double that number of `HalfEdge`'s being allocated. Pre-allocating all needed `HalfEdge` instances in a single array would be possible (`sum(loops)` gives the required number). + - Look more into type stability, `@code_warntype`, etc + - ~~Using StaticArrays.jl in strategic places~~ + - Using a 2D array instead of a 1D array for holding vertices, which would make get_vertex and set_vertex simpler, but this might not matter much. @@ -113,15 +117,19 @@ The transfer of mesh data between Blender and Julia is far from optimal: - On the Blender side the mesh data is extracted using calls to `foreach_get()` into preallocated NumPy arrays. Perhaps there is a way to directly access the underlying data from the mesh object? + - Even though the Julia code returns a set of `Array{Float32}` values these - get turned into Python lists when crossing the boundary to Blender. Which are - then turned into NumPy arrays on the Blender side for setting up the result mesh. - All in all there's quite a lot of copying going on. + get turned into Python lists when crossing the boundary to Blender, for some + reason. See #xxx for more details. The lists are then turned into NumPy arrays + on the Blender side for setting up the result mesh. All in all there's quite a + lot of copying going on. + - Blender (and Python) use 0-based indexing, while Julia uses 1-based indexing. We +1/-1 alter the relevant data on the transfer between the two worlds, which shouldn't cost that much time, but I don't see an easy way to stick to a single indexing scheme on both sides. Julia has some support for 0-based indexing, but it apparently comes with some caveats. + - PyJulia uses the Julia PyCall package for data conversion between Python and Julia, which should be able to use zero-copy transfer between the two, judging by https://github.com/JuliaPy/PyCall.jl#arrays-and-pyarray. But so far that diff --git a/test.blend b/test.blend index 67adbb441c1d41b1013482f14b798eaffd77bc4d..bbb2b80a920d7ab2330bdb6d9eaff16a5e93b25e 100644 GIT binary patch delta 97890 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�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�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 r_bMF1@jrw9Tcoe^yWVmcW@vrq>~=jG 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 OUD94HU2@a~*Ze;bI`9Jk diff --git a/test/callit.py b/test/callit.py index 06e77be..fcc29fc 100644 --- a/test/callit.py +++ b/test/callit.py @@ -1,13 +1,38 @@ +import time, gc +import numpy + from julia.api import Julia from julia import Main jl = Julia(compiled_modules=False) -jl.eval('include("fn.jl")') +jl.eval(""" +include("fn.jl") -import numpy +import Base.convert + +""") + +print('allocating') + +print(gc.get_stats()) + +x = numpy.ones(200*1024*1024, 'float32') + +#x = numpy.array([1,2,3,4,5,6], dtype=numpy.float32) +#print(x) + +time.sleep(5) + +print('calling into Julia') +Main.fn(x) + +print('Back in Python') +time.sleep(5) + +print('Attempting to clean up') +del x +print(gc.get_stats()) -x = numpy.array([[1,2,3], [4,5,6]], dtype=np.float32) +time.sleep(5) -print(x) -res = Main.fn(x) -print(x) +#print(x) diff --git a/test/fn.jl b/test/fn.jl index c63de01..12c8b77 100644 --- a/test/fn.jl +++ b/test/fn.jl @@ -1,7 +1,7 @@ + function fn(x::Array{Float32}) println("array size: $(size(x))"); - println("max element: $(maximum(x))") - println("min element: $(minimum(x))") - x[1,1] = 123 - #return 2x + + sleep(5) + x[1:3] .= -1 end diff --git a/test/get_array.py b/test/get_array.py new file mode 100644 index 0000000..536055e --- /dev/null +++ b/test/get_array.py @@ -0,0 +1,18 @@ +import time, gc +import numpy + +from julia.api import Julia +from julia import Main + +jl = Julia(compiled_modules=False) +jl.eval(""" +include("return_array.jl") +""") + +print('calling into Julia') +res = Main.fn(123) + +print('Back in Python') +for v in res: + print(type(v)) + print(v) diff --git a/test/return_array.jl b/test/return_array.jl new file mode 100644 index 0000000..32eb6a4 --- /dev/null +++ b/test/return_array.jl @@ -0,0 +1,12 @@ +using InteractiveUtils + +function fn(n) + a = Array{Float32}(undef, 5) + a .= n + b = Array{UInt32}([n, n, n, n, n]) + c = Array{UInt32}([n, n, n, n, n]) + d = Array{UInt32}([n, n, n, n, n]) + return a, b, c, d +end + +code_warntype(fn, (UInt32,)) \ No newline at end of file diff --git a/test/subdiv.py b/test/subdiv.py new file mode 100644 index 0000000..f041434 --- /dev/null +++ b/test/subdiv.py @@ -0,0 +1,28 @@ +import numpy +print(numpy.__file__) +print(numpy.__version__) + +import julia +print(julia.__file__) +print(julia.__version__) +from julia.api import Julia + +print('Initializing Julia (this might take a moment the first time)...') +jl = Julia(compiled_modules=False) +print('Done!') + +# Needs to come after the creation of the Julia instance above +from julia import Main + +jl.eval('include("../catmull-clark.jl")') + +vertices = numpy.array([-1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0], 'float32') +loop_start = numpy.array([0x00000001, 0x00000005, 0x00000009, 0x0000000d, 0x00000011, 0x00000015], 'uint32') +loop_total = numpy.array([0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004], 'uint32') +loops = numpy.array([0x00000001, 0x00000002, 0x00000004, 0x00000003, 0x00000003, 0x00000004, 0x00000008, 0x00000007, 0x00000007, 0x00000008, 0x00000006, 0x00000005, 0x00000005, 0x00000006, 0x00000002, 0x00000001, 0x00000003, 0x00000007, 0x00000005, 0x00000001, 0x00000008, 0x00000004, 0x00000002, 0x00000006], 'uint32') + +res = Main.subdivide(vertices, loop_start, loop_total, loops) + +for v in res: + print(type(v)) + print(v)