mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-11-04 09:32:00 +00:00 
			
		
		
		
	ggml-backend : add device and backend reg interfaces (#9707)
Co-authored-by: Johannes Gäßler <johannesg@5d6.de>
This commit is contained in:
		@@ -1921,6 +1921,7 @@ ggml_backend_buffer_type_t ggml_backend_kompute_buffer_type(int device) {
 | 
			
		||||
        for (const auto & dev : devices) {
 | 
			
		||||
            vec.push_back({
 | 
			
		||||
                /* .iface   = */ ggml_backend_kompute_buffer_type_interface,
 | 
			
		||||
                /* .device  = */ nullptr,
 | 
			
		||||
                /* .context = */ new ggml_backend_kompute_buffer_type_context(dev.index, dev.bufferAlignment, dev.maxAlloc)
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
@@ -1989,11 +1990,8 @@ static struct ggml_backend_i kompute_backend_i = {
 | 
			
		||||
    /* .supports_op             = */ ggml_backend_kompute_supports_op,
 | 
			
		||||
    /* .supports_buft           = */ ggml_backend_kompute_supports_buft,
 | 
			
		||||
    /* .offload_op              = */ NULL,
 | 
			
		||||
    /* .event_new               = */ NULL,
 | 
			
		||||
    /* .event_free              = */ NULL,
 | 
			
		||||
    /* .event_record            = */ NULL,
 | 
			
		||||
    /* .event_wait              = */ NULL,
 | 
			
		||||
    /* .event_synchronize       = */ NULL,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static ggml_guid_t ggml_backend_kompute_guid() {
 | 
			
		||||
@@ -2008,6 +2006,7 @@ ggml_backend_t ggml_backend_kompute_init(int device) {
 | 
			
		||||
    ggml_backend_t kompute_backend = new ggml_backend {
 | 
			
		||||
        /* .guid      = */ ggml_backend_kompute_guid(),
 | 
			
		||||
        /* .interface = */ kompute_backend_i,
 | 
			
		||||
        /* .device    = */ nullptr,
 | 
			
		||||
        /* .context   = */ s_kompute_context,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
@@ -2017,23 +2016,3 @@ ggml_backend_t ggml_backend_kompute_init(int device) {
 | 
			
		||||
bool ggml_backend_is_kompute(ggml_backend_t backend) {
 | 
			
		||||
    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_kompute_guid());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ggml_backend_t ggml_backend_reg_kompute_init(const char * params, void * user_data) {
 | 
			
		||||
    GGML_UNUSED(params);
 | 
			
		||||
    return ggml_backend_kompute_init(intptr_t(user_data));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" int ggml_backend_kompute_reg_devices();
 | 
			
		||||
 | 
			
		||||
int ggml_backend_kompute_reg_devices() {
 | 
			
		||||
    auto devices = ggml_vk_available_devices_internal(0);
 | 
			
		||||
    for (const auto & device : devices) {
 | 
			
		||||
        ggml_backend_register(
 | 
			
		||||
            ggml_kompute_format_name(device.index).c_str(),
 | 
			
		||||
            ggml_backend_reg_kompute_init,
 | 
			
		||||
            ggml_backend_kompute_buffer_type(device.index),
 | 
			
		||||
            reinterpret_cast<void *>(intptr_t(device.index))
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
    return devices.size();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user