char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
c9ca51c1f
char/aliceai-t5-moe
1#ifndef UTILS_COMP 2#define UTILS_COMP 3 4// mod and div are expensive and coordinates/dimensions are often power of 2 or equal to 1 5uint fastmod (uint a ,uint b ) { 6if ((b & (b - 1 ))== 0 ) { 7return a & (b - 1 ); 8 } 9return a %b ; 10} 11 12// see init_fastdiv_values in ggml-vulkan.cpp 13uint fastdiv (uint n ,uint mp ,uint L ) { 14uint msbs ,lsbs ; 15// msbs = mulhi(n, mp) 16umulExtended (n ,mp ,msbs ,lsbs ); 17return (msbs + n ) >>L ; 18} 19 20uint fastdiv_L (uint packed ,uint slot ) { 21return (packed >> (slot * 8 ))& 0x3Fu ; 22} 23 24uint fastdiv_small (uint a ,uint b ) { 25return (a < b ) ?0 : (a /b ); 26} 27 28void get_indices (uint idx ,out uint i00 ,out uint i01 ,out uint i02 ,out uint i03 ,uint ne00 ,uint ne01 ,uint ne02 ,uint ne03 ) { 29i03 = fastdiv_small (idx , (ne02 * ne01 * ne00 )); 30const uint i03_offset = i03 * ne02 * ne01 * ne00 ; 31i02 = fastdiv_small ((idx - i03_offset ), (ne01 * ne00 )); 32const uint i02_offset = i02 * ne01 * ne00 ; 33i01 = (idx - i03_offset - i02_offset ) /ne00 ; 34i00 = idx - i03_offset - i02_offset - i01 * ne00 ; 35} 36 37#endif // UTILS_COMP