org.nd4j.linalg.cpu.nativecpu.ops.CpuOpContext Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2015-2018 Skymind, Inc.
*
* This program and the accompanying materials are made available under the
* terms of the Apache License, Version 2.0 which is available at
* https://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* SPDX-License-Identifier: Apache-2.0
******************************************************************************/
package org.nd4j.linalg.cpu.nativecpu.ops;
import lombok.NonNull;
import org.bytedeco.javacpp.BooleanPointer;
import org.bytedeco.javacpp.DoublePointer;
import org.bytedeco.javacpp.LongPointer;
import org.bytedeco.javacpp.Pointer;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.api.ops.BaseOpContext;
import org.nd4j.linalg.api.ops.OpContext;
import org.nd4j.linalg.primitives.Pair;
import org.nd4j.nativeblas.NativeOps;
import org.nd4j.nativeblas.NativeOpsHolder;
import org.nd4j.nativeblas.OpaqueContext;
import org.nd4j.nativeblas.OpaqueRandomGenerator;
import java.util.List;
/**
* CPU backend Context wrapper
*
* @author [email protected]
*/
public class CpuOpContext extends BaseOpContext implements OpContext {
// we might want to have configurable
private NativeOps nativeOps = NativeOpsHolder.getInstance().getDeviceNativeOps();
private OpaqueContext context = nativeOps.createGraphContext(1);
@Override
public void close() {
nativeOps.deleteGraphContext(context);
}
@Override
public void setIArguments(long... arguments) {
super.setIArguments(arguments);
nativeOps.setGraphContextIArguments(context, new LongPointer(arguments), arguments.length);
}
@Override
public void setBArguments(boolean... arguments) {
super.setBArguments(arguments);
nativeOps.setGraphContextBArguments(context, new BooleanPointer(arguments), arguments.length);
}
@Override
public void setTArguments(double... arguments) {
super.setTArguments(arguments);
nativeOps.setGraphContextTArguments(context, new DoublePointer(arguments), arguments.length);
}
@Override
public void setRngStates(long rootState, long nodeState) {
nativeOps.setRandomGeneratorStates(nativeOps.getGraphContextRandomGenerator(context), rootState, nodeState);
}
@Override
public Pair getRngStates() {
OpaqueRandomGenerator g = nativeOps.getGraphContextRandomGenerator(context);
return Pair.makePair(nativeOps.getRandomGeneratorRootState(g), nativeOps.getRandomGeneratorNodeState(g));
}
@Override
public void setInputArray(int index, @NonNull INDArray array) {
nativeOps.setGraphContextInputArray(context, index, array.isEmpty() ? null : array.data().addressPointer(), array.shapeInfoDataBuffer().addressPointer(), null, null);
super.setInputArray(index, array);
}
@Override
public void setOutputArray(int index, @NonNull INDArray array) {
nativeOps.setGraphContextOutputArray(context, index, array.isEmpty() ? null : array.data().addressPointer(), array.shapeInfoDataBuffer().addressPointer(), null, null);
super.setOutputArray(index, array);
}
@Override
public Pointer contextPointer() {
return context;
}
@Override
public void markInplace(boolean reallyInplace) {
nativeOps.markGraphContextInplace(context, reallyInplace);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy