私は、C++、MPI、CUDAを使用した並列進化アルゴリズムライブラリを作成しています。オブジェクト指向設計から生データを抽出し、それをノードまたはcudaデバイスに送信するためにフラットな配列(またはstd :: vectorをstl-mpiで使用)に貼り付ける必要があります。C++:可変テンプレートパラメータ(遺伝的アルゴリズム用)
完全な設計は、柔軟なライブラリを維持するために、継承の多くの非常に複雑です。しかし興味のあるクラスは:
ゲノムクラス - データのベクトルを含んでいます。例えば浮動小数点またはbool。
集団クラス - ゲノムオブジェクトのベクターを含み、ゲノムオブジェクトで初期化されています。
まずゲノムオブジェクトが作成され、それへの参照が渡さ1に基づいてゲノムの独自のベクトルを作成し、人口クラスのコンストラクタに渡されます。 (理にかなっている希望!)
は、だから私は、人口のクラスにrawData
を言って、私は他のメンバーのベクトルを追加するだろうと思いました。しかし、rawDataのタイプは、ゲノム(または元のゲノムオブジェクト)に格納されたデータのタイプに依存する必要があります。
テンプレートに渡された型を動的に設定する方法がないことがわかっている限り、問題があります。私は(実際には別のクラスのメンバオブジェクトである)の人口を作成するときに、私は
私の擬似コードは
class genome {
std::vector<bool> data;
}
template <class T>
class population {
std::vector<genome> population;
std::vector<T> rawData;
void PackDataIntoRawData();
};
だろうを呼び出します。
genome myBitGenome();
population<type of myBitGenome.data> pop(myBitGenome);
がにとにかくありこれを行うか、誰かがこれを実装する別の方法を提案することができます。私は実際には問題を理解していない事前
逆です。私の人口には、それぞれにデータと他の方法の束が含まれているゲノムのベクトルが含まれています。私はそれらのゲノムからデータを抽出し、それを法線ベクトルに入れます(オブジェクトベクトルではなく、 MPI)。同時に、母集団クラスにはさまざまなタイプのゲノムが使用されるため、固定メンバータイプを母集団に入れることはできません(ベクター rawDataなど)。 –
zenna