저는 C++, MPI 및 CUDA를 사용하여 병렬 진화 알고리즘 라이브러리를 작성하고 있습니다. 내 객체 지향 디자인에서 원시 데이터를 추출하고 플랫 배열 (또는 std :: vector를 stl-mpi을 사용하여)에 붙여서 노드 나 cuda 디바이스로 전송해야합니다.C++ : 변수 템플릿 매개 변수 (유전자 알고리즘 용)
완전한 디자인은 라이브러리를 유연하게 유지하기 위해 많은 상속과 매우 복잡합니다. 하지만 관심 클래스는 다음과 같습니다 :
게놈 클래스 - 데이터 벡터가 포함되어 있습니다. 예 : 수레 또는 bools.
인구 클래스 - 게놈 개체 벡터를 포함하며 게놈 개체로 초기화됩니다.
처음에는 게놈 개체가 만들어지고, 그 개체에 대한 참조가 전달 된 개체를 기반으로하여 게놈의 자체 벡터를 만드는 채우기 클래스 생성자로 전달됩니다. (희망적 이겠지!)
그래서 다른 멤버 벡터를 추가 할 것이라고 생각합니다. 예를 들어 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