-
Notifications
You must be signed in to change notification settings - Fork 190
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
5f02fe8
commit fbce1cd
Showing
3 changed files
with
95 additions
and
2 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
46 changes: 46 additions & 0 deletions
46
libcudacxx/test/libcudacxx/cuda/ptx/ptx.getctarank.compile.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,46 @@ | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of libcu++, the C++ Standard Library for your entire system, | ||
// 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. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// UNSUPPORTED: libcpp-has-no-threads | ||
|
||
// <cuda/ptx> | ||
|
||
#include <cuda/ptx> | ||
#include <cuda/std/utility> | ||
|
||
/* | ||
* We use a special strategy to force the generation of the PTX. This is mainly | ||
* a fight against dead-code-elimination in the NVVM layer. | ||
* | ||
* The reason we need this strategy is because certain older versions of ptxas | ||
* segfault when a non-sensical sequence of PTX is generated. So instead, we try | ||
* to force the instantiation and compilation to PTX of all the overloads of the | ||
* PTX wrapping functions. | ||
* | ||
* We do this by writing a function pointer of each overload to the kernel | ||
* parameter `fn_ptr`. | ||
* | ||
* Because `fn_ptr` is possibly visible outside this translation unit, the | ||
* compiler must compile all the functions which are stored. | ||
* | ||
*/ | ||
|
||
__global__ void test_getctarank(void ** fn_ptr) { | ||
#if __cccl_ptx_isa >= 780 | ||
NV_IF_TARGET(NV_PROVIDES_SM_90, ( | ||
// getctarank.shared::cluster.u32 dest, addr; | ||
*fn_ptr++ = reinterpret_cast<void*>(static_cast<uint32_t (*)(cuda::ptx::space_cluster_t, const void* )>(cuda::ptx::getctarank)); | ||
)); | ||
#endif // __cccl_ptx_isa >= 780 | ||
} | ||
|
||
int main(int, char**) | ||
{ | ||
return 0; | ||
} |