के साथ मल्टीथ्रेडिंग मैं मैटलैब पर एक प्रोजेक्ट पर काम कर रहा हूं जहां हमें प्रदर्शन को अनुकूलित करना है, और मैं एक .m फ़ाइल से बने कुछ फ़ंक्शन कॉल को समानांतर करने के बारे में सोच रहा था।मैटलैब
विचार, सरल था एक मैटलैब फ़ाइल (मीटर) एक सी फ़ाइल MEX के रूप में संकलित फोन से, और कहा कि सी फ़ाइल से, धागे की एक जोड़ी बना सकते हैं और प्रत्येक धागे से matlab कार्यों वापस बुलाना।
//Global variables
mxArray **g_plhs;
mxArray **g_prhs;
int g_nlhs;
int g_nrhs;
//Thread function
DWORD WINAPI my_function(LPVOID lpParam)
{
mexCallMATLAB(g_nlhs,g_plhs,g_nrhs,g_prhs,"matlab_function");
return 0;
}
//Main function
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[]) {
DWORD dwThreadIdArray[MAX_THREADS];
HANDLE hThreadArray[MAX_THREADS];
g_plhs = plhs;
g_prhs = prhs;
g_nlhs = nlhs;
g_nrhs = nrhs;
hThreadArray[0] = CreateThread(
NULL,
0,
my_function,
NULL,
0,
&dwThreadIdArray[0]);
WaitForMultipleObjects(MAX_THREADS, hThreadArray, TRUE, INFINITE);
for(i=0; i<MAX_THREADS; i++)
{
CloseHandle(hThreadArray[i]);
}
}
हम पर कोई प्रतिबंध है:
सिद्धांत काम करता है, मैं धागे बना सकते हैं, और मैं भी matlab समारोह कॉल कर सकते हैं, समस्या यह है कि मैं धागे से matlab फ़ंक्शन को कॉल नहीं कर सकता है matlab के साथ काम करते समय वह विकल्प? क्या किसी ने ऐसा कुछ करने की कोशिश की है?
संपादित करें: क्या कोई विकल्प है जिसके लिए समांतर टूलबॉक्स की आवश्यकता नहीं है?
क्या आप MATLAB कोड समानांतर करने की कोशिश कर रहे हैं? – You
@rlbisbe: MEX API थ्रेड-सुरक्षित नहीं है: http://www.mathworks.com/support/solutions/en/data/1-V3B5T/index.html?समाधान = 1-वी 3 बी 5 टी – Amro