Как установить темы на функцию FFT - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть код, который должен выполнить быстрое преобразование Фурье с использованием стандарта Posix для многопоточности, но я не могу установить правильные условия для правильного вывода. Я использую стандарт Posix и ОС Linux. Я заметил, что последовательное решение работает.
Я создал темы в основной функции. Спасибо за помощь!

 void* transform()
    {
        pthread_mutex_lock(&lock);
         int thread_part = part++;
    int start=thread_part * (N / NumThreads);
    int stop=(thread_part + 1) * (N / NumThreads);
     int logstart=thread_part * (Log2N / NumThreads);
     int logstop=(thread_part + 1) * (Log2N / NumThreads);

        for (int j = start; j < stop; j++)
            AlfaVec[j] = BetaVec[j];

         if(start==0)
        {

                for (int i = start+2; i < stop / 2; i++)
                    W[i] = cpow(W[1], (double)i);

        }
        else
        {
            for (int i = start/2; i < stop / 2; i++)
                    W[i] = cpow(W[1], (double)i);
        }

        int n = 1;
        int a = N / 2;

        for (int j = logstart; j < logstop; j++) {//This is the bad code section, where the function doesn't do the right operations
            for (int i = start ; i < stop; i++) {
                if (!(i & n)) {
                    double complex temp = AlfaVec[i];
                    double complex Temp = W[(i * a) % (n * a)] * AlfaVec[i + n];
                    AlfaVec[i] = temp + Temp;
                    AlfaVec[i + n]  = temp - Temp;
                }
            }
            n *= 2;
            a = a / 2;
        }

     pthread_mutex_unlock(&lock);
    }
...