46e683d41a
* SWDEV-545950 - Add hipStreamCopyAttributes API Implementation * Add unit test for hipStreamCopyAttributes API * Add ChangeLog and nvidia mapping for the API * Update rocprofiler-sdk with new HIP API details * [rocprofiler-sdk] handle hipStreamCopyAttributes in stream tracing service - this new HIP function has multiple stream arguments and needs to be skipped because it does not have an explicit create/destroy/set functionality * Update HIP_RUNTIME_API_TABLE_STEP_VERSION in clr and rocprofiler-sdk * Resolve merge conflicts --------- Co-authored-by: Jonathan R. Madsen <jonathanrmadsen@gmail.com>
98 linhas
3.7 KiB
C++
98 linhas
3.7 KiB
C++
/*
|
|
Copyright (c) 2025 Advanced Micro Devices, Inc. All rights reserved.
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
THE SOFTWARE.
|
|
*/
|
|
|
|
/**
|
|
* @addtogroup hipStreamCopyAttributes hipStreamCopyAttributes
|
|
* @{
|
|
* @ingroup StreamTest
|
|
* `hipStreamCopyAttributes (hipStream_t dst, hipStream_t src)` -
|
|
* copies attributes from one stream to other
|
|
*/
|
|
|
|
#include <hip_test_common.hh>
|
|
|
|
/**
|
|
* Test Description
|
|
* ------------------------
|
|
* - Test that creates two streams and copies attributes from one to another
|
|
* ------------------------
|
|
* - catch\unit\stream\hipStreamCopyAttributes.cc
|
|
* Test requirements
|
|
* ------------------------
|
|
* - HIP_VERSION >= 7.2
|
|
*/
|
|
|
|
TEST_CASE("Unit_hipStreamCopyAttributes_Basic") {
|
|
hipStream_t stream1, stream2, stream3, stream4;
|
|
hipStreamAttrValue val1, val2;
|
|
HIP_CHECK(hipStreamCreate(&stream1));
|
|
HIP_CHECK(hipStreamCreate(&stream2));
|
|
|
|
SECTION("Two Non Default Streams") {
|
|
val1.syncPolicy = hipSyncPolicySpin;
|
|
|
|
// Set the sync policy attribute of stream1 to hipSyncPolicySpin
|
|
HIP_CHECK(hipStreamSetAttribute(stream1, hipStreamAttributeSynchronizationPolicy, &val1));
|
|
|
|
// Copy attributes from stream1 to stream2
|
|
HIP_CHECK(hipStreamCopyAttributes(stream2, stream1));
|
|
|
|
// Query stream2 to verify the copied sync policy
|
|
HIP_CHECK(hipStreamGetAttribute(stream2, hipStreamAttributeSynchronizationPolicy, &val2));
|
|
|
|
REQUIRE(val2.syncPolicy == hipSyncPolicySpin);
|
|
}
|
|
|
|
SECTION("Copy attributes from Null Stream to Legacy Stream") {
|
|
stream3 = nullptr;
|
|
stream4 = hipStreamLegacy;
|
|
val1.syncPolicy = hipSyncPolicyYield;
|
|
|
|
// Set the sync policy attribute of stream1 to hipSyncPolicySpin
|
|
HIP_CHECK(hipStreamSetAttribute(stream3, hipStreamAttributeSynchronizationPolicy, &val1));
|
|
|
|
// Copy attributes from null stream to legacy stream
|
|
HIP_CHECK(hipStreamCopyAttributes(stream4, stream3));
|
|
|
|
// Query stream2 to verify the copied sync policy
|
|
HIP_CHECK(hipStreamGetAttribute(stream4, hipStreamAttributeSynchronizationPolicy, &val2));
|
|
|
|
REQUIRE(val2.syncPolicy == hipSyncPolicyYield);
|
|
}
|
|
|
|
SECTION("Copy attributes from streamperthread to another stream") {
|
|
stream3 = hipStreamPerThread;
|
|
val1.syncPolicy = hipSyncPolicyBlockingSync;
|
|
|
|
// Set the sync policy attribute of stream1 to hipSyncPolicySpin
|
|
HIP_CHECK(hipStreamSetAttribute(stream3, hipStreamAttributeSynchronizationPolicy, &val1));
|
|
|
|
// Copy attributes from streamperthread to non default stream
|
|
HIP_CHECK(hipStreamCopyAttributes(stream2, stream3));
|
|
|
|
// Query stream2 to verify the copied sync policy
|
|
HIP_CHECK(hipStreamGetAttribute(stream2, hipStreamAttributeSynchronizationPolicy, &val2));
|
|
|
|
REQUIRE(val2.syncPolicy == hipSyncPolicyBlockingSync);
|
|
}
|
|
|
|
HIP_CHECK(hipStreamDestroy(stream1));
|
|
HIP_CHECK(hipStreamDestroy(stream2));
|
|
}
|