Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4.  
  5. typedef struct matrix_arg{
  6. int** a;
  7. int** b;
  8. long int** c;
  9. }matrix_arg;
  10. /*
  11. void multi(matrix_arg* matrix_data,int start,int end){
  12. int i,j,k;
  13. long int temp = 0;
  14.  
  15. printf("multi start\n");
  16.  
  17. for(i = start; i<end;i++){
  18. for(j = 0; j< 4000;j++){
  19. for(k=0;k<4000;k++){
  20. temp += matrix_data->a[i][k] * matrix_data->b[k][j];
  21. }
  22. matrix_data->c[i][j] = temp;
  23. temp = 0;
  24. }
  25. printf("%dth done\n",i);
  26. }
  27. }
  28. */
  29. void *first(void* arg){
  30. matrix_arg* matrix_data = (matrix_arg*) arg;
  31. int i,j,k;
  32. long int temp = 0;
  33.  
  34. printf("th1 start\n");
  35. /*
  36. multi(matrix_data, 0,2000);
  37. */
  38.  
  39. for(i = 0;i<2000;i++){
  40. for(j=0;j<4000;j++){
  41. for(k = 0;k<4000;k++){
  42. temp += matrix_data->a[i][k] * matrix_data->b[k][j];
  43. }
  44. matrix_data->c[i][j] = temp;
  45. temp = 0;
  46. }
  47. printf("%d done\n",i);
  48. }
  49.  
  50. }
  51.  
  52. void *second(void* arg){
  53. matrix_arg* matrix_data = (matrix_arg*) arg;
  54. int i,j,k;
  55. long int temp = 0;
  56.  
  57. printf("th2 start\n");
  58. /*
  59. multi(matrix_data,2000,4000);
  60. */
  61. for(i = 2000;i<4000;i++){
  62. for(j=0;j<4000;j++){
  63. for(k = 0;k<4000;k++){
  64. temp += matrix_data->a[i][k] * matrix_data->b[k][j];
  65. }
  66. matrix_data->c[i][j] = temp;
  67. temp = 0;
  68. }
  69. printf("%d done\n",i);
  70. }
  71. }
  72.  
  73. int main(int argc, char* argv[]){
  74. pthread_t th1,th2;
  75. matrix_arg matrix_data;
  76. int i,j;
  77. FILE* fp1;
  78. FILE* fp2;
  79.  
  80. fp1 = fopen("matrix1.txt","r");
  81. fp2 = fopen("matrix2.txt","r");
  82.  
  83. matrix_data.a = (int**)malloc(sizeof(int*)*4000);
  84. matrix_data.b = (int**)malloc(sizeof(int*)*4000);
  85. matrix_data.c = (long int**)malloc(sizeof(long int*)*4000);
  86.  
  87. for(i = 0;i<4000;i++){
  88. matrix_data.a[i] = (int*)malloc(sizeof(int) *4000);
  89. matrix_data.b[i] = (int*)malloc(sizeof(int) *4000);
  90. matrix_data.c[i] = (long int*)malloc(sizeof(long int) *4000);
  91. }
  92.  
  93. printf("input start\n");
  94.  
  95. for(i = 0;i<4000;i++){
  96. for(j = 0;j<4000;j++){
  97. fscanf(fp1,"%d",&matrix_data.a[i][j]);
  98. fscanf(fp2,"%d",&matrix_data.b[i][j]);
  99. }
  100. }
  101.  
  102. int tid1,tid2;
  103. int res1,res2;
  104.  
  105. tid1 = pthread_create(&th1, NULL, first, (void *)&matrix_data);
  106. tid2 = pthread_create(&th2, NULL, second,(void *)&matrix_data);
  107. pthread_join(th1, (void **)&res1);
  108. pthread_join(th2, (void **)&res2);
  109.  
  110. long long int temp = 0;
  111.  
  112. for(i=0;i<4000;i++){
  113. for(j=0;j<4000;j++){
  114. temp += matrix_data.c[i][j];
  115. }
  116. }
  117. printf("%lld",temp);
  118.  
  119. return 0;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement