Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <complex.h>
  4. #include <pthread.h>
  5. #include <math.h>
  6.  
  7. int P;
  8. int numbers;
  9. double *inputNumbers;
  10. double complex *outputNumbers;
  11.  
  12. void* threadFunction(void* arg){
  13. int thread_id = *(int*)arg;
  14. int start = thread_id * (numbers / P);
  15. int end = (thread_id + 1) * (numbers /P);
  16. if(end > numbers){
  17. end = numbers;
  18. }
  19.  
  20. double complex sum;
  21. double complex power;
  22.  
  23. for(int k = start; k < end; k++){
  24. sum = 0;
  25. for(int i = 0; i < numbers; i++){
  26. power = 0;
  27. power = (((- 2) * M_PI * I) / numbers) * k * i;
  28. sum = sum + inputNumbers[i] * cexp(power);
  29. }
  30. outputNumbers[k] = sum;
  31. }
  32. }
  33.  
  34. int main(int argc, char * argv[]) {
  35.  
  36. //citire din fisier
  37. FILE *fp, *op;
  38. fp = fopen(argv[1], "r");
  39. op = fopen(argv[2], "w");
  40. P = atoi(argv[3]);
  41.  
  42. fscanf(fp, "%d", &numbers);
  43.  
  44. inputNumbers = calloc(numbers, sizeof(double));
  45. outputNumbers = calloc(numbers, sizeof(double complex));
  46.  
  47. int i = 0;
  48. while(!feof(fp)){
  49. fscanf(fp, "%lf", &(inputNumbers[i]));
  50. i++;
  51. }
  52.  
  53. fprintf(op, "%d\n", numbers);
  54.  
  55. //inceput paralelizare
  56. pthread_t tid[P];
  57. int thread_id[P];
  58. for(i = 0; i < P; i++){
  59. thread_id[i] = i;
  60. }
  61. for(i = 0; i < P; i++){
  62. pthread_create(&(tid[i]), NULL, threadFunction, &(thread_id[i]));
  63. }
  64. for(i = 0; i < P; i++){
  65. pthread_join(tid[i], NULL);
  66. }
  67.  
  68. //scriere in fisier
  69. for(int k = 0; k < numbers; k ++){
  70. fprintf(op, "%f ", creal(outputNumbers[k]));
  71. fprintf(op, "%f\n", cimag(outputNumbers[k]));
  72. }
  73.  
  74. free(inputNumbers);
  75. free(outputNumbers);
  76.  
  77. fclose(fp);
  78.  
  79. return 0;
  80.  
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement