| 276 | } |
| 277 | |
| 278 | inline float dDequantizeNF4(unsigned char val) { |
| 279 | |
| 280 | // the values for this tree was generated by test_normal_map_tree |
| 281 | // in the file tests/test_functional.py |
| 282 | if ((val & 0b1000) == 8) |
| 283 | if ((val & 0b0100) == 4) // 1 |
| 284 | if ((val & 0b0010) == 2) // 11 |
| 285 | if ((val & 0b0001) == 1) // 111 |
| 286 | return 1.0f; //*1111 |
| 287 | else |
| 288 | return 0.7229568362236023f; //*1110 |
| 289 | else if ((val & 0b0001) == 1) // 110 |
| 290 | return 0.5626170039176941f; //*1101 |
| 291 | else |
| 292 | return 0.44070982933044434f; //*1100 |
| 293 | else if ((val & 0b0010) == 2) // 10 |
| 294 | if ((val & 0b0001) == 1) // 101 |
| 295 | return 0.33791524171829224f; //*1011 |
| 296 | else |
| 297 | return 0.24611230194568634f; //*1010 |
| 298 | else if ((val & 0b0001) == 1) // 100 |
| 299 | return 0.16093020141124725f; //*1001 |
| 300 | else |
| 301 | return 0.07958029955625534f; //*1000 |
| 302 | |
| 303 | else if ((val & 0b0100) == 4) // 0 |
| 304 | if ((val & 0b0010) == 2) // 01 |
| 305 | if ((val & 0b0001) == 1) // 011 |
| 306 | return 0.0f; //*0111 |
| 307 | else |
| 308 | return -0.09105003625154495f; //*0110 |
| 309 | else if ((val & 0b0001) == 1) // 010 |
| 310 | return -0.18477343022823334f; //*0101 |
| 311 | else |
| 312 | return -0.28444138169288635f; //*0100 |
| 313 | else if ((val & 0b0010) == 2) // 00 |
| 314 | if ((val & 0b0001) == 1) // 001 |
| 315 | return -0.39491748809814453f; //*0011 |
| 316 | else |
| 317 | return -0.5250730514526367f; //*0010 |
| 318 | else if ((val & 0b0001) == 1) // 000 |
| 319 | return -0.6961928009986877f; //*0001 |
| 320 | else |
| 321 | return -1.0f; //*0000 |
| 322 | } |
| 323 | |
| 324 | template <typename T> |
| 325 | void dequantizeBlockwise8bitCpu( |
nothing calls this directly
no outgoing calls
no test coverage detected