25 #ifndef MXNET_NDARRAY_H_ 26 #define MXNET_NDARRAY_H_ 28 #include <dmlc/base.h> 29 #include <dmlc/logging.h> 31 #include <dmlc/type_traits.h> 32 #include <dmlc/registry.h> 33 #include <nnvm/node.h> 40 #if MXNET_USE_MKLDNN == 1 47 #if DMLC_USE_CXX11 == 0 48 #error "cxx11 was required for ndarray module" 95 bool delay_alloc =
false,
int dtype = mshadow::default_type_flag)
96 : ptr_(std::make_shared<Chunk>(shape, ctx, delay_alloc, dtype)),
98 entry_({
nullptr, 0, 0}) {
103 bool delay_alloc =
true,
int dtype = mshadow::default_type_flag,
104 std::vector<int> aux_types = {}, std::vector<TShape> aux_shapes = {},
115 : ptr_(std::make_shared<Chunk>(data, dev_id)), shape_(data.shape_),
117 entry_({
nullptr, 0, 0}) {
121 : ptr_(std::make_shared<Chunk>(shared_pid, shared_id, shape, dtype)), shape_(shape),
122 dtype_(dtype), storage_type_(
kDefaultStorage), entry_({
nullptr, 0, 0}) {
136 const TBlob &data,
const std::vector<TBlob> &aux_data,
int dev_id)
137 : ptr_(std::make_shared<Chunk>(stype, data, aux_data, dev_id)), shape_(shape),
138 dtype_(data.type_flag_), storage_type_(stype), entry_({
nullptr, 0, 0}) {
155 return byte_offset_ > 0 || shape() != ptr_->storage_shape;
160 return ptr_ == other.ptr_ &&
161 shape_ == other.shape_ &&
162 byte_offset_ == other.byte_offset_ &&
163 dtype_ == other.dtype_;
178 CHECK(ptr_ !=
nullptr);
180 <<
"storage_shape() is not intended for kDefaultStorage.";
181 return ptr_->storage_shape;
191 <<
"aux_shape() is not intended for kDefaultStorage.";
192 return ptr_->aux_shapes[index];
198 <<
"aux_shapes() is not intended for kDefaultStorage.";
199 return ptr_->aux_shapes;
205 <<
"aux_types() is not intended for kDefaultStorage.";
206 return ptr_->aux_types;
218 <<
"set_aux_shape() is not intended for kDefaultStorage.";
219 ptr_->set_aux_shape(index, shape);
239 auto stype = storage_type();
241 auto shape = aux_shape(i);
242 auto type = aux_type(i);
243 MSHADOW_TYPE_SWITCH(type, DType, {
244 auto dptr =
static_cast<DType*
>(ptr_->aux_handles[i].dptr);
246 <<
"Unexpected storage type: " << stype;
247 res =
TBlob(dptr, shape, ptr_->aux_handles[i].ctx.dev_mask(), type);
256 return ptr_->shandle.ctx;
266 return ptr_->aux_types[i];
270 return storage_type_;
274 return ptr_.get() ==
nullptr;
277 bool fresh_out_grad()
const;
279 void set_fresh_out_grad(
bool state)
const;
285 if (is_none())
return false;
286 auto stype = storage_type();
288 <<
"storage_initialized() is not intended for kDefaultStorage.";
291 <<
"inconsistent storage shape " << storage_shape()
295 CHECK_EQ(aux_shape(
csr::kIdx)[0], storage_shape()[0])
296 <<
"inconsistent storage shape " << storage_shape()
297 <<
" vs. aux shape " << aux_shape(
csr::kIdx);
300 LOG(FATAL) <<
"Unknown storage type";
309 return ptr_->shandle;
316 if (is_none())
return;
324 if (is_none())
return;
332 },
Context{}, {}, {ptr_->var});
347 void Save(dmlc::Stream *strm)
const;
353 bool LegacyLoad(dmlc::Stream *strm,
const uint32_t magic);
359 bool Load(dmlc::Stream *strm);
438 void SyncCopyFromCPU(
const void *data,
size_t size)
const;
443 void SyncCopyFromNDArray(
const NDArray &src,
int i = -1,
int j = -1);
455 void SyncCopyToCPU(
void *data,
size_t size)
const;
461 void SyncCheckFormat(
const bool full_check)
const;
492 NDArray aux_ndarray(
size_t i)
const;
509 <<
"AsArray is intended only for kDefaultStorage.";
510 CHECK_GE(ptr_->shandle.size,
511 shape.Size() * mshadow::mshadow_sizeof(dtype))
512 <<
"NDArray.AsArray: target memory size is bigger";
530 CHECK(shape_ == arr.shape_) <<
"ndarray shape is different from the target";
531 CHECK(dtype_ == arr.dtype_) <<
"ndarray dtype is different from the target";
534 <<
"Only to be used with CSR and RSP storage types";
537 arr.ptr_->shandle = ptr_->shandle;
538 ptr_->shandle = shandle_dst;
540 ptr_->storage_shape = arr.ptr_->storage_shape;
541 ptr_->storage_type = arr.ptr_->storage_type;
542 ptr_->ctx = arr.ptr_->ctx;
546 CHECK(ptr_->aux_handles.size() == arr.ptr_->aux_handles.size())
547 <<
"ndarray number of aux_handles is different from target";
548 for (
auto &aux_handle : arr.ptr_->aux_handles) {
550 ptr_->aux_handles[aux_idx] = aux_handle;
551 aux_handle = aux_dst;
554 ptr_->aux_types = arr.ptr_->aux_types;
555 ptr_->aux_shapes = arr.ptr_->aux_shapes;
575 ret.entry_ = nnvm::NodeEntry{
nullptr, 0, 0};
579 nnvm::Symbol get_autograd_symbol()
const;
586 ptr_->CheckAndAlloc();
602 ptr_->CheckAndAlloc(shape.Size() * mshadow::mshadow_sizeof(dtype_));
611 <<
"CheckAndAlloc(aux_shapes) is not intended for kDefaultStorage";
612 ptr_->CheckAndAlloc(shape_, aux_shapes, dtype_);
616 <<
"CheckAndAllocData is not intended for kDefaultStorage";
617 ptr_->CheckAndAllocData(storage_shape, dtype_);
621 <<
"CheckAndAllocAuxData is not intended for kDefaultStorage";
622 ptr_->CheckAndAllocAuxData(i, aux_shape);
625 #if MXNET_USE_MKLDNN == 1 629 bool IsMKLDNNData()
const {
630 return ptr_->IsMKLDNN();
635 bool IsDefaultData()
const {
636 return ptr_->IsDefault();
648 const mkldnn::memory *GetMKLDNNData()
const;
653 const mkldnn::memory *GetMKLDNNData(
654 const mkldnn::memory::primitive_desc &desc)
const;
660 const mkldnn::memory *GetMKLDNNDataReorder(
661 const mkldnn::memory::primitive_desc &desc)
const;
666 void CopyFrom(
const mkldnn::memory &mem);
671 mkldnn::memory *CreateMKLDNNData(
672 const mkldnn::memory::primitive_desc &desc);
679 void Reorder2DefaultAsync();
680 void MKLDNNDataReorderAsync(
const mkldnn::memory::primitive_desc &desc);
686 NDArray Reorder2Default()
const;
688 void InvalidateMKLDNNData();
709 static void Save(dmlc::Stream* fo,
710 const std::vector<NDArray>& data,
711 const std::vector<std::string>& names);
718 static void Load(dmlc::Stream* fi,
719 std::vector<NDArray>* data,
720 std::vector<std::string>* keys);
736 std::vector<Storage::Handle> aux_handles;
738 #if MXNET_USE_MKLDNN == 1 741 std::shared_ptr<MKLDNNMemory> mkl_mem_;
758 std::vector<int> aux_types;
767 std::vector<TShape> aux_shapes;
770 Chunk() : static_data(true), delay_alloc(false) {}
773 Chunk(
TShape shape,
Context ctx_,
bool delay_alloc_,
int dtype)
774 : static_data(false), delay_alloc(true), ctx(ctx_) {
775 auto size = shape.Size();
776 storage_shape = shape;
778 shandle.
size = size * mshadow::mshadow_sizeof(dtype);
780 if (!delay_alloc_) this->CheckAndAlloc();
783 Chunk(
const TBlob &data,
int dev_id)
784 : static_data(true), delay_alloc(false) {
787 if (data.
dev_mask() == cpu::kDevMask) {
790 CHECK_EQ(data.
dev_mask(), gpu::kDevMask);
797 storage_shape = data.
shape_;
800 Chunk(
int shared_pid,
int shared_id,
const TShape& shape,
int dtype)
801 : static_data(false), delay_alloc(false) {
804 shandle.
size = shape.Size() * mshadow::mshadow_sizeof(dtype);
809 storage_shape = shape;
813 bool delay_alloc_,
int dtype,
const std::vector<int> &aux_types_,
814 const std::vector<TShape> &aux_shapes_)
815 : static_data(false), delay_alloc(delay_alloc_), storage_type(storage_type_),
816 aux_types(aux_types_), ctx(ctx_), storage_shape(storage_shape_),
817 aux_shapes(aux_shapes_) {
821 for (
size_t i = 0; i < aux_shapes.size(); i++) {
822 CheckAndAllocAuxData(i, aux_shapes[i]);
825 aux_handles[i].ctx = ctx;
828 CheckAndAllocData(storage_shape, dtype);
833 const std::vector<TBlob> &aux_data,
int dev_id)
834 : static_data(true), delay_alloc(false), storage_type(storage_type_) {
835 using namespace mshadow;
840 if (data.
dev_mask() == cpu::kDevMask) {
843 CHECK_EQ(data.
dev_mask(), gpu::kDevMask);
850 storage_shape = data.
shape_;
852 for (
const auto &aux : aux_data) {
854 aux_handle.
ctx = ctx;
855 aux_handle.
dptr = aux.dptr_;
856 aux_handle.
size = aux.shape_.Size() * mshadow_sizeof(aux.type_flag_);
857 aux_handles.push_back(aux_handle);
858 aux_types.emplace_back(aux.type_flag_);
859 aux_shapes.emplace_back(aux.shape_);
864 inline void set_aux_shape(
const size_t i,
const TShape& shape) {
865 aux_shapes[i] = shape;
866 if (storage_shape.ndim() > 0) {
868 storage_shape[0] = shape[0];
870 storage_shape[0] = shape[0];
876 inline void CheckAndAlloc(
void) {
879 #if MXNET_USE_MKLDNN == 1 888 void CheckAndAlloc(uint64_t dbytes) {
890 <<
"CheckAndAlloc(dbytes) is only intended for kDefaultStorage";
891 dbytes =
std::max(dbytes, static_cast<uint64_t>(shandle.
size));
894 #if MXNET_USE_MKLDNN == 1 898 }
else if (shandle.
size < dbytes) {
903 #if MXNET_USE_MKLDNN == 1 909 inline void CheckAndAlloc(
const TShape &shape,
const std::vector<TShape> &aux_shapes,
916 TShape storage_shape(shape);
917 storage_shape[0] = aux_shape[0];
918 CheckAndAllocData(storage_shape, dtype);
922 CheckAndAllocData(aux_shapes[
csr::kIdx], dtype);
924 LOG(FATAL) <<
"Storage type " << storage_type <<
" not implemented for CheckAndAlloc";
931 void CheckAndAllocData(
const TShape &shape,
int dtype);
933 #if MXNET_USE_MKLDNN == 1 936 void SetMKLMem(
const TShape &shape,
int dtype);
939 void Reorder2Default();
941 void MKLDNNDataReorder(
const mkldnn::memory::primitive_desc &desc);
942 bool IsMKLDNN()
const;
943 bool IsDefault()
const;
951 inline void CheckAndAllocAuxData(
size_t i,
const TShape &shape) {
952 CHECK_EQ(shape.ndim(), 1) <<
"shape must be 1D in CheckAndAllocAuxData";
954 <<
"storage type cannot be kUndefinedStorage in CheckAndAllocAuxData";
956 <<
"storage type cannot be kDefaultStorage in CheckAndAllocAuxData";
957 if (aux_handles.size() <= i) {
958 aux_handles.resize(i + 1);
960 size_t aux_bytes = shape.Size() * mshadow::mshadow_sizeof(aux_types[i]);
961 if (aux_handles[i].size < aux_bytes) {
968 set_aux_shape(i, shape);
974 void SetTBlob()
const;
977 std::shared_ptr<Chunk> ptr_{
nullptr};
981 size_t byte_offset_ = 0;
989 nnvm::NodeEntry entry_;
997 mutable TBlob tblob_;
1162 typedef std::function<void (
NDArray **used_vars,
1186 :
public dmlc::FunctionRegEntryBase<NDArrayFunctionReg,
1187 NDArrayAPIFunction> {
1213 int num_params,
char **param_keys,
char **param_vals) {
1214 (*fsetvalue)(s[0], mutate_vars[0]);
1216 num_mutate_vars = 1; num_scalars = 1;
1217 this->add_argument(
"src",
"real_t",
"Source input to the function.");
1230 body = [fternary](
NDArray **used_vars,
1232 int num_params,
char **param_keys,
char **param_vals) {
1233 (*fternary)(*used_vars[0], *used_vars[1], *used_vars[2], mutate_vars[0]);
1235 num_use_vars = 3; num_mutate_vars = 1;
1237 this->add_argument(
"lhs",
"NDArray",
"Left operand to the function.");
1238 this->add_argument(
"mhs",
"NDArray",
"Middle operand to the function.");
1239 this->add_argument(
"rhs",
"NDArray",
"Right operand to the function.");
1252 int num_params,
char **param_keys,
char **param_vals) {
1253 (*fbinary)(*used_vars[0], *used_vars[1], mutate_vars[0]);
1255 num_use_vars = 2; num_mutate_vars = 1;
1257 this->add_argument(
"lhs",
"NDArray",
"Left operand to the function.");
1258 this->add_argument(
"rhs",
"NDArray",
"Right operand to the function.");
1271 int num_params,
char **param_keys,
char **param_vals) {
1272 (*fscalar)(*used_vars[0], s[0], mutate_vars[0]);
1274 num_use_vars = 1; num_mutate_vars = 1; num_scalars = 1;
1276 this->add_argument(
"lhs",
"NDArray",
"Left operand to the function.");
1277 this->add_argument(
"rhs",
"real_t",
"Right operand to the function.");
1289 int num_params,
char **param_keys,
char **param_vals) {
1290 (*funary)(*used_vars[0], mutate_vars[0]);
1292 num_use_vars = 1; num_mutate_vars = 1;
1294 this->add_argument(
"src",
"NDArray",
"Source input to the function.");
1304 void (*fgeneric)(
NDArray **used_vars,
1307 const std::map<std::string, std::string>& param)) {
1309 int num_params,
char **param_keys,
char **param_vals) {
1310 std::map<std::string, std::string> param;
1311 for (
int i = 0; i < num_params; ++i) {
1312 param[param_keys[i]] = param_vals[i];
1314 fgeneric(used_vars, s, mutate_vars, param);
1324 num_use_vars = n;
return *
this;
1332 num_mutate_vars = n;
return *
this;
1340 num_scalars = n;
return *
this;
1348 type_mask = tmask;
return *
this;
1363 #define MXNET_REGISTER_NDARRAY_FUN(name) \ 1364 DMLC_REGISTRY_REGISTER(::mxnet::NDArrayFunctionReg, NDArrayFunctionReg, name) 1372 #endif // MXNET_NDARRAY_H_
NDArrayStorageType
Definition: ndarray.h:61
NDArrayFunctionReg & set_num_mutate_vars(unsigned n)
set the number of mutate variables
Definition: ndarray.h:1331
NDArrayFormatErr
Definition: ndarray.h:68
Engine::VarHandle var() const
Definition: ndarray.h:336
void RandomSeed(uint32_t seed)
Seed all random number generator in mxnet.
NDArrayStorageType storage_type() const
Definition: ndarray.h:269
Engine that schedules all the operations according to dependency.
TShape shape_
shape of the tensor
Definition: tensor_blob.h:72
const TShape & storage_shape() const
Definition: ndarray.h:177
NDArrayFunctionReg()
constructor
Definition: ndarray.h:1199
namespace of mxnet
Definition: base.h:118
void ReshapeAndAlloc(const TShape &shape)
Allocate the space if the allocation has been delayed or the requested size is bigger than the availa...
Definition: ndarray.h:598
NDArray operator*(const NDArray &lhs, const NDArray &rhs)
elementwise multiplication
virtual void Free(Handle handle)=0
Free storage.
NDArrayFunctionReg & set_num_use_vars(unsigned n)
set the number of mutate variables
Definition: ndarray.h:1323
DMLC_DECLARE_TRAITS(has_saveload, mxnet::NDArray, true)
traits
mshadow::default_real_t real_t
data type that will be used to store ndarray
Definition: base.h:126
static Context GPU(int32_t dev_id=-1)
int type_mask
information on how function should be called from API
Definition: ndarray.h:1195
NDArrayFunctionReg & set_function(void(*funary)(const NDArray &src, NDArray *out))
set the function body to a unary NDArray function this will also auto set the parameters correctly ...
Definition: ndarray.h:1286
NDArray Detach() const
Return a copy of this NDArray without autograd history.
Definition: ndarray.h:573
int type_flag_
type flag of the tensor blob
Definition: tensor_blob.h:74
NDArrayFunctionReg & set_num_scalars(unsigned n)
set the number of scalar arguments
Definition: ndarray.h:1339
nnvm::TShape TShape
Shape data structure used to record shape information.
Definition: base.h:128
unsigned num_mutate_vars
number of variable mutated by this function
Definition: ndarray.h:1191
execution time context. The information needed in runtime for actual execution.
Definition: base.h:257
void * dptr
Pointer to the data.
Definition: storage.h:45
NDArrayFunctionReg & set_function(void(*fscalar)(const NDArray &lhs, const real_t &rhs, NDArray *out))
set the function body to a binary NDArray function this will also auto set the parameters correctly ...
Definition: ndarray.h:1267
Context ctx
Context information about device and ID.
Definition: storage.h:53
Storage::Handle storage_handle() const
get storage handle
Definition: ndarray.h:305
NDArray()
default constructor
Definition: ndarray.h:85
unsigned num_use_vars
number of variable used by this function
Definition: ndarray.h:1189
int shared_id
Definition: storage.h:58
NDArrayFunctionReg & set_function(void(*fternary)(const NDArray &lhs, const NDArray &mhs, const NDArray &rhs, NDArray *out))
set the function body to a ternary NDArray function this will also auto set the parameters correctly ...
Definition: ndarray.h:1226
Symbol max(const std::string &symbol_name, Symbol data, dmlc::optional< Shape > axis=dmlc::optional< Shape >(), bool keepdims=false, bool exclude=false)
Definition: op.h:2735
RowSparseAuxType
Definition: ndarray.h:58
bool is_none() const
Definition: ndarray.h:273
all the scalar should go before use_vars
Definition: ndarray.h:1173
void SampleExponential(real_t lambda, NDArray *out)
Sample exponential distribution for each elements of out.
void SparseUpdateChunk(const NDArray &arr) const
Update ndarray chunk storage handles using existing ndarray storage handles Also update the aux_handl...
Definition: ndarray.h:529
void * dptr_
pointer to the data
Definition: tensor_blob.h:70
virtual VarHandle NewVariable()=0
Allocate a new variable, the variable can then be used to schedule the operation concurrently via dep...
whether this function allows the handles in the target to be empty NDArray that are not yet initializ...
Definition: ndarray.h:1182
const TShape & shape() const
Definition: ndarray.h:169
Definition: ndarray.h:1368
virtual void WaitForVar(VarHandle var)=0
Wait for a variable.
const std::vector< TShape > & aux_shapes() const
Definition: ndarray.h:196
bool IsView() const
Definition: ndarray.h:147
Context ctx() const
Definition: ndarray.h:254
void CopyFromTo(const NDArray &from, const NDArray *to, int priority=0)
issue an copy operation from one NDArray to another the two ndarray can sit on different devices this...
CSRAuxType
Definition: ndarray.h:54
void SampleGaussian(real_t mu, real_t sigma, NDArray *out)
Sample gaussian distribution for each elements of out.
Storage manager across multiple devices.
void WaitToRead() const
Block until all the pending write operations with respect to current NDArray are finished, and read can be performed.
Definition: ndarray.h:315
virtual void PushAsync(AsyncFn exec_fun, Context exec_ctx, std::vector< VarHandle > const &const_vars, std::vector< VarHandle > const &mutable_vars, FnProperty prop=FnProperty::kNormal, int priority=0, const char *opr_name=nullptr, bool wait=false)=0
Push an asynchronous operation to the engine.
int dtype() const
Definition: ndarray.h:261
bool storage_initialized() const
Returns true if a sparse ndarray's aux_data and storage are initialized Throws an exception if the in...
Definition: ndarray.h:284
Storage handle.
Definition: storage.h:41
static Context CPUShared(int32_t dev_id=0)
void set_aux_shape(size_t index, const TShape &shape) const
For a sparse operation on a csr matrix for example, the size of the column index array is an estimate...
Definition: ndarray.h:216
void CheckAndAllocData(const TShape &storage_shape) const
Definition: ndarray.h:614
size_t num_aux_data(NDArrayStorageType stype)
NDArrayFunctionReg & set_type_mask(int tmask)
set type mask
Definition: ndarray.h:1347
engine::VarHandle VarHandle
Variable pointer.
Definition: engine.h:107
void WaitToWrite() const
Block until all the pending read/write operations with respect to current NDArray are finished...
Definition: ndarray.h:323
Handle Alloc(size_t size, Context ctx)
Allocate a new contiguous memory for a given size.
Definition: storage.h:66
NDArray operator-(const NDArray &lhs, const NDArray &rhs)
elementwise subtraction
NDArrayFunctionReg & set_function(void(*fsetvalue)(const real_t &rhs, NDArray *out))
set the function body to a NDArray setvalue function this will also auto set the parameters correctly...
Definition: ndarray.h:1210
NDArray(int shared_pid, int shared_id, const TShape &shape, int dtype)
create ndarray from shared memory
Definition: ndarray.h:120
NDArray operator+(const NDArray &lhs, const NDArray &rhs)
elementwise add
size_t byte_offset() const
Definition: ndarray.h:340
void SampleUniform(real_t begin, real_t end, NDArray *out)
Sample uniform distribution for each elements of out.
Registry entry for NDArrayFunction.
Definition: ndarray.h:1185
NDArrayFunctionReg & set_function(void(*fbinary)(const NDArray &lhs, const NDArray &rhs, NDArray *out))
set the function body to a binary NDArray function this will also auto set the parameters correctly ...
Definition: ndarray.h:1248
static Context CPU(int32_t dev_id=0)
runtime functions for NDArray
Definition: imperative.h:39
int aux_type(size_t i) const
Definition: ndarray.h:264
OnComplete Callback to the engine, called by AsyncFn when action completes.
Definition: engine.h:56
all the use_vars should go before scalar
Definition: ndarray.h:1171
NDArray AsArray(const TShape &shape, int dtype) const
Create a NDArray that shares memory with current one The new array must have smaller memory size than...
Definition: ndarray.h:507
void CheckAndAlloc(const std::vector< TShape > &aux_shapes) const
Definition: ndarray.h:609
unsigned num_scalars
number of scalars used by this function
Definition: ndarray.h:1193
const TBlob & data() const
Definition: ndarray.h:225
void CheckAndAllocAuxData(size_t i, const TShape &aux_shape) const
Definition: ndarray.h:619
NDArray(const NDArrayStorageType stype, const TShape &shape, const TBlob &data, const std::vector< TBlob > &aux_data, int dev_id)
constructing a static NDArray of non-default storage that shares data with TBlob Use with caution: al...
Definition: ndarray.h:135
void CheckAndAlloc() const
Allocate the space if it is delayed allocated. This is an internal function used by system that norma...
Definition: ndarray.h:584
mshadow::index_t index_t
index type usually use unsigned
Definition: base.h:124
size_t size
Size of the storage.
Definition: storage.h:49
TBlob aux_data(size_t i) const
Definition: ndarray.h:238
void SampleGenNegBinomial(real_t mu, real_t alpha, NDArray *out)
Sample generalized negative binomial distribution for each elements of out.
Context information about the execution environment.
Definition: base.h:133
void SamplePoisson(real_t lambda, NDArray *out)
Sample Poisson distribution for each elements of out.
const TShape & aux_shape(size_t index) const
get the shape of aux_data(index)
Definition: ndarray.h:189
ndarray interface
Definition: ndarray.h:82
NDArray(const TBlob &data, int dev_id)
constructing a static NDArray that shares data with TBlob Use with caution: allocate ONLY ONE NDArray...
Definition: ndarray.h:114
int dev_mask() const
device mask of the corresponding device
Definition: tensor_blob.h:209
Symbol Reshape(const std::string &symbol_name, Symbol data, Shape shape=Shape(), bool reverse=false, Shape target_shape=Shape(), bool keep_highest=false)
Definition: op.h:302
void ElementwiseSum(const std::vector< NDArray > &source, NDArray *out, int priority=0)
Perform elementwise sum over each data from source, store result into out.
std::function< void(NDArray **used_vars, real_t *scalars, NDArray **mutate_vars, int num_params, char **param_keys, char **param_vals)> NDArrayAPIFunction
definition of NDArray function
Definition: ndarray.h:1167
void SampleNegBinomial(int32_t k, real_t p, NDArray *out)
Sample negative binomial distribution for each elements of out.
NDArrayFunctionReg & set_function(void(*fgeneric)(NDArray **used_vars, real_t *s, NDArray **mutate_vars, const std::map< std::string, std::string > ¶m))
set the function body to a unary NDArray function this will also auto set the parameters correctly ...
Definition: ndarray.h:1303
bool IsSame(const NDArray &other) const
Definition: ndarray.h:159
int shared_pid
Id for IPC shared memory.
Definition: storage.h:57
tensor blob class that can be used to hold tensor of any dimension, any device and any data type...
Definition: tensor_blob.h:66
const std::vector< int > & aux_types() const
Definition: ndarray.h:203
void SampleGamma(real_t alpha, real_t beta, NDArray *out)
Sample gamma distribution for each elements of out.
NDArray(const TShape &shape, Context ctx, bool delay_alloc=false, int dtype=mshadow::default_type_flag)
constructs a new dynamic NDArray
Definition: ndarray.h:94
NDArray operator/(const NDArray &lhs, const NDArray &rhs)
elementwise division
NDArrayFunctionTypeMask
mask information on how functions can be exposed
Definition: ndarray.h:1169