Files
paddlepaddle--paddle/paddle/cinn/runtime/cinn_x86_device_impl.cc
T
2026-07-13 12:40:42 +08:00

91 lines
3.0 KiB
C++

// Copyright (c) 2021 CINN Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <stdlib.h>
#include "paddle/cinn/runtime/cinn_runtime.h"
int cinn_x86_malloc(void* context, cinn_buffer_t* buf) {
// ASSERT_NOT_NULL(context)
ASSERT_NOT_NULL(buf)
uint64_t memory_size;
bool need_malloc = false;
if (buf->memory_size > 0 && !buf->memory) {
memory_size = buf->memory_size;
need_malloc = true;
} else {
memory_size = buf->num_elements() * buf->type.bytes();
}
CINN_CHECK(memory_size > 0);
if (buf->memory_size < memory_size || need_malloc) {
if (buf->memory) {
free(buf->memory);
}
if (buf->align == 0) {
buf->memory = (unsigned char*)malloc(memory_size);
} else {
buf->memory = (unsigned char*)aligned_alloc(buf->align, memory_size);
}
buf->memory_size = memory_size;
}
ASSERT_NOT_NULL(buf->memory);
return 0;
}
int cinn_x86_free(void* context, cinn_buffer_t* buf) {
// ASSERT_NOT_NULL(context);
ASSERT_NOT_NULL(buf);
if (buf->memory) {
free(buf->memory);
buf->memory = NULL;
}
return 0;
}
// All the following operations are not support by X86 device, just leave them
// empty.
// @{
int cinn_x86_sync(void* context, cinn_buffer_t* buf) { return 0; }
int cinn_x86_release(void* context) { return 0; }
int cinn_x86_copy_to_host(void* context, cinn_buffer_t* buf) { return 0; }
int cinn_x86_copy_to_device(void* context, cinn_buffer_t* buf) { return 0; }
int cinn_x86_buffer_copy(void* context,
cinn_buffer_t* src,
cinn_buffer_t* dst) {
return 0;
}
// @}
cinn_device_interface_impl_t cinn_x86_device_impl{&cinn_x86_malloc,
&cinn_x86_free,
&cinn_x86_sync,
&cinn_x86_release,
&cinn_x86_copy_to_host,
&cinn_x86_copy_to_device,
&cinn_x86_buffer_copy};
cinn_device_interface_t cinn_x86_device_interface_interface{
&cinn_buffer_malloc,
&cinn_buffer_free,
&cinn_device_sync,
&cinn_device_release,
&cinn_buffer_copy_to_host,
&cinn_buffer_copy_to_device,
&cinn_buffer_copy,
&cinn_x86_device_impl};
struct cinn_device_interface_t* cinn_x86_device_interface() {
return &cinn_x86_device_interface_interface;
}