Skip to content

Commit 9620519

Browse files
author
DvirDukhan
committed
tensor len member
1 parent aab7c36 commit 9620519

File tree

7 files changed

+33
-23
lines changed

7 files changed

+33
-23
lines changed

src/backends/onnxruntime.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ RAI_Tensor *RAI_TensorCreateFromOrtValue(OrtValue *v, size_t batch_offset, long
174174
return NULL;
175175
}
176176

177-
ret = RedisModule_Calloc(1, sizeof(*ret));
177+
ret = RAI_TensorNew();
178178

179179
DLContext ctx = (DLContext){.device_type = kDLCPU, .device_id = 0};
180180

@@ -261,7 +261,6 @@ RAI_Tensor *RAI_TensorCreateFromOrtValue(OrtValue *v, size_t batch_offset, long
261261
.manager_ctx = NULL,
262262
.deleter = NULL};
263263

264-
ret->refCount = 1;
265264
return ret;
266265
}
267266

src/backends/tensorflow.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ DLDataType RAI_GetDLDataTypeFromTF(TF_DataType dtype) {
8888

8989
RAI_Tensor *RAI_TensorCreateFromTFTensor(TF_Tensor *tensor, size_t batch_offset,
9090
long long batch_size) {
91-
RAI_Tensor *ret = RedisModule_Calloc(1, sizeof(*ret));
91+
RAI_Tensor *ret = RAI_TensorNew();
9292

9393
DLContext ctx = (DLContext){.device_type = kDLCPU, .device_id = 0};
9494

@@ -143,7 +143,6 @@ RAI_Tensor *RAI_TensorCreateFromTFTensor(TF_Tensor *tensor, size_t batch_offset,
143143
.manager_ctx = NULL,
144144
.deleter = NULL};
145145

146-
ret->refCount = 1;
147146
return ret;
148147
}
149148

src/serialization/RDB/decoder/current/v1/decode_v1.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ void *RAI_RDBLoadTensor_v1(RedisModuleIO *io) {
4848
if (RedisModule_IsIOError(io))
4949
goto cleanup;
5050

51-
RAI_Tensor *ret = RedisModule_Calloc(1, sizeof(*ret));
51+
RAI_Tensor *ret = RAI_TensorNew();
5252
ret->tensor = (DLManagedTensor){.dl_tensor = (DLTensor){.ctx = ctx,
5353
.data = data,
5454
.ndim = ndims,
@@ -58,7 +58,6 @@ void *RAI_RDBLoadTensor_v1(RedisModuleIO *io) {
5858
.byte_offset = byte_offset},
5959
.manager_ctx = NULL,
6060
.deleter = NULL};
61-
ret->refCount = 1;
6261
return ret;
6362

6463
cleanup:

src/serialization/RDB/decoder/previous/v0/decode_v0.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void *RAI_RDBLoadTensor_v0(RedisModuleIO *io) {
4141
if (RedisModule_IsIOError(io))
4242
goto cleanup;
4343

44-
RAI_Tensor *ret = RedisModule_Calloc(1, sizeof(*ret));
44+
RAI_Tensor *ret = RAI_TensorNew();
4545
ret->tensor = (DLManagedTensor){.dl_tensor = (DLTensor){.ctx = ctx,
4646
.data = data,
4747
.ndim = ndims,
@@ -51,7 +51,6 @@ void *RAI_RDBLoadTensor_v0(RedisModuleIO *io) {
5151
.byte_offset = byte_offset},
5252
.manager_ctx = NULL,
5353
.deleter = NULL};
54-
ret->refCount = 1;
5554
return ret;
5655

5756
cleanup:

src/tensor.c

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,20 @@ int Tensor_DataTypeStr(DLDataType dtype, char *dtypestr) {
9494
return result;
9595
}
9696

97+
RAI_Tensor *RAI_TensorNew(void) {
98+
RAI_Tensor *ret = RedisModule_Calloc(1, sizeof(*ret));
99+
ret->refCount = 1;
100+
ret->len = LEN_UNKOWN;
101+
}
102+
97103
RAI_Tensor *RAI_TensorCreateWithDLDataType(DLDataType dtype, long long *dims, int ndims,
98104
int tensorAllocMode) {
99105
const size_t dtypeSize = Tensor_DataTypeSize(dtype);
100106
if (dtypeSize == 0) {
101107
return NULL;
102108
}
103109

104-
RAI_Tensor *ret = RedisModule_Alloc(sizeof(*ret));
110+
RAI_Tensor *ret = RAI_TensorNew();
105111
int64_t *shape = RedisModule_Alloc(ndims * sizeof(*shape));
106112
int64_t *strides = RedisModule_Alloc(ndims * sizeof(*strides));
107113

@@ -147,7 +153,6 @@ RAI_Tensor *RAI_TensorCreateWithDLDataType(DLDataType dtype, long long *dims, in
147153
.manager_ctx = NULL,
148154
.deleter = NULL};
149155

150-
ret->refCount = 1;
151156
return ret;
152157
}
153158

@@ -173,7 +178,7 @@ RAI_Tensor *RAI_TensorCreateWithDLDataTypeAndRString(DLDataType dtype, long long
173178
return NULL;
174179
}
175180

176-
RAI_Tensor *ret = RedisModule_Alloc(sizeof(*ret));
181+
RAI_Tensor *ret = RAI_TensorNew();
177182
int64_t *shape = RedisModule_Alloc(ndims * sizeof(*shape));
178183
int64_t *strides = RedisModule_Alloc(ndims * sizeof(*strides));
179184

@@ -201,7 +206,6 @@ RAI_Tensor *RAI_TensorCreateWithDLDataTypeAndRString(DLDataType dtype, long long
201206
.manager_ctx = rstr,
202207
.deleter = RAI_RStringDataTensorDeleter};
203208

204-
ret->refCount = 1;
205209
return ret;
206210
}
207211

@@ -330,7 +334,7 @@ int RAI_TensorDeepCopy(RAI_Tensor *t, RAI_Tensor **dest) {
330334
// Beware: this will take ownership of dltensor
331335
RAI_Tensor *RAI_TensorCreateFromDLTensor(DLManagedTensor *dl_tensor) {
332336

333-
RAI_Tensor *ret = RedisModule_Calloc(1, sizeof(*ret));
337+
RAI_Tensor *ret = RAI_TensorNew();
334338

335339
ret->tensor =
336340
(DLManagedTensor){.dl_tensor = (DLTensor){.ctx = dl_tensor->dl_tensor.ctx,
@@ -343,7 +347,6 @@ RAI_Tensor *RAI_TensorCreateFromDLTensor(DLManagedTensor *dl_tensor) {
343347
.manager_ctx = dl_tensor->manager_ctx,
344348
.deleter = dl_tensor->deleter};
345349

346-
ret->refCount = 1;
347350
return ret;
348351
}
349352

@@ -356,12 +359,15 @@ int RAI_TensorIsDataTypeEqual(RAI_Tensor *t1, RAI_Tensor *t2) {
356359
}
357360

358361
size_t RAI_TensorLength(RAI_Tensor *t) {
359-
int64_t *shape = t->tensor.dl_tensor.shape;
360-
size_t len = 1;
361-
for (size_t i = 0; i < t->tensor.dl_tensor.ndim; ++i) {
362-
len *= shape[i];
362+
if (t->len == LEN_UNKOWN) {
363+
int64_t *shape = t->tensor.dl_tensor.shape;
364+
size_t len = 1;
365+
for (size_t i = 0; i < t->tensor.dl_tensor.ndim; ++i) {
366+
len *= shape[i];
367+
}
368+
t->len = len;
363369
}
364-
return len;
370+
return t->len;
365371
}
366372

367373
size_t RAI_TensorDataSize(RAI_Tensor *t) { return Tensor_DataTypeSize(RAI_TensorDataType(t)); }

src/tensor.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ extern RedisModuleType *RedisAI_TensorType;
4949
*/
5050
int RAI_TensorInit(RedisModuleCtx *ctx);
5151

52+
/**
53+
* @brief Allocate an empty tensor with no data.
54+
* @note The new tensor ref coutn is 1.
55+
*
56+
* @return RAI_Tensor* - a pointer to the new tensor.
57+
*/
58+
RAI_Tensor *RAI_TensorNew(void);
59+
5260
/**
5361
* Allocate the memory and initialise the RAI_Tensor. Creates a tensor based on
5462
* the passed 'dataType` string and with the specified number of dimensions

src/tensor_struct.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
#ifndef SRC_TENSOR_STRUCT_H_
2-
#define SRC_TENSOR_STRUCT_H_
1+
#pragma once
32

43
#include "config.h"
54
#include "dlpack/dlpack.h"
5+
#include "limits.h"
66

7+
#define LEN_UNKOWN ULONG_MAX
78
typedef struct RAI_Tensor {
89
DLManagedTensor tensor;
10+
size_t len;
911
long long refCount;
1012
} RAI_Tensor;
11-
12-
#endif /* SRC_TENSOR_STRUCT_H_ */

0 commit comments

Comments
 (0)