का उपयोग कर एफएफटीडब्ल्यू योजना निर्माण मैं समानांतर में कई एफएफटी करने की कोशिश कर रहा हूं। मैं एफएफटीडब्ल्यू और ओपनएमपी का उपयोग कर रहा हूं। प्रत्येक एफएफटी अलग है, इसलिए मैं एफएफटीडब्ल्यू के बिल्ड-इन मल्टीथ्रेडिंग (जो मुझे पता है ओपनएमपी का उपयोग करता है) पर निर्भर नहीं है।ओपनएमपी
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
यह सब ठीक काम करता है। हालांकि, अगर मैं योजना निर्माण (fftw_plan_dft_r2c_2d) के आसपास से महत्वपूर्ण निर्माण को हटा देता हूं तो मेरा कोड विफल हो जाएगा। क्या कोई समझा सकता है क्यों? fftw_plan_dft_r2c_2d वास्तव में एक "अनाथ" नहीं है, है ना? क्या ऐसा इसलिए है क्योंकि दो थ्रेड दोनों संख्या ओफ्रो या संख्या ओफ कॉलम स्मृति स्थान को एक ही समय में हिट करने का प्रयास कर सकते हैं?
आप fftw की बहु-थ्रेडिंग क्षमताओं का उपयोग नहीं कर रहे हैं। आप वास्तव में समानांतर में 36 सिंगल-थ्रेडेड ट्रांसफॉर्म बना रहे हैं। –
मुझे पता है। मैं कहता हूं कि मेरे शुरुआती प्रश्न में * प्रत्येक एफएफटी अलग है, इसलिए मैं एफएफटीडब्ल्यू के बिल्ड-इन मल्टीथ्रेडिंग_ पर भरोसा नहीं कर रहा हूं। मैं समानांतर में 36 सिंगल-थ्रेडेड ट्रांसफॉर्मेशन बनाना चाहता हूं। – tir38
क्षमा करें, मेरी गलती, मैंने बिल्कुल विपरीत पढ़ा ;-) –