Example #1
0
void Tile::explode()
{
    if (m_type == Tile::Stone) {
        setType(Tile::Debris);
        emit exploded();
    } else if (isWalkable()) {
        emit exploded();
    }
}
Example #2
0
TEST(HalfPrec, cuda) {
  float hostFloats[] = {
    -1,
    -100,
    2.3,
    0.0,
    1.0,
    3867.2,
  };
  const auto N = sizeof(hostFloats) / sizeof(float);
  CUDA<float> devFloats(hostFloats, N);
  CUDA<half_t> devHalfs(N);

  halfprec_ToHalf(nullptr, devFloats.data(), devHalfs.data(), devFloats.size());
  cudaCheck(cudaDeviceSynchronize());

  {
    uint16_t cpuHalfs[N] = { 666 };
    facebook::math::Float16::encode(cpuHalfs, hostFloats, N);

    half_t convertedHalfs[N];
    devHalfs.toHost(convertedHalfs);
    for (int i = 0; i < N; i++) {
      // The CPU and GPU disagree by a digit sometimes because the GPU
      // is using a different rounding mode.
      EXPECT_NEAR(cpuHalfs[i], convertedHalfs[i], 1);
    }
  }

  CUDA<float> exploded(N);
  halfprec_ToFloat(nullptr, devHalfs.data(), exploded.data(), N);
  float postExpl[N];
  exploded.toHost(postExpl);
  for (int i = 0; i < N; i++) {
    auto thousandth = fabs(hostFloats[i] / 1000.0);
    EXPECT_NEAR(postExpl[i], hostFloats[i], thousandth);
  }
}