Compared two similar Bert models running on CPU with TVM, one is PyTorch model, 
the other is MXNet model. Due to the large performance difference, I did some 
profiling. The result shows the run time of the same operation(matmul) with 
same workload varies big.

ENV:

1. TVM: build with MKL.
2. Intel CPU
3. OpenMP:  `KMP_AFFINITY=compact,1,0 OMP_NUM_THREADS=24`

Model inference time:
 
    # mxnet model
    TVM Mean inference time: 5.53 ms
    # pytorch model
    TVM Mean inference time: 23.05 ms

Profiling result:

    # MXNet model
    Node Name                           Ops.                Time(us)   Time(%)  
Shape.  Inputs  Outputs
    --------- 
    fused_nn_dense_add_15        fused_nn_dense_add_1       308.926   5.58     
(32, 768)      3       1
    fused_nn_dense_add_11         fused_nn_dense_add_1       307.277   5.551    
(32, 768)        3       1

    # PyTorch Model
    Node Name                           Ops.                Time(us)   Time(%)  
Shape.  Inputs  Outputs
    --------- 
    fused_nn_dense_add_3        fused_nn_dense_add_3       1783.75    7.631    
(32, 768)     3       1
    fused_nn_dense_add_31      fused_nn_dense_add_3        1593.08    6.815    
(32, 768)    3       1

IR code (same between PyTorch model and MXNet model)

      attr [0] "compute_scope" = "fused_nn_dense_add_3_compute_";
      attr [C: handle] "storage_scope" = "global";
      allocate(C, float32, [24576]) {
        attr [0] "extern_scope" = 0;
        @tir.tvm_call_packed("tvm.contrib.cblas.matmul", 
@tir.tvm_stack_make_array(placeholder, @tir.tvm_stack_make_shape(32, 3072, 
dtype=handle), 0, 2, 0f32, 0, dtype=handle), 
@tir.tvm_stack_make_array(placeholder_1, @tir.tvm_stack_make_shape(768, 3072, 
dtype=handle), 0, 2, 0f32, 0, dtype=handle), @tir.tvm_stack_make_array(C, 
@tir.tvm_stack_make_shape(32, 768, dtype=handle), 0, 2, 0f32, 0, dtype=handle), 
False, True, dtype=int32)
        for (ax0: int32, 0, 32) "parallel" {
          for (ax1: int32, 0, 768) {
            T_add[((ax0*768) + ax1)] = ((float32*)C[((ax0*768) + ax1)] + 
(float32*)placeholder_2[ax1])
          }
        }

However, when setting  `OMP_NUM_THREADS=1`  the model inference time is same, 
seems it's a problem with multiple threads.

What may cause the difference?

Refer to: https://github.com/apache/incubator-tvm/issues/6354





---
[Visit 
Topic](https://discuss.tvm.ai/t/performance-of-same-op-and-workload-in-different-model-varies-differently/7766/1)
 to respond.

You are receiving this because you enabled mailing list mode.

To unsubscribe from these emails, [click 
here](https://discuss.tvm.ai/email/unsubscribe/1f49529833bf95b6136dfa3765c338c333e41f2eab8e1d07c23236576a59fb62).

Reply via email to