/** * This method ensures all operations that supposed to be executed at this moment, are executed. */ @Override public void push() { backendExecutioner.push(); }
@Override public INDArray permutei(int... rearrange) { Nd4j.getExecutioner().push(); return super.permutei(rearrange); }
@Override protected void dscal(long N, double alpha, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE scal called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(X); CublasPointer xCPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasDscal_v2(new cublasContext(handle), (int) N, new DoublePointer(alpha), (DoublePointer) xCPointer.getDevicePointer(), incX); } allocator.registerAction(ctx, X); OpExecutionerUtil.checkForAny(X); }
@Override protected void sscal(long N, float alpha, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.FLOAT) logger.warn("FLOAT scal called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(X); CublasPointer xCPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasSscal_v2(new cublasContext(handle),(int) N, new FloatPointer(alpha), (FloatPointer) xCPointer.getDevicePointer(), incX); } allocator.registerAction(ctx, X); OpExecutionerUtil.checkForAny(X); }
@Override protected void dscal(int N, double alpha, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE scal called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(X); CublasPointer xCPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasDscal_v2(new cublasContext(handle), N, new DoublePointer(alpha), (DoublePointer) xCPointer.getDevicePointer(), incX); } allocator.registerAction(ctx, X); OpExecutionerUtil.checkForAny(X); }
@Override protected void sscal(int N, float alpha, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.FLOAT) logger.warn("FLOAT scal called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(X); CublasPointer xCPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasSscal_v2(new cublasContext(handle), N, new FloatPointer(alpha), (FloatPointer) xCPointer.getDevicePointer(), incX); } allocator.registerAction(ctx, X); OpExecutionerUtil.checkForAny(X); }
@Override protected double dnrm2(int N, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE nrm2 called"); Nd4j.getExecutioner().push(); double ret; CudaContext ctx = allocator.getFlowController().prepareAction(null, X); CublasPointer cAPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); DoublePointer resultPointer = new DoublePointer(0.0f); cublasDnrm2_v2(new cublasContext(handle), N, (DoublePointer) cAPointer.getDevicePointer(), incX, resultPointer); ret = resultPointer.get(); } allocator.registerAction(ctx, null, X); return ret; }
@Override protected int idamax(long N, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE imax called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(null, X); int ret2; CublasPointer xCPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); IntPointer resultPointer = new IntPointer(new int[] {0}); cublasIdamax_v2(new cublasContext(handle), (int) N, (DoublePointer) xCPointer.getDevicePointer(), incX, resultPointer); ret2 = resultPointer.get(); } allocator.registerAction(ctx, null, X); return ret2 - 1; }
@Override protected int isamax(int N, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.FLOAT) logger.warn("FLOAT iamax called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(null, X); int ret2; CublasPointer xCPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); IntPointer resultPointer = new IntPointer(new int[] {0}); cublasIsamax_v2(new cublasContext(handle), N, (FloatPointer) xCPointer.getDevicePointer(), incX, resultPointer); ret2 = resultPointer.get(); } allocator.registerAction(ctx, null, X); return ret2 - 1; }
@Override protected int idamax(int N, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE imax called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(null, X); int ret2; CublasPointer xCPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); IntPointer resultPointer = new IntPointer(new int[] {0}); cublasIdamax_v2(new cublasContext(handle), N, (DoublePointer) xCPointer.getDevicePointer(), incX, resultPointer); ret2 = resultPointer.get(); } allocator.registerAction(ctx, null, X); return ret2 - 1; }
@Override protected double dnrm2(long N, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE nrm2 called"); Nd4j.getExecutioner().push(); double ret; CudaContext ctx = allocator.getFlowController().prepareAction(null, X); CublasPointer cAPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); DoublePointer resultPointer = new DoublePointer(0.0f); cublasDnrm2_v2(new cublasContext(handle), (int) N, (DoublePointer) cAPointer.getDevicePointer(), incX, resultPointer); ret = resultPointer.get(); } allocator.registerAction(ctx, null, X); return ret; }
@Override protected void dswap(long N, INDArray X, int incX, INDArray Y, int incY) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE swap called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(Y, X); CublasPointer xCPointer = new CublasPointer(X, ctx); CublasPointer yCPointer = new CublasPointer(Y, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasDswap_v2(new cublasContext(handle), (int) N, (DoublePointer) xCPointer.getDevicePointer(), incX, (DoublePointer) yCPointer.getDevicePointer(), incY); } allocator.registerAction(ctx, Y, X); OpExecutionerUtil.checkForAny(Y); }
@Override protected void sswap(int N, INDArray X, int incX, INDArray Y, int incY) { if (Nd4j.dataType() != DataBuffer.Type.FLOAT) logger.warn("FLOAT swap called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(Y, X); CublasPointer xCPointer = new CublasPointer(X, ctx); CublasPointer yCPointer = new CublasPointer(Y, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasSswap_v2(new cublasContext(handle), N, (FloatPointer) xCPointer.getDevicePointer(), incX, (FloatPointer) yCPointer.getDevicePointer(), incY); } allocator.registerAction(ctx, Y, X); OpExecutionerUtil.checkForAny(Y); }
@Override protected void dcopy(long N, INDArray X, int incX, INDArray Y, int incY) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE copy called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(Y, X); CublasPointer xCPointer = new CublasPointer(X, ctx); CublasPointer yCPointer = new CublasPointer(Y, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasDcopy_v2(new cublasContext(handle), (int) N, (DoublePointer) xCPointer.getDevicePointer(), incX, (DoublePointer) yCPointer.getDevicePointer(), incY); } allocator.registerAction(ctx, Y, X); OpExecutionerUtil.checkForAny(Y); }
@Override protected void dcopy(int N, INDArray X, int incX, INDArray Y, int incY) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE copy called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(Y, X); CublasPointer xCPointer = new CublasPointer(X, ctx); CublasPointer yCPointer = new CublasPointer(Y, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasDcopy_v2(new cublasContext(handle), N, (DoublePointer) xCPointer.getDevicePointer(), incX, (DoublePointer) yCPointer.getDevicePointer(), incY); } allocator.registerAction(ctx, Y, X); OpExecutionerUtil.checkForAny(Y); }
@Override protected void sswap(long N, INDArray X, int incX, INDArray Y, int incY) { if (Nd4j.dataType() != DataBuffer.Type.FLOAT) logger.warn("FLOAT swap called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(Y, X); CublasPointer xCPointer = new CublasPointer(X, ctx); CublasPointer yCPointer = new CublasPointer(Y, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasSswap_v2(new cublasContext(handle), (int) N, (FloatPointer) xCPointer.getDevicePointer(), incX, (FloatPointer) yCPointer.getDevicePointer(), incY); } allocator.registerAction(ctx, Y, X); OpExecutionerUtil.checkForAny(Y); }
@Override protected void scopy(int N, INDArray X, int incX, INDArray Y, int incY) { if (Nd4j.dataType() != DataBuffer.Type.FLOAT) logger.warn("FLOAT copy called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(Y, X); CublasPointer xCPointer = new CublasPointer(X, ctx); CublasPointer yCPointer = new CublasPointer(Y, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasScopy_v2(new cublasContext(handle), N, (FloatPointer) xCPointer.getDevicePointer(), incX, (FloatPointer) yCPointer.getDevicePointer(), incY); } allocator.registerAction(ctx, Y, X); OpExecutionerUtil.checkForAny(Y); }
@Override protected void dswap(int N, INDArray X, int incX, INDArray Y, int incY) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE swap called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(Y, X); CublasPointer xCPointer = new CublasPointer(X, ctx); CublasPointer yCPointer = new CublasPointer(Y, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasDswap_v2(new cublasContext(handle), N, (DoublePointer) xCPointer.getDevicePointer(), incX, (DoublePointer) yCPointer.getDevicePointer(), incY); } allocator.registerAction(ctx, Y, X); OpExecutionerUtil.checkForAny(Y); }
@Override protected void scopy(long N, INDArray X, int incX, INDArray Y, int incY) { if (Nd4j.dataType() != DataBuffer.Type.FLOAT) logger.warn("FLOAT copy called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(Y, X); CublasPointer xCPointer = new CublasPointer(X, ctx); CublasPointer yCPointer = new CublasPointer(Y, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasScopy_v2(new cublasContext(handle), (int) N, (FloatPointer) xCPointer.getDevicePointer(), incX, (FloatPointer) yCPointer.getDevicePointer(), incY); } allocator.registerAction(ctx, Y, X); OpExecutionerUtil.checkForAny(Y); }
@Override protected void dsyrk(char Order, char Uplo, char Trans, int N, int K, double alpha, INDArray A, int lda, double beta, INDArray C, int ldc) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE syrk called"); Nd4j.getExecutioner().push(); CudaContext ctx = allocator.getFlowController().prepareAction(C, A); CublasPointer aPointer = new CublasPointer(A, ctx); CublasPointer cPointer = new CublasPointer(C, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); cublasDsyrk_v2(new cublasContext(handle), convertUplo(Uplo), Trans, N, K, new DoublePointer(alpha), (DoublePointer) aPointer.getDevicePointer(), lda, new DoublePointer(beta), (DoublePointer) cPointer.getDevicePointer(), ldc); } allocator.registerAction(ctx, C, A); OpExecutionerUtil.checkForAny(C); }