私は、データエッジを介して接続された計算を行う複数のタスクを持つワークフローを持っています。 1つのタスクが別のタスクのためのデータを生成するようにする。各タスクは別のスレッドにバインドされています。これらのタスクの1つは、メモリを解放する別のタスクによってリサイクルされるメモリプールからメモリを取得することです。C++のメモリに関するメタデータにアクセスする方法
MemoryData
は、メモリの起源(GPUアドレス空間/ CPUアドレス空間)とリリースルール(メモリをリサイクルできる時期を示す)などの情報を格納するためにメモリプール内で使用されます。
タスク1プールからメモリを取得:
std::shared_ptr<MemoryData<Type>> m = memGet<Type>("MemoryManagerName", ruleForReleasingMemory);
// Store the memory to passed along with data
data->setMemory(m);
m
はそれを解放するタスクに到達するまで、データ内のタスクにタスクから渡されなければなりません。
タスク2がメモリを解放する:
std::shared_ptr<MemoryData<Type>> m = data->getMemory();
memRelease("MemoryManagerName", m);
私が何をしようとしているだけでType
を返すためにmemGet
の戻り値の型を変更しています。その後、リリース中に、ある方法を使用してMemoryData
にメモリをリサイクルさせることができます。これによりData
の表現が簡素化されるので、std::shared_ptr<MemoryData<Type>>
を保存する必要はありません。
これまでのところ私は2つのデザインを考えた:
(1)ポインタ**
へのポインタを使用し、そこからMemoryData
の開始アドレスを計算するために、ポインタ演算を使用します。
(2)TypeへのポインタとMemoryDataへのポインタとの間のマッピングを作成します。これは、この情報を各タスクに送信する必要があり、動的メモリ割り当てを追加する必要がある場合、少し難しいでしょう。
なぜCタグですか? CはC++とは異なります。 –
私はCまたはC++からの提案にオープンしています。私は、クラスより簡単な構造体の中でポインタの算術演算を行うことが分かっています。 – Jameshobbs
Cは 'std :: shared_ptr'やテンプレートを持っていないので、C言語にすることはできません。 C言語タグを削除することをお勧めします。 –