← Back to C-Kernel-Engine Docs Doxygen Source Documentation
 
Loading...
Searching...
No Matches
logit_kernels.c
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2
3#include "ckernel_engine.h"
4#include "bf16_utils.h"
5
6#include <math.h>
7#include <stddef.h>
8
9void final_logit_scale_f32(float *logits,
10 int tokens,
11 int vocab_size,
12 float scale)
13{
14 if (!logits || tokens <= 0 || vocab_size <= 0) {
15 return;
16 }
17
18 const size_t total = (size_t) tokens * (size_t) vocab_size;
19 for (size_t i = 0; i < total; ++i) {
20 logits[i] *= scale;
21 }
22}
23
25 int tokens,
26 int vocab_size,
27 float scale)
28{
29 if (!logits || tokens <= 0 || vocab_size <= 0) {
30 return;
31 }
32
33 const size_t total = (size_t)tokens * (size_t)vocab_size;
34 for (size_t i = 0; i < total; ++i) {
35 const float value = bf16_to_float(float_to_bf16(logits[i]));
36 logits[i] = bf16_to_float(float_to_bf16(value * scale));
37 }
38}
39
41 int tokens,
42 int vocab_size,
43 float cap)
44{
45 if (!logits || tokens <= 0 || vocab_size <= 0 || cap <= 0.0f) {
46 return;
47 }
48
49 const size_t total = (size_t)tokens * (size_t)vocab_size;
50 for (size_t i = 0; i < total; ++i) {
51 const float value = bf16_to_float(float_to_bf16(logits[i]));
52 const float divided = bf16_to_float(float_to_bf16(value / cap));
53 const float activated = bf16_to_float(float_to_bf16(tanhf(divided)));
54 logits[i] = bf16_to_float(float_to_bf16(activated * cap));
55 }
56}
static uint16_t float_to_bf16(float f)
Definition bf16_utils.h:90
static float bf16_to_float(uint16_t v)
Definition bf16_utils.h:38
void final_logit_scale_muse_pytorch_bf16_storage(float *logits, int tokens, int vocab_size, float scale)
void final_logit_softcap_muse_pytorch_bf16_storage(float *logits, int tokens, int vocab_size, float cap)
void final_logit_scale_f32(float *logits, int tokens, int vocab_size, float scale)
int vocab_size
Definition true_bpe.h:197