Skip to content

Commit 899f831

Browse files
committed
Merge branch 'tmp_hip' into petr/move_hip
2 parents 1941850 + f5e0ed5 commit 899f831

30 files changed

+7410
-0
lines changed

adapter.cpp

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
//===--------- adapter.cpp - HIP Adapter ----------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "adapter.hpp"
10+
#include "common.hpp"
11+
12+
#include <atomic>
13+
#include <ur_api.h>
14+
15+
struct ur_adapter_handle_t_ {
16+
std::atomic<uint32_t> RefCount = 0;
17+
};
18+
19+
ur_adapter_handle_t_ adapter{};
20+
21+
UR_APIEXPORT ur_result_t UR_APICALL urInit(ur_device_init_flags_t,
22+
ur_loader_config_handle_t) {
23+
return UR_RESULT_SUCCESS;
24+
}
25+
26+
UR_APIEXPORT ur_result_t UR_APICALL urTearDown(void *) {
27+
return UR_RESULT_SUCCESS;
28+
}
29+
30+
UR_APIEXPORT ur_result_t UR_APICALL urAdapterGet(
31+
uint32_t, ur_adapter_handle_t *phAdapters, uint32_t *pNumAdapters) {
32+
if (phAdapters) {
33+
adapter.RefCount++;
34+
*phAdapters = &adapter;
35+
}
36+
if (pNumAdapters) {
37+
*pNumAdapters = 1;
38+
}
39+
40+
return UR_RESULT_SUCCESS;
41+
}
42+
43+
UR_APIEXPORT ur_result_t UR_APICALL urAdapterRelease(ur_adapter_handle_t) {
44+
// No state to clean up so we don't need to check for 0 references
45+
adapter.RefCount--;
46+
return UR_RESULT_SUCCESS;
47+
}
48+
49+
UR_APIEXPORT ur_result_t UR_APICALL urAdapterRetain(ur_adapter_handle_t) {
50+
adapter.RefCount++;
51+
return UR_RESULT_SUCCESS;
52+
}
53+
54+
UR_APIEXPORT ur_result_t UR_APICALL urAdapterGetLastError(
55+
ur_adapter_handle_t, const char **ppMessage, int32_t *pError) {
56+
*ppMessage = ErrorMessage;
57+
*pError = ErrorMessageCode;
58+
return UR_RESULT_SUCCESS;
59+
}
60+
61+
UR_APIEXPORT ur_result_t UR_APICALL urAdapterGetInfo(ur_adapter_handle_t,
62+
ur_adapter_info_t propName,
63+
size_t propSize,
64+
void *pPropValue,
65+
size_t *pPropSizeRet) {
66+
UrReturnHelper ReturnValue(propSize, pPropValue, pPropSizeRet);
67+
68+
switch (propName) {
69+
case UR_ADAPTER_INFO_BACKEND:
70+
return ReturnValue(UR_ADAPTER_BACKEND_HIP);
71+
case UR_ADAPTER_INFO_REFERENCE_COUNT:
72+
return ReturnValue(adapter.RefCount.load());
73+
default:
74+
return UR_RESULT_ERROR_INVALID_ENUMERATION;
75+
}
76+
77+
return UR_RESULT_SUCCESS;
78+
}

adapter.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//===--------- adapter.hpp - HIP Adapter ----------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
struct ur_adapter_handle_t_;
10+
11+
extern ur_adapter_handle_t_ adapter;

