@@ -2186,7 +2186,15 @@ static void add_lru_matched_graph_node_properties(
21862186 std::copy_n (node->nb , GGML_MAX_DIMS, prop.nb );
21872187
21882188 for (int src = 0 ; src < GGML_MAX_SRC; ++src) {
2189- prop.src_address [src] = node->src [src] ? node->src [src]->data : nullptr ;
2189+ if (node->src [src]) {
2190+ prop.src_address [src] = node->src [src]->data ;
2191+ std::copy_n (node->src [src]->ne , GGML_MAX_DIMS, prop.src_ne [src]);
2192+ std::copy_n (node->src [src]->nb , GGML_MAX_DIMS, prop.src_nb [src]);
2193+ } else {
2194+ prop.src_address [src] = nullptr ;
2195+ std::fill_n (prop.src_ne [src], GGML_MAX_DIMS, 0 );
2196+ std::fill_n (prop.src_nb [src], GGML_MAX_DIMS, 0 );
2197+ }
21902198 }
21912199
21922200 memcpy (prop.op_params , node->op_params , GGML_MAX_OP_PARAMS);
@@ -2206,14 +2214,18 @@ static void add_lru_matched_graph_node_properties(
22062214 * @param graph_node_properties The stored properties of a CANN graph node.
22072215 * @return true if all fields match (excluding GGML_OP_VIEW); false otherwise.
22082216 */
2209- static bool ggml_graph_node_has_matching_properties (ggml_tensor * node, ggml_graph_node_properties * graph_node_properties) {
2217+ static bool ggml_graph_node_has_matching_properties (
2218+ ggml_tensor * node,
2219+ ggml_graph_node_properties * graph_node_properties) {
22102220 if (node->data != graph_node_properties->node_address &&
2211- node->op != GGML_OP_VIEW) {
2221+ node->op != GGML_OP_VIEW) {
22122222 return false ;
22132223 }
2224+
22142225 if (node->op != graph_node_properties->node_op ) {
22152226 return false ;
22162227 }
2228+
22172229 for (int i = 0 ; i < GGML_MAX_DIMS; i++) {
22182230 if (node->ne [i] != graph_node_properties->ne [i]) {
22192231 return false ;
@@ -2222,14 +2234,29 @@ static bool ggml_graph_node_has_matching_properties(ggml_tensor * node, ggml_gra
22222234 return false ;
22232235 }
22242236 }
2237+
22252238 for (int i = 0 ; i < GGML_MAX_SRC; i++) {
2226- if (node->src [i] &&
2227- node->src [i]->data != graph_node_properties->src_address [i] &&
2228- node->op != GGML_OP_VIEW
2229- ) {
2230- return false ;
2239+ if (node->src [i]) {
2240+ if (node->src [i]->data != graph_node_properties->src_address [i] &&
2241+ node->op != GGML_OP_VIEW) {
2242+ return false ;
2243+ }
2244+
2245+ for (int d = 0 ; d < GGML_MAX_DIMS; d++) {
2246+ if (node->src [i]->ne [d] != graph_node_properties->src_ne [i][d]) {
2247+ return false ;
2248+ }
2249+ if (node->src [i]->nb [d] != graph_node_properties->src_nb [i][d]) {
2250+ return false ;
2251+ }
2252+ }
2253+ } else {
2254+ if (graph_node_properties->src_address [i] != nullptr ) {
2255+ return false ;
2256+ }
22312257 }
22322258 }
2259+
22332260 if (node->op == GGML_OP_SCALE &&
22342261 memcmp (graph_node_properties->op_params , node->op_params , GGML_MAX_OP_PARAMS) != 0 ) {
22352262 return false ;
0 commit comments