Tôi đang cố gắng thực hiện một số FFT song song. Tôi đang sử dụng FFTW và OpenMP. Mỗi FFT là khác nhau, vì vậy tôi không phụ thuộc vào đa luồng xây dựng trong FFTW (mà tôi biết sử dụng OpenMP).Tạo kế hoạch FFTW bằng cách sử dụng OpenMP
int m;
// assume:
// int numberOfColumns = 100;
// int numberOfRows = 100;
#pragma omp parallel for default(none) private(m) shared(numberOfColumns, numberOfRows)// num_threads(4)
for(m = 0; m < 36; m++){
// create pointers
double *inputTest;
fftw_complex *outputTest;
fftw_plan testPlan;
// preallocate vectors for FFTW
outputTest = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*numberOfRows*numberOfColumns);
inputTest = (double *)fftw_malloc(sizeof(double)*numberOfRows*numberOfColumns);
// confirm that preallocation worked
if (inputTest == NULL || outputTest == NULL){
logger_.log_error("\t\t FFTW memory not allocated on m = %i", m);
}
// EDIT: insert data into inputTest
inputTest = someDataSpecificToThisIteration(m); // same size for all m
// create FFTW plan
#pragma omp critical (make_plan)
{
testPlan = fftw_plan_dft_r2c_2d(numberOfRows, numberOfColumns, inputTest, outputTest, FFTW_ESTIMATE);
}
// confirm that plan was created correctly
if (testPlan == NULL){
logger_.log_error("\t\t failed to create plan on m = %i", m);
}
// execute plan
fftw_execute(testPlan);
// clean up
fftw_free(inputTest);
fftw_free(outputTest);
fftw_destroy_plan(testPlan);
}// end parallelized for loop
Tất cả đều hoạt động tốt. Tuy nhiên, nếu tôi loại bỏ các cấu trúc quan trọng từ xung quanh việc tạo kế hoạch (fftw_plan_dft_r2c_2d) mã của tôi sẽ thất bại. Ai đó có thể giải thích lý do tại sao? fftw_plan_dft_r2c_2d không thực sự là một "đứa trẻ mồ côi", đúng không? Có phải vì hai luồng có thể vừa cố gắng truy cập vào vị trí bộ nhớ numberOfRows hoặc numberOfColumns cùng một lúc?
Bạn KHÔNG sử dụng khả năng đa luồng của fftw. Bạn đang thực sự tạo 36 biến đổi đơn luồng song song. –
Tôi biết. Tôi nói rằng trong câu hỏi ban đầu của tôi _Each FFT là khác nhau, vì vậy tôi không dựa vào xây dựng trong multithreading_ FFTW. Tôi muốn thực hiện 36 biến đổi đơn luồng song song. – tir38
Xin lỗi, sai lầm của tôi, tôi đã đọc chính xác điều ngược lại ;-) –