-
Notifications
You must be signed in to change notification settings - Fork 195
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix including
<complex>
when bad CUDA bfloat/half macros are used. (#…
…2226) * Add <complex> test for bad macros being defined * Fix <complex> failing upon inclusion when bad macros are defined * Rather use explicit specializations and some evil hackery to get the complex interop to work * Fix typos * Inline everything * Move workarounds together * Use conversion functions instead of explicit specializations * Drop unneeded conversions --------- Co-authored-by: Michael Schellenberger Costa <[email protected]>
- Loading branch information
Showing
3 changed files
with
203 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
51 changes: 51 additions & 0 deletions
51
libcudacxx/test/libcudacxx/cuda/complex/half_bfloat/complex.bad_macros.pass.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of the libcu++ Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#define __CUDA_NO_HALF_CONVERSIONS__ 1 | ||
#define __CUDA_NO_HALF_OPERATORS__ 1 | ||
#define __CUDA_NO_BFLOAT16_CONVERSIONS__ 1 | ||
#define __CUDA_NO_BFLOAT16_OPERATORS__ 1 | ||
#define __CUDA_NO_HALF2_OPERATORS__ 1 | ||
#define __CUDA_NO_BFLOAT162_OPERATORS__ 1 | ||
|
||
#include <cuda/std/cassert> | ||
#include <cuda/std/complex> | ||
|
||
#include "test_macros.h" | ||
|
||
template <class T, class U> | ||
__host__ __device__ void test_assignment(cuda::std::complex<U> v = {}) | ||
{ | ||
cuda::std::complex<T> converting(v); | ||
|
||
cuda::std::complex<T> assigning{}; | ||
assigning = v; | ||
} | ||
|
||
__host__ __device__ void test() | ||
{ | ||
#ifdef _LIBCUDACXX_HAS_NVFP16 | ||
test_assignment<__half, float>(); | ||
test_assignment<__half, double>(); | ||
test_assignment<float, __half>(); | ||
test_assignment<double, __half>(); | ||
#endif // _LIBCUDACXX_HAS_NVFP16 | ||
#ifdef _LIBCUDACXX_HAS_NVBF16 | ||
test_assignment<__nv_bfloat16, float>(); | ||
test_assignment<__nv_bfloat16, double>(); | ||
test_assignment<float, __nv_bfloat16>(); | ||
test_assignment<double, __nv_bfloat16>(); | ||
#endif // _LIBCUDACXX_HAS_NVBF16 | ||
} | ||
|
||
int main(int arg, char** argv) | ||
{ | ||
test(); | ||
return 0; | ||
} |