@@ -56,19 +56,42 @@ inline void* getOpApiFuncAddr(const char* apiName) {
56
56
return getOpApiFuncAddrInLib (opApiHandler, kOpApiLibName , apiName);
57
57
}
58
58
59
+ inline aclFormat storageFormatByDimNum (int64_t dimNum) {
60
+ aclFormat format = ACL_FORMAT_ND;
61
+ switch (dimNum) {
62
+ case 3 :
63
+ format = ACL_FORMAT_NCL;
64
+ break ;
65
+ case 4 :
66
+ format = ACL_FORMAT_NCHW;
67
+ break ;
68
+ case 5 :
69
+ format = ACL_FORMAT_NCDHW;
70
+ break ;
71
+ default :
72
+ format = ACL_FORMAT_ND;
73
+ }
74
+ return format;
75
+ }
76
+
59
77
inline aclTensor* createAclTensorFromAscendTensor (const AscendTensor& input) {
60
78
const auto & shape = input.shape ();
61
79
const auto & stride = input.stride ();
62
80
const auto storageSize = static_cast <int64_t >(input.storageNbytes () / input.elemsize ());
81
+
82
+ void * storagePtr = nullptr ;
83
+ diopiGetTensorStoragePtr (input.tensorHandle (), &storagePtr);
84
+ auto format = storageFormatByDimNum (input.dim ());
85
+
63
86
return ::aclCreateTensor (shape.data (),
64
87
shape.size (),
65
88
input.getAclDataType (),
66
89
stride.data (),
67
90
input.storageOffset (),
68
- input.getAclDataFormat (), // TODO(lljbash): op_plugin assume non-channel-last, why?
91
+ format, // input.getAclDataFormat(), // TODO(lljbash): op_plugin assume non-channel-last, why?
69
92
&storageSize,
70
93
/* storageDimsNum=*/ 1 ,
71
- const_cast <void *>(input. data () ));
94
+ const_cast <void *>(storagePtr ));
72
95
}
73
96
74
97
inline aclTensor* createAclTensorFromDiopiTensor (diopiConstTensorHandle_t tensor) {
@@ -90,20 +113,15 @@ inline aclTensor* createAclTensorFromDiopiTensor(diopiConstTensorHandle_t tensor
90
113
diopiGetTensorStorageOffset (tensor, &storageOffset);
91
114
std::size_t storageNbytes{};
92
115
diopiGetTensorStorageNbytes (tensor, &storageNbytes);
93
- const void * tensorData = nullptr ;
94
- diopiGetTensorDataConst (tensor, &tensorData);
116
+
117
+ void * storagePtr = nullptr ;
118
+ diopiGetTensorStoragePtr (tensor, &storagePtr);
119
+
95
120
auto type = diopiDtypeToAclDataType (dtype);
96
- auto format = inferAclDataFormat (shape.len , shape. data , stride. data );
121
+ auto format = storageFormatByDimNum (shape.len );
97
122
auto storageSize = static_cast <int64_t >(storageNbytes / elemsize);
98
- return ::aclCreateTensor (shape.data ,
99
- shape.len ,
100
- type,
101
- stride.data ,
102
- storageOffset,
103
- format,
104
- &storageSize,
105
- /* storageDimsNum=*/ 1 ,
106
- const_cast <void *>(tensorData));
123
+
124
+ return ::aclCreateTensor (shape.data , shape.len , type, stride.data , storageOffset, format, &storageSize, 1 , const_cast <void *>(storagePtr));
107
125
}
108
126
109
127
inline aclScalar* createAclScalarFromDiopiScalar (const diopiScalar_t* scalar) {
0 commit comments