user: 请从给定的汇编指令推导出C源代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %edi,-0x84(%rbp)
  mov    %rsi,-0x90(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D168(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D123(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D168(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D53(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D84(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  cmpl   $0x6,-0x84(%rbp)
  je     L154
  lea    D173(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D199(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0xffffffff,%edi
  call   <exit@plt>
L154:
  mov    -0x90(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x64(%rbp)
  cmpl   $0x1,-0x64(%rbp)
  je     L396
  cmpl   $0x2,-0x64(%rbp)
  je     L396
  cmpl   $0x4,-0x64(%rbp)
  je     L396
  cmpl   $0x8,-0x64(%rbp)
  je     L396
  cmpl   $0x10,-0x64(%rbp)
  je     L396
  lea    D59(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0xffffffff,%edi
  call   <exit@plt>
L396:
  mov    -0x90(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x60(%rbp)
  mov    -0x90(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x5c(%rbp)
  mov    -0x90(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x58(%rbp)
  mov    -0x90(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x54(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,%esi
  lea    D110(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x5c(%rbp),%edx
  mov    -0x60(%rbp),%eax
  mov    %eax,%esi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x54(%rbp),%edx
  mov    -0x58(%rbp),%eax
  mov    %eax,%esi
  lea    D125(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x0,-0x60(%rbp)
  jle    L145
  cmpl   $0x0,-0x5c(%rbp)
  jle    L145
  cmpl   $0x0,-0x58(%rbp)
  jle    L145
  cmpl   $0x0,-0x54(%rbp)
  jg     L224
L145:
  lea    D112(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L224:
  mov    -0x5c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  je     L74
  lea    D78(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L74:
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x50(%rbp)
  movl   $0x0,-0x70(%rbp)
  jmp    L64
L240:
  mov    -0x5c(%rbp),%eax
  cltq
  shl    $0x2,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    -0x70(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x50(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rax,(%rdx)
  movl   $0x0,-0x6c(%rbp)
  jmp    L360
L415:
  mov    -0x70(%rbp),%edx
  mov    -0x6c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x6c(%rbp)
L360:
  mov    -0x6c(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L415
  addl   $0x1,-0x70(%rbp)
L64:
  mov    -0x70(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L240
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x48(%rbp)
  movl   $0x0,-0x70(%rbp)
  jmp    L73
L281:
  mov    -0x54(%rbp),%eax
  cltq
  shl    $0x2,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    -0x70(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x48(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rax,(%rdx)
  movl   $0x0,-0x6c(%rbp)
  jmp    L7
L89:
  mov    -0x70(%rbp),%edx
  mov    -0x6c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x6c(%rbp)
L7:
  mov    -0x6c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L89
  addl   $0x1,-0x70(%rbp)
L73:
  mov    -0x70(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jl     L281
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x40(%rbp)
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x38(%rbp)
  movl   $0x0,-0x70(%rbp)
  jmp    L332
L180:
  mov    -0x54(%rbp),%eax
  cltq
  shl    $0x2,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    -0x70(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x40(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rax,(%rdx)
  mov    -0x54(%rbp),%eax
  cltq
  shl    $0x2,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    -0x70(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x38(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rax,(%rdx)
  movl   $0x0,-0x6c(%rbp)
  jmp    L268
L382:
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x6c(%rbp)
L268:
  mov    -0x6c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L382
  addl   $0x1,-0x70(%rbp)
L332:
  mov    -0x70(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L180
  lea    -0x78(%rbp),%rdx
  lea    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <gettimeofday@plt>
  mov    -0x64(%rbp),%eax
  mov    %eax,%edi
  call   <omp_set_num_threads@plt>
  movl   $0x0,-0x70(%rbp)
  jmp    L264
L258:
  movl   $0x0,-0x6c(%rbp)
  jmp    L126
L353:
  movl   $0x0,-0x68(%rbp)
  jmp    L188
L69:
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x68(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x68(%rbp)
L188:
  mov    -0x68(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L69
  addl   $0x1,-0x6c(%rbp)
L126:
  mov    -0x6c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L353
  addl   $0x1,-0x70(%rbp)
L264:
  mov    -0x70(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L258
  lea    -0x74(%rbp),%rdx
  lea    -0x10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <gettimeofday@plt>
  mov    -0x18(%rbp),%eax
  imul   $0xf4240,%eax,%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  cltq
  mov    %rax,-0x30(%rbp)
  mov    -0x10(%rbp),%eax
  imul   $0xf4240,%eax,%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  cltq
  mov    %rax,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  sub    -0x30(%rbp),%rax
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  movsd  D131(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movl   $0x0,-0x70(%rbp)
  jmp    L373
L270:
  movl   $0x0,-0x6c(%rbp)
  jmp    L418
L203:
  movl   $0x0,-0x68(%rbp)
  jmp    L385
L355:
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x68(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x68(%rbp)
L385:
  mov    -0x68(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L355
  addl   $0x1,-0x6c(%rbp)
L418:
  mov    -0x6c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L203
  addl   $0x1,-0x70(%rbp)
L373:
  mov    -0x70(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L270
  movl   $0x0,-0x70(%rbp)
  jmp    L211
L383:
  movl   $0x0,-0x6c(%rbp)
  jmp    L191
L120:
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  ucomiss %xmm1,%xmm0
  jp     L152
  ucomiss %xmm1,%xmm0
  je     L410
L152:
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L119
L410:
  nop
L119:
  addl   $0x1,-0x6c(%rbp)
L191:
  mov    -0x6c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L120
  addl   $0x1,-0x70(%rbp)
L211:
  mov    -0x70(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L383
  lea    D179(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  lea    D89(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D84(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L113
  call   <__stack_chk_fail@plt>
L113:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D168
data_type: string
name: extract_symbolic_data
arguments: label: D123
data_type: string
name: extract_symbolic_data
arguments: label: D5
data_type: string
name: extract_symbolic_data
arguments: label: D53
data_type: string
name: extract_symbolic_data
arguments: label: D43
data_type: string
name: extract_symbolic_data
arguments: label: D84
data_type: string
name: extract_symbolic_data
arguments: label: D173
data_type: string
name: extract_symbolic_data
arguments: label: D199
data_type: string
name: extract_symbolic_data
arguments: label: D59
data_type: string
name: extract_symbolic_data
arguments: label: D110
data_type: string
name: extract_symbolic_data
arguments: label: D16
data_type: string
name: extract_symbolic_data
arguments: label: D125
data_type: string
name: extract_symbolic_data
arguments: label: D112
data_type: string
name: extract_symbolic_data
arguments: label: D78
data_type: string
name: extract_symbolic_data
arguments: label: D131
data_type: f64
name: extract_symbolic_data
arguments: label: D30
data_type: string
name: extract_symbolic_data
arguments: label: D179
data_type: string
name: extract_symbolic_data
arguments: label: D89
data_type: string
name: extract_symbolic_data
arguments: label: D3
data_type: string

tool: D168: 
		---------------------------------------------------------------------------

tool: D123: 
		 Email : RarchK

tool: D5: 
		 Objective : Dense Matrix Computations (Floating Point Operations)
 

tool: D53: 
		 Matrix into Matrix Multiplication using 

tool: D43: 
		 OpenMP one PARALLEL for directive and Private Clause;

tool: D84: 
		..........................................................................

tool: D173: 		 Very Few Arguments
 

tool: D199: 		 Syntax : exec <Threads> <NoOfRows A> <NoOfCols A>  <NoOfRows B> <NoOfCols B>

tool: D59: 
 Number of threads should be 1,2,4,8 or 16 for the execution of program. 


tool: D110: 
		 Threads        : %d 

tool: D16: 
		 Matrix A Size  : %d X %d 

tool: D125: 
		 Matrix B Size  : %d X %d 

tool: D112: 
		 The NoofRows And NoofCols Should Be Of Positive Sign

tool: D78: 
		 Matrix Matrix Computation Is Not Possible 

tool: D131: 1000000

tool: D30: 
		 There Is A Difference In Parallel Calculation 

tool: D179: 

		 Matrix into Matrix Multiplication using Parallel for directive......Done 

tool: D89: 
		 Time in Seconds (T)        : %lf Seconds 


tool: D3: 
		   ( T represents the Time taken for computation )

assistant: ```c
main(int argc, char **argv) {
  int NoofRows_A, NoofCols_A, NoofRows_B, NoofCols_B, i, j, k, Noofthreads;
  float **Matrix_A, **Matrix_B, **Result, **Checkoutput, flops;
  struct timeval TimeValue_Start;
  struct timezone TimeZone_Start;
  struct timeval TimeValue_Final;
  struct timezone TimeZone_Final;
  long time_start, time_end;
  double time_overhead;
  printf("\n\t\t---------------------------------------------------------------------------");
  printf("\n\t\t Email : RarchK");
  printf("\n\t\t---------------------------------------------------------------------------");
  printf("\n\t\t Objective : Dense Matrix Computations (Floating Point Operations)\n ");
  printf("\n\t\t Matrix into Matrix Multiplication using ");
  printf("\n\t\t OpenMP one PARALLEL for directive and Private Clause;");
  printf("\n\t\t..........................................................................\n");
  if (argc != 6) {
    printf("\t\t Very Few Arguments\n ");
    printf("\t\t Syntax : exec <Threads> <NoOfRows A> <NoOfCols A>  <NoOfRows B> <NoOfCols B>\n");
    exit(-1);
  }
  Noofthreads = atoi(argv[1]);
  if ((Noofthreads != 1) && (Noofthreads != 2) && (Noofthreads != 4) && (Noofthreads != 8) && (Noofthreads != 16)) {
    printf("\n Number of threads should be 1,2,4,8 or 16 for the execution of program. \n\n");
    exit(-1);
  }
  NoofRows_A = atoi(argv[2]);
  NoofCols_A = atoi(argv[3]);
  NoofRows_B = atoi(argv[4]);
  NoofCols_B = atoi(argv[5]);
  printf("\n\t\t Threads        : %d ", Noofthreads);
  printf("\n\t\t Matrix A Size  : %d X %d ", NoofRows_A, NoofCols_A);
  printf("\n\t\t Matrix B Size  : %d X %d ", NoofRows_B, NoofCols_B);
  if (NoofRows_A <= 0 || NoofCols_A <= 0 || NoofRows_B <= 0 || NoofCols_B <= 0) {
    printf("\n\t\t The NoofRows And NoofCols Should Be Of Positive Sign\n");
    exit(1);
  }
  if (NoofCols_A != NoofRows_B) {
    printf("\n\t\t Matrix Matrix Computation Is Not Possible \n");
    exit(1);
  }
  Matrix_A = (float **)malloc(sizeof(float *) * NoofRows_A);
  for (i = 0; i < NoofRows_A; i++) {
    Matrix_A[i] = (float *)malloc(sizeof(float) * NoofCols_A);
    for (j = 0; j < NoofCols_A; j++)
      Matrix_A[i][j] = i + j;
  }
  Matrix_B = (float **)malloc(sizeof(float *) * NoofRows_B);
  for (i = 0; i < NoofRows_B; i++) {
    Matrix_B[i] = (float *)malloc(sizeof(float) * NoofCols_B);
    for (j = 0; j < NoofCols_B; j++)
      Matrix_B[i][j] = i + j;
  }
  Result = (float **)malloc(sizeof(float *) * NoofRows_A);
  Checkoutput = (float **)malloc(sizeof(float *) * NoofRows_A);
  for (i = 0; i < NoofRows_A; i++) {
    Result[i] = (float *)malloc(sizeof(float) * NoofCols_B);
    Checkoutput[i] = (float *)malloc(sizeof(float) * NoofCols_B);
    for (j = 0; j < NoofCols_B; j++) {
      Result[i][j] = 0.0;
      Checkoutput[i][j] = 0.0;
    }
  }
  gettimeofday(&TimeValue_Start, &TimeZone_Start);
  omp_set_num_threads(Noofthreads);
#pragma omp parallel for private(j, k)
  for (i = 0; i < NoofRows_A; i = i + 1)
    for (j = 0; j < NoofCols_B; j = j + 1)
      for (k = 0; k < NoofCols_A; k = k + 1)
        Result[i][j] = Result[i][j] + Matrix_A[i][k] * Matrix_B[k][j];
  gettimeofday(&TimeValue_Final, &TimeZone_Final);
  time_start = TimeValue_Start.tv_sec * 1000000 + TimeValue_Start.tv_usec;
  time_end = TimeValue_Final.tv_sec * 1000000 + TimeValue_Final.tv_usec;
  time_overhead = (time_end - time_start) / 1000000.0;
  for (i = 0; i < NoofRows_A; i = i + 1)
    for (j = 0; j < NoofCols_B; j = j + 1)
      for (k = 0; k < NoofCols_A; k = k + 1)
        Checkoutput[i][j] = Checkoutput[i][j] + Matrix_A[i][k] * Matrix_B[k][j];
  for (i = 0; i < NoofRows_A; i = i + 1)
    for (j = 0; j < NoofCols_B; j = j + 1)
      if (Checkoutput[i][j] == Result[i][j])
        continue;
      else {
        printf("\n\t\t There Is A Difference In Parallel Calculation \n");
        exit(1);
      }
  printf("\n\n\t\t Matrix into Matrix Multiplication using Parallel for directive......Done \n");
  printf("\n\t\t Time in Seconds (T)        : %lf Seconds \n", time_overhead);
  printf("\n\t\t   ( T represents the Time taken for computation )");
  printf("\n\t\t..........................................................................\n");
  free(Matrix_A);
  free(Matrix_B);
  free(Result);
  free(Checkoutput);
}
```