У меня есть код, который должен выполнить быстрое преобразование Фурье с использованием стандарта 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);
}