bool gpu_has_xmx(sycl::device &dev);
-template <int N, class T> void debug_print_array(const std::string & prefix, const T array[N]) {
+template <int N, class T> std::string debug_get_array_str(const std::string & prefix, const T array[N]) {
if (LIKELY(!g_ggml_sycl_debug)) {
- return;
+ return "";
}
std::stringstream ss;
ss << prefix << "=[";
ss << array[N - 1];
}
ss << "]";
- GGML_SYCL_DEBUG("%s", ss.str().c_str());
+ return ss.str();
}
-inline void debug_print_tensor(const std::string & prefix, const ggml_tensor * tensor,
- const std::string & suffix = "") {
- if (LIKELY(!g_ggml_sycl_debug)) {
- return;
- }
- GGML_SYCL_DEBUG("%s=", prefix.c_str());
+inline std::string debug_get_tensor_str(const std::string &prefix,
+ const ggml_tensor *tensor, const std::string &suffix = "") {
+ std::stringstream ss;
+ if (LIKELY(!g_ggml_sycl_debug)) { return ss.str(); }
+ ss << prefix.c_str() << "=";
if (tensor) {
- GGML_SYCL_DEBUG("'%s':type=%s", tensor->name, ggml_type_name(tensor->type));
- debug_print_array<GGML_MAX_DIMS>(";ne", tensor->ne);
- debug_print_array<GGML_MAX_DIMS>(";nb", tensor->nb);
- if (!ggml_is_contiguous(tensor)) {
- GGML_SYCL_DEBUG(";strided");
- }
- if (ggml_is_permuted(tensor)) {
- GGML_SYCL_DEBUG(";permuted");
- }
+ ss << "'" << tensor->name << "':type=" << ggml_type_name(tensor->type);
+ ss << debug_get_array_str<GGML_MAX_DIMS>(";ne", tensor->ne);
+ ss << debug_get_array_str<GGML_MAX_DIMS>(";nb", tensor->nb);
+
+ if (!ggml_is_contiguous(tensor)) { ss << ";strided"; }
+ if (ggml_is_permuted(tensor)) { ss << ";permuted"; }
} else {
- GGML_SYCL_DEBUG("nullptr");
+ ss << "nullptr";
}
- GGML_SYCL_DEBUG("%s", suffix.c_str());
+ ss << suffix;
+ return ss.str();
}
// Use scope_op_debug_print to log operations coming from running a model
return;
}
GGML_SYCL_DEBUG("[SYCL][OP] call %s%s:", func.data(), func_suffix.data());
- debug_print_tensor(" dst", dst);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(" dst", dst).c_str());
if (dst) {
for (std::size_t i = 0; i < num_src; ++i) {
- debug_print_tensor("\tsrc" + std::to_string(i), dst->src[i]);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str("\tsrc" + std::to_string(i), dst->src[i]).c_str());
}
}
GGML_SYCL_DEBUG("%s\n", suffix.data());
ggml_backend_sycl_buffer_init_tensor(ggml_backend_buffer_t buffer,
ggml_tensor *tensor) try {
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": tensor=", tensor, "\n");
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor, "\n").c_str());
ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *)buffer->context;
if (tensor->view_src != NULL) {
const void *data, size_t offset,
size_t size) try {
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": tensor=", tensor);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str());
GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset);
ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
ggml_sycl_set_device(ctx->device);
void *data, size_t offset,
size_t size) try {
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": tensor=", tensor);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str());
GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset);
ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
ggml_tensor *dst) try {
bool is_cpy_supported = ggml_backend_buffer_is_sycl(src->buffer);
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": dst=", dst);
- debug_print_tensor(" src=", src);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": dst", dst).c_str());
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(" src", src).c_str());
GGML_SYCL_DEBUG(" is_cpy_supported=%d\n", is_cpy_supported);
if (is_cpy_supported) {
ggml_backend_sycl_buffer_context * src_ctx = (ggml_backend_sycl_buffer_context *)src->buffer->context;
static void ggml_backend_sycl_buffer_memset_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, uint8_t value,
size_t offset, size_t size) {
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": tensor=", tensor);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str());
GGML_SYCL_DEBUG(" size=%zu offset=%zu value=%u\n", size, offset, value);
ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *) buffer->context;
SYCL_CHECK(ggml_sycl_set_device(ctx->device));
ggml_backend_sycl_split_buffer_init_tensor(ggml_backend_buffer_t buffer,
ggml_tensor *tensor) try {
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": tensor=", tensor, "\n");
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor, "\n").c_str());
GGML_ASSERT(tensor->view_src == nullptr); // views of split tensors are not supported
ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context;
ggml_tensor *tensor, const void *data,
size_t offset, size_t size) try {
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": tensor=", tensor);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str());
GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset);
// split tensors must always be set in their entirety at once
GGML_ASSERT(offset == 0);
const ggml_tensor *tensor, void *data,
size_t offset, size_t size) try {
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": tensor=", tensor);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str());
GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset);
// split tensors must always be set in their entirety at once
GGML_ASSERT(offset == 0);
const void *data, size_t offset,
size_t size) try {
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": tensor=", tensor);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str());
GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset);
ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
void *data, size_t offset,
size_t size) try {
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": tensor=", tensor);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str());
GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset);
ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
bool is_cpy_supported = dst->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) &&
ggml_backend_buffer_is_sycl(src->buffer);
GGML_SYCL_DEBUG("[SYCL] call %s", __func__);
- debug_print_tensor(": dst=", dst);
- debug_print_tensor(" src=", src);
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": dst", dst).c_str());
+ GGML_SYCL_DEBUG("%s", debug_get_tensor_str(" src", src).c_str());
GGML_SYCL_DEBUG(" is_cpy_supported=%d\n", is_cpy_supported);
if (is_cpy_supported) {
/*