Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <complex.h>
- #include <pthread.h>
- #include <math.h>
- int P;
- int numbers;
- double *inputNumbers;
- double complex *outputNumbers;
- void* threadFunction(void* arg){
- int thread_id = *(int*)arg;
- int start = thread_id * (numbers / P);
- int end = (thread_id + 1) * (numbers /P);
- if(end > numbers){
- end = numbers;
- }
- double complex sum;
- double complex power;
- for(int k = start; k < end; k++){
- sum = 0;
- for(int i = 0; i < numbers; i++){
- power = 0;
- power = (((- 2) * M_PI * I) / numbers) * k * i;
- sum = sum + inputNumbers[i] * cexp(power);
- }
- outputNumbers[k] = sum;
- }
- }
- int main(int argc, char * argv[]) {
- //citire din fisier
- FILE *fp, *op;
- fp = fopen(argv[1], "r");
- op = fopen(argv[2], "w");
- P = atoi(argv[3]);
- fscanf(fp, "%d", &numbers);
- inputNumbers = calloc(numbers, sizeof(double));
- outputNumbers = calloc(numbers, sizeof(double complex));
- int i = 0;
- while(!feof(fp)){
- fscanf(fp, "%lf", &(inputNumbers[i]));
- i++;
- }
- fprintf(op, "%d\n", numbers);
- //inceput paralelizare
- pthread_t tid[P];
- int thread_id[P];
- for(i = 0; i < P; i++){
- thread_id[i] = i;
- }
- for(i = 0; i < P; i++){
- pthread_create(&(tid[i]), NULL, threadFunction, &(thread_id[i]));
- }
- for(i = 0; i < P; i++){
- pthread_join(tid[i], NULL);
- }
- //scriere in fisier
- for(int k = 0; k < numbers; k ++){
- fprintf(op, "%f ", creal(outputNumbers[k]));
- fprintf(op, "%f\n", cimag(outputNumbers[k]));
- }
- free(inputNumbers);
- free(outputNumbers);
- fclose(fp);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement