This is an automated email from the ASF dual-hosted git repository. iblis pushed a commit to branch ib/jl-runtime-features in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git
The following commit(s) were added to refs/heads/ib/jl-runtime-features by this push: new 84aec6e mx.isenabled 84aec6e is described below commit 84aec6e5087f6ef6ac60f5bd4dfe10c61410367a Author: Iblis Lin <ib...@hs.ntnu.edu.tw> AuthorDate: Tue Feb 12 12:20:55 2019 +0000 mx.isenabled --- julia/src/base.jl | 7 +++---- julia/src/runtime.jl | 27 +++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/julia/src/base.jl b/julia/src/base.jl index 61779d1..6831464 100644 --- a/julia/src/base.jl +++ b/julia/src/base.jl @@ -85,12 +85,11 @@ function mx_get_last_error() end "Utility macro to call MXNet API functions" -macro mxcall(fv, argtypes, args...) - f = eval(fv) +macro mxcall(f, argtypes, args...) args = map(esc, args) quote - _mxret = ccall(($(QuoteNode(f)), $MXNET_LIB), - Cint, $argtypes, $(args...)) + _mxret = ccall(($f, $MXNET_LIB), + Cint, $(esc(argtypes)), $(args...)) if _mxret != 0 err_msg = mx_get_last_error() throw(MXError(err_msg)) diff --git a/julia/src/runtime.jl b/julia/src/runtime.jl index bb8a81c..fcdadfb 100644 --- a/julia/src/runtime.jl +++ b/julia/src/runtime.jl @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. - # runtime detection of compile time features in the native library module MXRuntime @@ -23,7 +22,7 @@ module MXRuntime using ..mx export LibFeature -export libinfo_features +export libinfo_features, isenabled # defined in include/mxnet/c_api.h struct LibFeature @@ -42,12 +41,32 @@ Check the library for compile-time features. The list of features are maintained in libinfo.h and libinfo.cc """ function libinfo_features() - ref = Ref{Ptr{mx.MXRuntime.LibFeature}}(C_NULL) + ref = Ref{Ptr{LibFeature}}(C_NULL) s = Ref{Csize_t}(C_NULL) - mx.@mxcall(:MXLibInfoFeatures, (Ref{Ptr{mx.MXRuntime.LibFeature}}, Ref{Csize_t}), ref, s) + @mx.mxcall(:MXLibInfoFeatures, (Ref{Ptr{LibFeature}}, Ref{Csize_t}), ref, s) unsafe_wrap(Array, ref[], s[]) end +""" + isenabled(x::Symbol)::Bool + +Returns the given runtime feature is enabled or not. + +```julia-repl +julia> mx.isenabled(:CUDA) +false + +julia> mx.isenabled(:CPU_SSE) +true +``` + +See also `mx.libinfo_features`. +""" +isenabled(x::Symbol) = + any(libinfo_features()) do i + Symbol(unsafe_string(i.name)) == x && i.enabled + end + end # module MXRuntime using .MXRuntime