示例#1
0
int VoxelServer::sendSpecialPacket(const SharedNodePointer& node) {
    int numBytesPacketHeader = populatePacketHeader(reinterpret_cast<char*>(_tempOutputBuffer), PacketTypeEnvironmentData);
    int envPacketLength = numBytesPacketHeader;
    int environmentsToSend = getSendMinimalEnvironment() ? 1 : getEnvironmentDataCount();

    for (int i = 0; i < environmentsToSend; i++) {
        envPacketLength += getEnvironmentData(i)->getBroadcastData(_tempOutputBuffer + envPacketLength);
    }

    NodeList::getInstance()->writeDatagram((char*) _tempOutputBuffer, envPacketLength, SharedNodePointer(node));
    return envPacketLength;
}
TEST_F(CudaMultiplicativeInteractionModelTest, Construct) {
  const int numberOfIndividuals = 10;
  MKLWrapper& mklWrapper;
  CudaMultiplicativeInteractionModel cudaMultiplicativeInteractionModel(kernelWrapper);

  Container::PinnedHostVector snpData(numberOfIndividuals);
  Container::PinnedHostVector envData(numberOfIndividuals);
  Container::PinnedHostVector interData(numberOfIndividuals);

  for(int i = 0; i < numberOfIndividuals; ++i){
    snpData(i) = i;
  }

  for(int i = 0; i < numberOfIndividuals; ++i){
    envData(i) = numberOfIndividuals - i;
  }

  Container::DeviceVector* snpDataDevice = hostToDeviceStream1.transferVector(snpData);
  Container::DeviceVector* envDataDevice = hostToDeviceStream1.transferVector(envData);
  Container::DeviceVector* interDataDevice = hostToDeviceStream1.transferVector(interData);

  Container::SNPVectorMock<Container::DeviceVector> snpVectorMock;
  EXPECT_CALL(snpVectorMock, getNumberOfIndividualsToInclude()).WillRepeatedly(Return(numberOfIndividuals));
  EXPECT_CALL(snpVectorMock, getOriginalSNPData()).Times(1).WillRepeatedly(ReturnRef(*snpDataDevice));

  Container::EnvironmentVectorMock<Container::DeviceVector> environmentVectorMock;
  EXPECT_CALL(environmentVectorMock, getNumberOfIndividualsToInclude()).WillRepeatedly(Return(numberOfIndividuals));
  EXPECT_CALL(environmentVectorMock, getEnvironmentData()).Times(1).WillRepeatedly(ReturnRef(*envDataDevice));

  Container::InteractionVectorMock<Container::DeviceVector> interactionVectorMock;
  EXPECT_CALL(interactionVectorMock, getNumberOfIndividualsToInclude()).WillRepeatedly(Return(numberOfIndividuals));
  EXPECT_CALL(interactionVectorMock, getInteractionData()).Times(1).WillRepeatedly(ReturnRef(*interDataDevice));
  EXPECT_CALL(interactionVectorMock, updateSize(numberOfIndividuals)).Times(1);

  cudaMultiplicativeInteractionModel.applyModel(snpVectorMock, environmentVectorMock, interactionVectorMock);

  Container::PinnedHostVector* interDataHostRes = deviceToHostStream1.transferVector(*interDataDevice);

  for(int i = 0; i < numberOfIndividuals; ++i){
    EXPECT_EQ(i * (numberOfIndividuals - i), (*interDataHostRes)(i));
  }

  delete snpDataDevice;
  delete envDataDevice;
  delete interDataDevice;
  delete interDataHostRes;
}
TEST_F(CpuMultiplicativeInteractionModelTest, Construct) {
  const int numberOfIndividuals = 10;
  MKLWrapper& mklWrapper;
  CpuMultiplicativeInteractionModel cpuMultiplicativeInteractionModel(mklWrapper);

  Container::RegularHostVector snpData(numberOfIndividuals);
  Container::RegularHostVector envData(numberOfIndividuals);
  Container::RegularHostVector interData(numberOfIndividuals);

  for(int i = 0; i < numberOfIndividuals; ++i){
    snpData(i) = i;
  }

  for(int i = 0; i < numberOfIndividuals; ++i){
    envData(i) = numberOfIndividuals - i;
  }

  Container::SNPVectorMock<Container::RegularHostVector> snpVectorMock;
  EXPECT_CALL(snpVectorMock, getNumberOfIndividualsToInclude()).WillRepeatedly(Return(numberOfIndividuals));
  EXPECT_CALL(snpVectorMock, getOriginalSNPData()).Times(1).WillRepeatedly(ReturnRef(snpData));

  Container::EnvironmentVectorMock<Container::RegularHostVector> environmentVectorMock;
  EXPECT_CALL(environmentVectorMock, getNumberOfIndividualsToInclude()).WillRepeatedly(Return(numberOfIndividuals));
  EXPECT_CALL(environmentVectorMock, getEnvironmentData()).Times(1).WillRepeatedly(ReturnRef(envData));

  Container::InteractionVectorMock<Container::RegularHostVector> interactionVectorMock;
  EXPECT_CALL(interactionVectorMock, getNumberOfIndividualsToInclude()).WillRepeatedly(Return(numberOfIndividuals));
  EXPECT_CALL(interactionVectorMock, getInteractionData()).Times(1).WillRepeatedly(ReturnRef(interData));
  EXPECT_CALL(interactionVectorMock, updateSize(numberOfIndividuals)).Times(1);

  cpuMultiplicativeInteractionModel.applyModel(snpVectorMock, environmentVectorMock, interactionVectorMock);

  for(int i = 0; i < numberOfIndividuals; ++i){
    EXPECT_EQ(i * (numberOfIndividuals - i), interData(i));
  }
}