Ich habe ein Problem, wobei ich ein paralleles System gegen ein nicht-paralleles System testen möchten.Establishing Speicher in Parallel C++
im System 1 I stellen die Speicher als solcher:
std::vector<double>* p_val_vec_main = new std::vector<double>(*mpStages);
std::vector<double>* p_val_vec_slave = new std::vector<double>(*mpStages-1);
std::vector<std::vector<double> >* p_mat_cache =
new std::vector<std::vector<double> >(3, std::vector<double>());
Diese Vektoren werden um geleitet und in einem RAII System verwendet, das wiederholt wird, damit die Zeiger und neue Syntax.
Im System 2 (das Parallelsystem), ich versuche, die 3 Vektoren parallel dort gegebenen aufzubauen ist nicht - vermutet - als solche Überlappung:
#pragma omp parallel
{
std::vector<double>* p_val_vec_main = new std::vector<double>(*mpStages);
std::vector<double>* p_val_vec_slave = new std::vector<double>(*mpStages-1);
std::vector<std::vector<double> >* p_mat_cache =
new std::vector<std::vector<double> >(3, std::vector<double>());
}
jedoch das erste Mal, wenn ich zu referenzieren ‚p_val_vec_main‘ außerhalb des Pragma Block, aber in der Methode, wo der Pragma-Block ist, auf ein gültiges Element in System 2 ich erhalte den Fehlercode:
error: 'p_val_vec_main' was not declared in this scope
mich gefragt, ob jemand wusste, warum dies geschah? Meine einzigen Gedanken darüber, was das sein könnte, wären möglicherweise lokale/globale Zusammenstöße.
Wenn Sie Sie „Referenz p_val_vec_main“ auf System sagen 2, tun Sie meinen Sie buchstäblich auf die Variable verweisen Sie in Ihrem 'Pragma omp parallel' Block deklariert? Oder sagen Sie, dass Sie sich auf eine Kopie dieses Zeigers beziehen, der in Ihrem RAII-System "herumgereicht" wurde? – Edward
Außerhalb des Pragma-Blocks, aber in der Methode, wo der Pragma-Block ist @Edward – mwtmurphy
'neue std :: vector <...' ist fast immer eine schlechte Idee. Das gilt für alle Container. Verwenden Sie einfach den Containertyp direkt."Verwenden von RAII" ist kein Argument _for_ pointer, es ist ein Argument _against_ pointers. – MSalters