From 37e82a8279e1e90f6654a12e046853b1bdde5b6c Mon Sep 17 00:00:00 2001 From: Yizhi Liu Date: Tue, 12 Jun 2018 12:09:26 -0700 Subject: [PATCH 1/3] do dispose in NDArray.finalize() --- .../core/src/main/scala/org/apache/mxnet/NDArray.scala | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala b/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala index 469107aa58cc..0dedc1b9fe83 100644 --- a/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala +++ b/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala @@ -547,14 +547,20 @@ object NDArray { * WARNING: it is your responsibility to clear this object through dispose(). * */ +// scalastyle:off finalize class NDArray private[mxnet](private[mxnet] val handle: NDArrayHandle, - val writable: Boolean = true) extends WarnIfNotDisposed { + val writable: Boolean = true) { // record arrays who construct this array instance // we use weak reference to prevent gc blocking private[mxnet] val dependencies = mutable.HashMap.empty[Long, WeakReference[NDArray]] private var disposed = false def isDisposed: Boolean = disposed + override protected def finalize(): Unit = { + finalize() + super.finalize() + } + def serialize(): Array[Byte] = { val buf = ArrayBuffer.empty[Byte] checkCall(_LIB.mxNDArraySaveRawBytes(handle, buf)) @@ -1017,6 +1023,7 @@ class NDArray private[mxnet](private[mxnet] val handle: NDArrayHandle, shape.hashCode + toArray.hashCode } } +// scalastyle:on finalize private[mxnet] object NDArrayConversions { implicit def int2Scalar(x: Int): NDArrayConversions = new NDArrayConversions(x.toFloat) From 76ae1db867a74d60ec790da660399344b81a989e Mon Sep 17 00:00:00 2001 From: Yizhi Liu Date: Wed, 13 Jun 2018 11:26:56 -0700 Subject: [PATCH 2/3] waitToRead() before SyncToCPU() --- scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala b/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala index 0dedc1b9fe83..d575134cabeb 100644 --- a/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala +++ b/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala @@ -937,6 +937,7 @@ class NDArray private[mxnet](private[mxnet] val handle: NDArrayHandle, } def internal: NDArrayInternal = { + waitToRead() val myType = dtype val arrLength = DType.numOfBytes(myType) * size val arr = Array.ofDim[Byte](arrLength) From 108f721091994b84cb33f1b15007d135908121cc Mon Sep 17 00:00:00 2001 From: Yizhi Liu Date: Wed, 13 Jun 2018 18:31:37 -0700 Subject: [PATCH 3/3] fix NDArray.finalize() --- .../core/src/main/scala/org/apache/mxnet/NDArray.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala b/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala index d575134cabeb..6e774d807c14 100644 --- a/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala +++ b/scala-package/core/src/main/scala/org/apache/mxnet/NDArray.scala @@ -557,7 +557,7 @@ class NDArray private[mxnet](private[mxnet] val handle: NDArrayHandle, def isDisposed: Boolean = disposed override protected def finalize(): Unit = { - finalize() + dispose() super.finalize() }