@@ -29,12 +29,13 @@ public Tensor[] ComputeGradient(long[] target_tensor_ids,
2929 tensor_tape_ ,
3030 state . op_tape ) ;
3131
32- while ( op_stack . Count > 0 )
32+ while ( ! op_stack . empty ( ) )
3333 {
3434 var op = op_stack . Dequeue ( ) ;
3535 if ( ! state . op_tape . find ( op , out var trace ) )
3636 continue ;
3737
38+ Console . WriteLine ( $ "ComputeGradient: { state . op_tape [ op ] . op_type } ") ;
3839 state . op_tape . erase ( op ) ;
3940
4041 var out_gradients = new List < Tensor > ( trace . output_tensor_info . Length ) ;
@@ -103,7 +104,7 @@ public Tensor[] ComputeGradient(long[] target_tensor_ids,
103104 }
104105 else
105106 {
106- throw new NotImplementedException ( "" ) ;
107+ in_gradients = new Tensor [ trace . input_tensor_id . Length ] ;
107108 }
108109
109110 for ( int i = 0 ; i < in_gradients . Length ; ++ i )
@@ -113,17 +114,18 @@ public Tensor[] ComputeGradient(long[] target_tensor_ids,
113114 {
114115 var unaggregated_grads = gradients [ id ] ;
115116 unaggregated_grads . Add ( in_gradients [ i ] ) ;
116- if ( unaggregated_grads . Count > kMinAggregateCount )
117+ if ( unaggregated_grads . Count > kMinAggregateCount )
117118 {
118- if ( ! gradients_size . ContainsKey ( id ) )
119+ if ( ! gradients_size . find ( id , out var size ) )
119120 {
121+ size = ( long ) unaggregated_grads [ 0 ] . size ;
122+ gradients_size . emplace ( id , size ) ;
120123 }
121- else
122- {
123124
125+ if ( unaggregated_grads . Count * size * 4 > kMinAggregateBytes )
126+ {
127+ throw new NotImplementedException ( "" ) ;
124128 }
125-
126- throw new NotImplementedException ( "" ) ;
127129 }
128130 }
129131
0 commit comments