command_buffer.cpp

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
//===--------- command_buffer.cpp - HIP Adapter ---------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "command_buffer.hpp"
10+
#include "common.hpp"
11+
12+
/// Stub implementations of UR experimental feature command-buffers
13+
14+
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferCreateExp(
15+
ur_context_handle_t, ur_device_handle_t,
16+
const ur_exp_command_buffer_desc_t *, ur_exp_command_buffer_handle_t *) {
17+
detail::ur::die("Experimental Command-buffer feature is not "
18+
"implemented for HIP adapter.");
19+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
20+
}
21+
22+
UR_APIEXPORT ur_result_t UR_APICALL
23+
urCommandBufferRetainExp(ur_exp_command_buffer_handle_t) {
24+
detail::ur::die("Experimental Command-buffer feature is not "
25+
"implemented for HIP adapter.");
26+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
27+
}
28+
29+
UR_APIEXPORT ur_result_t UR_APICALL
30+
urCommandBufferReleaseExp(ur_exp_command_buffer_handle_t) {
31+
detail::ur::die("Experimental Command-buffer feature is not "
32+
"implemented for HIP adapter.");
33+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
34+
}
35+
36+
UR_APIEXPORT ur_result_t UR_APICALL
37+
urCommandBufferFinalizeExp(ur_exp_command_buffer_handle_t) {
38+
detail::ur::die("Experimental Command-buffer feature is not "
39+
"implemented for HIP adapter.");
40+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
41+
}
42+
43+
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendKernelLaunchExp(
44+
ur_exp_command_buffer_handle_t, ur_kernel_handle_t, uint32_t,
45+
const size_t *, const size_t *, const size_t *, uint32_t,
46+
const ur_exp_command_buffer_sync_point_t *,
47+
ur_exp_command_buffer_sync_point_t *) {
48+
detail::ur::die("Experimental Command-buffer feature is not "
49+
"implemented for HIP adapter.");
50+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
51+
}
52+
53+
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemcpyUSMExp(
54+
ur_exp_command_buffer_handle_t, void *, const void *, size_t, uint32_t,
55+
const ur_exp_command_buffer_sync_point_t *,
56+
ur_exp_command_buffer_sync_point_t *) {
57+
detail::ur::die("Experimental Command-buffer feature is not "
58+
"implemented for HIP adapter.");
59+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
60+
}
61+
62+
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMembufferCopyExp(
63+
ur_exp_command_buffer_handle_t, ur_mem_handle_t, ur_mem_handle_t, size_t,
64+
size_t, size_t, uint32_t, const ur_exp_command_buffer_sync_point_t *,
65+
ur_exp_command_buffer_sync_point_t *) {
66+
detail::ur::die("Experimental Command-buffer feature is not "
67+
"implemented for HIP adapter.");
68+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
69+
}
70+
71+
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMembufferCopyRectExp(
72+
ur_exp_command_buffer_handle_t, ur_mem_handle_t, ur_mem_handle_t,
73+
ur_rect_offset_t, ur_rect_offset_t, ur_rect_region_t, size_t, size_t,
74+
size_t, size_t, uint32_t, const ur_exp_command_buffer_sync_point_t *,
75+
ur_exp_command_buffer_sync_point_t *) {
76+
detail::ur::die("Experimental Command-buffer feature is not "
77+
"implemented for HIP adapter.");
78+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
79+
}
80+
81+
UR_APIEXPORT
82+
ur_result_t UR_APICALL urCommandBufferAppendMembufferWriteExp(
83+
ur_exp_command_buffer_handle_t, ur_mem_handle_t, size_t, size_t,
84+
const void *, uint32_t, const ur_exp_command_buffer_sync_point_t *,
85+
ur_exp_command_buffer_sync_point_t *) {
86+
detail::ur::die("Experimental Command-buffer feature is not "
87+
"implemented for HIP adapter.");
88+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
89+
}
90+
91+
UR_APIEXPORT
92+
ur_result_t UR_APICALL urCommandBufferAppendMembufferReadExp(
93+
ur_exp_command_buffer_handle_t, ur_mem_handle_t, size_t, size_t, void *,
94+
uint32_t, const ur_exp_command_buffer_sync_point_t *,
95+
ur_exp_command_buffer_sync_point_t *) {
96+
detail::ur::die("Experimental Command-buffer feature is not "
97+
"implemented for HIP adapter.");
98+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
99+
}
100+
101+
UR_APIEXPORT
102+
ur_result_t UR_APICALL urCommandBufferAppendMembufferWriteRectExp(
103+
ur_exp_command_buffer_handle_t, ur_mem_handle_t, ur_rect_offset_t,
104+
ur_rect_offset_t, ur_rect_region_t, size_t, size_t, size_t, size_t, void *,
105+
uint32_t, const ur_exp_command_buffer_sync_point_t *,
106+
ur_exp_command_buffer_sync_point_t *) {
107+
detail::ur::die("Experimental Command-buffer feature is not "
108+
"implemented for HIP adapter.");
109+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
110+
}
111+
112+
UR_APIEXPORT
113+
ur_result_t UR_APICALL urCommandBufferAppendMembufferReadRectExp(
114+
ur_exp_command_buffer_handle_t, ur_mem_handle_t, ur_rect_offset_t,
115+
ur_rect_offset_t, ur_rect_region_t, size_t, size_t, size_t, size_t, void *,
116+
uint32_t, const ur_exp_command_buffer_sync_point_t *,
117+
ur_exp_command_buffer_sync_point_t *) {
118+
detail::ur::die("Experimental Command-buffer feature is not "
119+
"implemented for HIP adapter.");
120+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
121+
}
122+
123+
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferEnqueueExp(
124+
ur_exp_command_buffer_handle_t, ur_queue_handle_t, uint32_t,
125+
const ur_event_handle_t *, ur_event_handle_t *) {
126+
detail::ur::die("Experimental Command-buffer feature is not "
127+
"implemented for HIP adapter.");
128+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
129+
}

command_buffer.hpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//===--------- command_buffer.hpp - HIP Adapter ---------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include <ur/ur.hpp>
10+
11+
/// Stub implementation of command-buffers for HIP
12+
13+
struct ur_exp_command_buffer_handle_t_ {};

