输出数组包含" nan"值

时间:2017-08-14 13:15:46

标签: c multithreading pthreads

我有一个将FFT计算为pthread线程的函数。由于我有两个不同的输入,我有两个具有相同FFT功能的线程。我使用互斥锁让线程访问共享变量没有问题。代码运行良好,但我的输出数组包含一些" nan"价值与适当的价值观。当我使用下面没有互斥的功能时,一切都很好。

int main(){
    while (1) {
        pthread_create(&thread[1],NULL,compute_FFT,&arguments[1]);

        pthread_join(thread[1],Output[1]);

        pthread_create(&thread[2],NULL,compute_FFT,&arguments[2]);

        pthread_join(thread[2],Output[2]);
    } 
}

但是当我在线程函数本身中包含while(1)并使用互斥时,输出数组有" nan"值。

void *compute_FFT(void* arg){
    struct arg_struct *data = (struct arg_struct *)arg;

    while (1){
        pthread_mutex_lock(&fft_mutex);

        data->base = data->fft->in;

        for(i=0;i<N;i++){
            data->base[i].re =  Queue[data->number][i]; data->base[i].im =0.0;
        }

        usleep(1);

        gpu_fft_execute(data->fft);
        data->base = data->fft->out;

        for(i=0;i<N;i++){
            FFT_out[data->number][i] = sqrt(((data->base[i].re)*(data->base[i].re))+((data->base[i].im)*(data->base[i].im))); 
        }

        pthread_mutex_unlock(&fft_mutex);
    }
}

正如您在第一张图片中看到的那样,输出数组不包含&#34; nan&#34;价值观,在第二个,它有&#34; nan&#34;价值以及适当的价值观。这些只是输出数组的一部分。它通常有1024个项目。

This is the output when I use pthread_create and join together like in code above Output with "nan" values

0 个答案:

没有答案