編集:同じプログラムを問題なく同時に 2 回実行できます。これを OpenMP または他の方法で複製するにはどうすればよいですか?
これが問題の基本的な枠組みです。
//Defined elsewhere
class SomeClass
{
public:
void Function()
{
// Allocate some memory
float *Data;
Data = new float[1024];
// Declare a struct which will be used by functions defined in the DLL
SomeStruct Obj;
Obj = MemAllocFunctionInDLL(Obj);
// Call it
FunctionDefinedInDLL(Data,Obj);
// Clean up
MemDeallocFunctionInDLL(Obj);
delete [] Data;
}
}
void Bar()
{
#pragma omp parallel for
for(int j = 0;j<10;++j)
{
SomeClass X;
X.Function();
}
}
を介して一部のメモリの割り当てを解除しようとするとMemDeallocFunctionInDLL()
、_CrtIsValidHeapPointer()
アサーションが失敗することを確認しました。
これは、両方のスレッドが同じメモリに書き込んでいるためですか?
これを修正するために、私はプライベートにしようと思いましたSomeClass
(これは私にとってまったく異質なので、助けていただければ幸いです)。
void Bar()
{
SomeClass X;
#pragma omp parallel for default(shared) private(X)
for(int j = 0;j<10;++j)
{
X.Function();
}
}
そして、最初にメモリを割り当てようとすると失敗します。Data
注:必要に応じて DLL を変更できます
注:なしで完全に実行されます#pragma omp parallel for
編集:Bar
次のようになります:
void Bar()
{
int j
#pragma omp parallel for default(none) private(j)
for(j = 0;j<10;++j)
{
SomeClass X;
X.Function();
}
}
まだ運がありません。