common.cpp

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
//===--------- common.cpp - HIP Adapter -----------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
#include "common.hpp"
9+
10+
#include <sstream>
11+
12+
ur_result_t mapErrorUR(hipError_t Result) {
13+
switch (Result) {
14+
case hipSuccess:
15+
return UR_RESULT_SUCCESS;
16+
case hipErrorInvalidContext:
17+
return UR_RESULT_ERROR_INVALID_CONTEXT;
18+
case hipErrorInvalidDevice:
19+
return UR_RESULT_ERROR_INVALID_DEVICE;
20+
case hipErrorInvalidValue:
21+
return UR_RESULT_ERROR_INVALID_VALUE;
22+
case hipErrorOutOfMemory:
23+
return UR_RESULT_ERROR_OUT_OF_HOST_MEMORY;
24+
case hipErrorLaunchOutOfResources:
25+
return UR_RESULT_ERROR_OUT_OF_RESOURCES;
26+
default:
27+
return UR_RESULT_ERROR_UNKNOWN;
28+
}
29+
}
30+
31+
void checkErrorUR(hipError_t Result, const char *Function, int Line,
32+
const char *File) {
33+
if (Result == hipSuccess) {
34+
return;
35+
}
36+
37+
if (std::getenv("SYCL_PI_SUPPRESS_ERROR_MESSAGE") == nullptr ||
38+
std::getenv("UR_SUPPRESS_ERROR_MESSAGE") == nullptr) {
39+
const char *ErrorString = nullptr;
40+
const char *ErrorName = nullptr;
41+
ErrorName = hipGetErrorName(Result);
42+
ErrorString = hipGetErrorString(Result);
43+
std::cerr << "\nUR HIP ERROR:"
44+
<< "\n\tValue: " << Result
45+
<< "\n\tName: " << ErrorName
46+
<< "\n\tDescription: " << ErrorString
47+
<< "\n\tFunction: " << Function
48+
<< "\n\tSource Location: " << File << ":" << Line << "\n\n";
49+
}
50+
51+
if (std::getenv("PI_HIP_ABORT") != nullptr ||
52+
std::getenv("UR_HIP_ABORT") != nullptr) {
53+
std::abort();
54+
}
55+
56+
throw mapErrorUR(Result);
57+
}
58+
59+
void checkErrorUR(ur_result_t Result, const char *Function, int Line,
60+
const char *File) {
61+
if (Result == UR_RESULT_SUCCESS) {
62+
return;
63+
}
64+
65+
if (std::getenv("SYCL_PI_SUPPRESS_ERROR_MESSAGE") == nullptr ||
66+
std::getenv("UR_SUPPRESS_ERROR_MESSAGE") == nullptr) {
67+
std::cerr << "\nUR HIP ERROR:"
68+
<< "\n\tValue: " << Result
69+
<< "\n\tFunction: " << Function
70+
<< "\n\tSource Location: " << File << ":" << Line << "\n\n";
71+
}
72+
73+
if (std::getenv("PI_HIP_ABORT") != nullptr ||
74+
std::getenv("UR_HIP_ABORT") != nullptr) {
75+
std::abort();
76+
}
77+
78+
throw Result;
79+
}
80+
81+
hipError_t getHipVersionString(std::string &Version) {
82+
int DriverVersion = 0;
83+
auto Result = hipDriverGetVersion(&DriverVersion);
84+
if (Result != hipSuccess) {
85+
return Result;
86+
}
87+
// The version is returned as (1000 major + 10 minor).
88+
std::stringstream Stream;
89+
Stream << "HIP " << DriverVersion / 1000 << "." << DriverVersion % 1000 / 10;
90+
Version = Stream.str();
91+
return Result;
92+
}
93+
94+
void detail::ur::die(const char *pMessage) {
95+
std::cerr << "ur_die: " << pMessage << '\n';
96+
std::terminate();
97+
}
98+
99+
void detail::ur::assertion(bool Condition, const char *pMessage) {
100+
if (!Condition)
101+
die(pMessage);
102+
}
103+
104+
void detail::ur::hipPrint(const char *pMessage) {
105+
std::cerr << "ur_print: " << pMessage << '\n';
106+
}
107+
108+
// Global variables for UR_RESULT_ADAPTER_SPECIFIC_ERROR
109+
thread_local ur_result_t ErrorMessageCode = UR_RESULT_SUCCESS;
110+
thread_local char ErrorMessage[MaxMessageSize];
111+
112+
// Utility function for setting a message and warning
113+
[[maybe_unused]] void setErrorMessage(const char *pMessage,
114+
ur_result_t ErrorCode) {
115+
assert(strlen(pMessage) < MaxMessageSize);
116+
strncpy(ErrorMessage, pMessage, MaxMessageSize - 1);
117+
ErrorMessageCode = ErrorCode;
118+
}
119+
120+
// Returns plugin specific error and warning messages; common implementation
121+
// that can be shared between adapters
122+
ur_result_t urGetLastResult(ur_platform_handle_t, const char **ppMessage) {
123+
*ppMessage = &ErrorMessage[0];
124+
return ErrorMessageCode;
125+
}

0 commit comments

Comments
 (0)