@@ -1322,6 +1322,7 @@ status_t jit_avx512_common_conv_fwd_kernel::init_conf(
13221322 if (jcp.l_pad > 0 && r_pad > 0 )
13231323 n_oi--;
13241324
1325+ // Heuristic to optimize code size on KNX
13251326 bool large_code_size = jcp.ur_w != jcp.ow && jcp.l_pad > 0 && r_pad > 0
13261327 && ((jcp.l_pad <= 0 && n_oi > 0 ) || (jcp.l_pad > 0 && n_oi > 1 ));
13271328 if (large_code_size) {
@@ -1597,6 +1598,18 @@ status_t jit_avx512_common_conv_fwd_kernel::init_conf(
15971598 }
15981599 }
15991600
1601+ // A rough check on code size
1602+ // TODO: come up with a tighter bound
1603+ {
1604+ const int max_code_size = 256 * 1024 ; // default size of jit generator
1605+ int mult = 1 + (jcp.l_pad > 0 ) + (r_pad > 0 );
1606+ const float max_instruction_size = 15 ;
1607+ float ur_fac
1608+ = (float )jcp.kw * jcp.ic_block * jcp.nb_oc_blocking * jcp.ur_w ;
1609+ float code_size = mult * ur_fac * max_instruction_size;
1610+ if (code_size > max_code_size) return status::unimplemented;
1611+ }
1612+
16001613 return status::success;
16011614}
16021615
@@ -2368,6 +2381,7 @@ status_t jit_avx512_common_conv_bwd_data_kernel_f32::init_conf(
23682381
23692382 jcp.loop_order = loop_gnc;
23702383
2384+ // Heuristic to optimize code size on KNX
23712385 bool large_code_size = (jcp.ur_w != jcp.ow )
23722386 && ((l_overflow <= 0 && n_oi > 0 ) ||(l_overflow > 0 && n_oi > 1 ))
23732387 && (r_overflow1 > 0 ) && (l_overflow > 0 );
@@ -2469,6 +2483,18 @@ status_t jit_avx512_common_conv_bwd_data_kernel_f32::init_conf(
24692483 && jcp.oc <= weights_d.padded_dims ()[with_groups + 0 ];
24702484 if (!args_ok) return status::unimplemented;
24712485
2486+ // A rough check on code size
2487+ // TODO: come up with a tighter bound
2488+ {
2489+ const int max_code_size = 256 * 1024 ; // default size of jit generator
2490+ int mult = 1 + (l_overflow > 0 ) + (r_overflow1 > 0 );
2491+ const float max_instruction_size = 15 ;
2492+ float ur_fac
2493+ = (float )jcp.kw * jcp.oc_block * jcp.nb_ic_blocking * jcp.ur_w ;
2494+ float code_size = mult * ur_fac * max_instruction_size;
2495+ if (code_size > max_code_size) return status::unimplemented;
2496+ }
2497+
24722498 return status::success;
24732499}
24742500
0 commit comments