Re: [julia-users] Matrix multiplication: "_unsafe_getindex" and "_unsafe_batchsetindex"
Thanks for the clarification, Tim! My concern was that the "unsafe" calls signalled a problem with the bounds. Am Donnerstag, 24. September 2015 02:51:16 UTC+2 schrieb Tim Holy: > > Welcome to Julia! > > Can you clarify the precise nature of your concern? I'm not sure I see a > problem. To make sure you're interpreting this right, it's indicating that > 741/839 = 88% of your execution time is in gemm!, which is the core > routine > for matrix-matrix multiplication. > > The "unsafe" calls refer to the fact that these functions assume that the > indexes are in bounds...which is fine if the algorithm is guaranteed to > stay > in-bounds, or if a previous function already checked to make sure that > everything is OK. In other words, these are just internal functions that > get > called in the course of multiplication. > > Best, > --Tim > > On Wednesday, September 23, 2015 06:33:55 AM Benjamin Born wrote: > > Hey everybody, > > > > I'm a Julia beginner slowly transitioning from Matlab to Julia (0.4 RC2 > on > > Win 7 64bit) and I haven't been able to figure out the following > problem. > > Profiling my code I have received the following message for a line of my > > code that multiplies three matrices D=A*B*C: > > > > > > > > 839 ...on\run_bbeg_check.jl; vfi_smart; line: 284 > > 5 cartesian.jl; _unsafe_batchsetindex!; line: 34 > > 4 multidimensional.jl; _unsafe_batchsetindex!; line: 322 > > 4 operators.jl; setindex_shape_check; line: 256 > > 11 multidimensional.jl; _unsafe_batchsetindex!; line: 328 > > 5 multidimensional.jl; _unsafe_batchsetindex!; line: 329 > > 15 multidimensional.jl; _unsafe_getindex; line: 193 > > 42 multidimensional.jl; _unsafe_getindex; line: 195 > > 757 operators.jl; *; line: 103 > > 1 linalg/matmul.jl; gemm_wrapper!; line: 321 > > 1 linalg/matmul.jl; gemm_wrapper!; line: 327 > >1 abstractarray.jl; stride; line: 80 > > 741 linalg/matmul.jl; gemm_wrapper!; line: 328 > >741 linalg/blas.jl; gemm!; line: 632 > > > > > > > > My code runs and I also get the same results as in Matlab but I would > still > > like to know whether I do something wrong or inefficient. > > > > Unfortunately I could not exactly reproduce the message with a > simplified > > example code but the following code at least produces the > > "_unsafe_getindex" message: > > > > function matmult_test() > > A=rand(20,20,5) > > B=rand(20,700,5) > > C=eye(700,700) > > D=zeros(20,700,5); > > for ii=1:5 > > D[:,:,ii] = A[:,:,ii]*B[:,:,ii]*C; > > end > > end > > matmult_test() > > Profile.clear() > > @profile matmult_test() > > Profile.print() > > > > Thanks for your help, > > > > Benjamin > >
[julia-users] Matrix multiplication: "_unsafe_getindex" and "_unsafe_batchsetindex"
Hey everybody, I'm a Julia beginner slowly transitioning from Matlab to Julia (0.4 RC2 on Win 7 64bit) and I haven't been able to figure out the following problem. Profiling my code I have received the following message for a line of my code that multiplies three matrices D=A*B*C: 839 ...on\run_bbeg_check.jl; vfi_smart; line: 284 5 cartesian.jl; _unsafe_batchsetindex!; line: 34 4 multidimensional.jl; _unsafe_batchsetindex!; line: 322 4 operators.jl; setindex_shape_check; line: 256 11 multidimensional.jl; _unsafe_batchsetindex!; line: 328 5 multidimensional.jl; _unsafe_batchsetindex!; line: 329 15 multidimensional.jl; _unsafe_getindex; line: 193 42 multidimensional.jl; _unsafe_getindex; line: 195 757 operators.jl; *; line: 103 1 linalg/matmul.jl; gemm_wrapper!; line: 321 1 linalg/matmul.jl; gemm_wrapper!; line: 327 1 abstractarray.jl; stride; line: 80 741 linalg/matmul.jl; gemm_wrapper!; line: 328 741 linalg/blas.jl; gemm!; line: 632 My code runs and I also get the same results as in Matlab but I would still like to know whether I do something wrong or inefficient. Unfortunately I could not exactly reproduce the message with a simplified example code but the following code at least produces the "_unsafe_getindex" message: function matmult_test() A=rand(20,20,5) B=rand(20,700,5) C=eye(700,700) D=zeros(20,700,5); for ii=1:5 D[:,:,ii] = A[:,:,ii]*B[:,:,ii]*C; end end matmult_test() Profile.clear() @profile matmult_test() Profile.print() Thanks for your help, Benjamin
Re: [julia-users] Matrix multiplication: "_unsafe_getindex" and "_unsafe_batchsetindex"
Welcome to Julia! Can you clarify the precise nature of your concern? I'm not sure I see a problem. To make sure you're interpreting this right, it's indicating that 741/839 = 88% of your execution time is in gemm!, which is the core routine for matrix-matrix multiplication. The "unsafe" calls refer to the fact that these functions assume that the indexes are in bounds...which is fine if the algorithm is guaranteed to stay in-bounds, or if a previous function already checked to make sure that everything is OK. In other words, these are just internal functions that get called in the course of multiplication. Best, --Tim On Wednesday, September 23, 2015 06:33:55 AM Benjamin Born wrote: > Hey everybody, > > I'm a Julia beginner slowly transitioning from Matlab to Julia (0.4 RC2 on > Win 7 64bit) and I haven't been able to figure out the following problem. > Profiling my code I have received the following message for a line of my > code that multiplies three matrices D=A*B*C: > > > > 839 ...on\run_bbeg_check.jl; vfi_smart; line: 284 > 5 cartesian.jl; _unsafe_batchsetindex!; line: 34 > 4 multidimensional.jl; _unsafe_batchsetindex!; line: 322 > 4 operators.jl; setindex_shape_check; line: 256 > 11 multidimensional.jl; _unsafe_batchsetindex!; line: 328 > 5 multidimensional.jl; _unsafe_batchsetindex!; line: 329 > 15 multidimensional.jl; _unsafe_getindex; line: 193 > 42 multidimensional.jl; _unsafe_getindex; line: 195 > 757 operators.jl; *; line: 103 > 1 linalg/matmul.jl; gemm_wrapper!; line: 321 > 1 linalg/matmul.jl; gemm_wrapper!; line: 327 >1 abstractarray.jl; stride; line: 80 > 741 linalg/matmul.jl; gemm_wrapper!; line: 328 >741 linalg/blas.jl; gemm!; line: 632 > > > > My code runs and I also get the same results as in Matlab but I would still > like to know whether I do something wrong or inefficient. > > Unfortunately I could not exactly reproduce the message with a simplified > example code but the following code at least produces the > "_unsafe_getindex" message: > > function matmult_test() > A=rand(20,20,5) > B=rand(20,700,5) > C=eye(700,700) > D=zeros(20,700,5); > for ii=1:5 > D[:,:,ii] = A[:,:,ii]*B[:,:,ii]*C; > end > end > matmult_test() > Profile.clear() > @profile matmult_test() > Profile.print() > > Thanks for your help, > > Benjamin