Commit a2c942dcf for llama.cpp
commit a2c942dcfeef6aea0863c63999cdbe27149d3078
Author: Raul Torres <138264735+rauletorresc@users.noreply.github.com>
Date: Tue Nov 10 07:42:58 2026 +0000
cann: fail early when checking if buffer type is supported (#31270)
diff --git a/ggml/src/ggml-cann/ggml-cann.cpp b/ggml/src/ggml-cann/ggml-cann.cpp
index fd2c80bd6..8dc8759aa 100644
--- a/ggml/src/ggml-cann/ggml-cann.cpp
+++ b/ggml/src/ggml-cann/ggml-cann.cpp
@@ -1398,34 +1398,35 @@ static void ggml_backend_cann_buffer_get_tensor(ggml_backend_buffer_t buffer,
static bool ggml_backend_cann_buffer_cpy_tensor(ggml_backend_buffer_t buffer,
const ggml_tensor * src,
ggml_tensor * dst) {
- if (ggml_backend_buft_is_cann(src->buffer->buft)) {
- ggml_backend_cann_buffer_context * src_ctx = (ggml_backend_cann_buffer_context *) src->buffer->context;
- ggml_backend_cann_buffer_context * dst_ctx = (ggml_backend_cann_buffer_context *) buffer->context;
+ if (!ggml_backend_buft_is_cann(src->buffer->buft)) {
+ return false;
+ }
- size_t memcpy_size = ggml_nbytes(src);
- // Same device.
- if (src_ctx->device == dst_ctx->device) {
- ACL_CHECK(aclrtMemcpy((char *) dst->data, memcpy_size, (const char *) src->data, memcpy_size,
- ACL_MEMCPY_DEVICE_TO_DEVICE));
- return true;
- } else {
+ ggml_backend_cann_buffer_context * src_ctx = (ggml_backend_cann_buffer_context *) src->buffer->context;
+ ggml_backend_cann_buffer_context * dst_ctx = (ggml_backend_cann_buffer_context *) buffer->context;
+
+ size_t memcpy_size = ggml_nbytes(src);
+ // Same device.
+ if (src_ctx->device == dst_ctx->device) {
+ ACL_CHECK(aclrtMemcpy((char *) dst->data, memcpy_size, (const char *) src->data, memcpy_size,
+ ACL_MEMCPY_DEVICE_TO_DEVICE));
+ return true;
+ } else {
#ifdef ASCEND_310P
- // TODO: Support 310p P2P copy
- return false;
+ // TODO: Support 310p P2P copy
+ return false;
#endif
- // Different device but can access by peer.
- int32_t canAccessPeer = 0;
- ACL_CHECK(aclrtDeviceCanAccessPeer(&canAccessPeer, src_ctx->device, dst_ctx->device));
- if (canAccessPeer) {
- ggml_cann_set_device(src_ctx->device);
- ACL_CHECK(aclrtDeviceEnablePeerAccess(dst_ctx->device, 0));
- ACL_CHECK(aclrtMemcpy((char *) dst->data, memcpy_size, (const char *) src->data, memcpy_size,
- ACL_MEMCPY_DEVICE_TO_DEVICE));
- return true;
- }
+ // Different device but can access by peer.
+ int32_t canAccessPeer = 0;
+ ACL_CHECK(aclrtDeviceCanAccessPeer(&canAccessPeer, src_ctx->device, dst_ctx->device));
+ if (canAccessPeer) {
+ ggml_cann_set_device(src_ctx->device);
+ ACL_CHECK(aclrtDeviceEnablePeerAccess(dst_ctx->device, 0));
+ ACL_CHECK(aclrtMemcpy((char *) dst->data, memcpy_size, (const char *) src->data, memcpy_size,
+ ACL_MEMCPY_DEVICE_TO_DEVICE));
+ return true;
}
}
- return false;
}
/**
@@ -2864,12 +2865,13 @@ static ggml_backend_t ggml_backend_cann_device_init(ggml_backend_dev_t dev, cons
* otherwise false.
*/
static bool ggml_backend_cann_supports_buft(ggml_backend_dev_t dev, ggml_backend_buffer_type_t buft) {
- if (ggml_backend_buft_is_cann(buft)) {
- ggml_backend_cann_device_context * dev_ctx = (ggml_backend_cann_device_context *) dev->context;
- ggml_backend_cann_buffer_type_context * buft_ctx = (ggml_backend_cann_buffer_type_context *) buft->context;
- return buft_ctx->device == dev_ctx->device;
+ if (!ggml_backend_buft_is_cann(buft)) {
+ return false;
}
- return false;
+
+ ggml_backend_cann_device_context * dev_ctx = (ggml_backend_cann_device_context *) dev->context;
+ ggml_backend_cann_buffer_type_context * buft_ctx = (ggml_backend_cann_buffer_type_context *) buft->context;
+ return buft_ctx->device == dev_ctx->device;
}
static ggml_backend_buffer_type_t ggml_backend_cann_device_get_buffer_type(ggml_backend_dev_t dev) {