char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
225088ea7
char/aliceai-t5-moe
1// 2// MIT license 3// Copyright (C) 2025 Intel Corporation 4// SPDX-License-Identifier: MIT 5// 6 7// 8// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 9// See https://llvm.org/LICENSE.txt for license information. 10// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 11// 12 13#ifndef GGML_SYCL_CONVERT_HPP 14#define GGML_SYCL_CONVERT_HPP 15 16#include "common.hpp" 17 18template < typename T > 19using to_t_sycl_t = void (* )(const void * __restrict__x ,T * __restrict__y ,int64_t k , dpct::queue_ptr stream ); 20typedef to_t_sycl_t < float > to_fp32_sycl_t ; 21typedef to_t_sycl_t < sycl::half > to_fp16_sycl_t ; 22 23to_fp16_sycl_t ggml_get_to_fp16_sycl (ggml_type type ,ggml_tensor * dst ); 24to_fp32_sycl_t ggml_get_to_fp32_sycl (ggml_type type ,ggml_tensor * dst ); 25 26#ifdef GGML_SYCL_HAS_BF16 27typedef to_t_sycl_t < sycl::ext::oneapi::bfloat16 > to_bf16_sycl_t ; 28to_bf16_sycl_t ggml_get_to_bf16_sycl (ggml_type type ,ggml_tensor * dst ); 29#endif 30 31// Nc = Non-contiguous 32template < typename T > 33using to_t_nc_sycl_t = void (* )(const void * x ,T * y ,int64_t ne00 ,int64_t ne01 ,int64_t ne02 ,int64_t ne03 , 34int64_t s01 ,int64_t s02 ,int64_t s03 , dpct::queue_ptr queue ); 35 36typedef to_t_nc_sycl_t < sycl::half > to_fp16_nc_sycl_t ; 37to_fp16_nc_sycl_t ggml_get_to_fp16_nc_sycl (ggml_type type ); 38 39template < typename dst_t ,typename src_t > 40inline dst_t ggml_sycl_cast (src_t x ) { 41if constexpr (std::is_same_v < dst_t ,src_t > ) { 42return x ; 43#ifdef GGML_SYCL_HAS_BF16 44} else if constexpr (std:: is_same_v < dst_t , sycl::ext::oneapi:: bfloat16 > ) { 45return sycl::ext::oneapi:: bfloat16 ( float ( x )); 46} else if constexpr (std:: is_same_v < src_t , sycl::ext::oneapi:: bfloat16 > ) { 47return static_cast < float > ( x ); 48#endif 49} else if constexpr (std:: is_same_v < src_t , sycl:: float2 > && std:: is_same_v < dst_t , sycl:: half2 > ) { 50return x .template convert < sycl:: half , sycl::rounding_mode:: rte > (); 51#ifdef GGML_SYCL_HAS_BF16 52} else if constexpr (std:: is_same_v < src_t , sycl:: float2 > && 53std:: is_same_v < dst_t , sycl:: vec < sycl::ext::oneapi:: bfloat16 , 2 >> ) { 54return { x . x , x . y }; 55#endif 56} else if constexpr(std:: is_same_v < dst_t , int32_t > ) { 57return int32_t ( x ); 58} else { 59return float ( x ); 60} 61} 62 63 64#endif // GGML_SYCL_CONVERT_HPP