Двигатели Matlab в параллельном цикле

У меня возникли проблемы с использованием нескольких движков Matlab из куска параллельного кода. Я могу успешно порождать несколько двигателей, используя engOpenSingleUse но я не могу связаться с более чем одним движком (т.е. engPutVariable потерпеть поражение).

Как всегда, минимальный (VS) пример:

#include "stdafx.h"#include <engine.h>
#include <omp.h>

int _tmain(int argc, _TCHAR* argv[])
{
//First spawn the matlab engine sessions
Engine *m_Engines[2];
for (int i = 0; i < 2; i++)
{
m_Engines[i] = engOpenSingleUse(NULL, NULL, NULL);
}

//Then spawn the worker threads...
#pragma omp parallel num_threads(2)
{
// Allocate an engine to each thread
int thread_num = omp_get_thread_num();
Engine *thisEngine = m_Engines[thread_num];

#pragma omp for
for (int i = 0; i < 10000; i++)
{
// Create an mxArray and stick some data in it
mxArray* mM = NULL;
mM = mxCreateDoubleMatrix(1, 1, mxREAL);
double data[1] = { 1.0 };
memcpy((void *)mxGetPr(mM), (void *)data, sizeof(data));

// Send it across to matlab
engPutVariable(thisEngine, "A", mM);
// Run some algorithm
engEvalString(thisEngine, "A=A+1;");
// Retrieve result
mM = engGetVariable(thisEngine, "A");

// Get it out of the mxarray
double A = *mxGetPr(mM);
}
}

return 0;
}

Есть идеи? Использую Matlab R2012b на Win x64.

8

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]