| 859 | } |
| 860 | |
| 861 | static std::string generate_kernels() { |
| 862 | std::stringstream src; |
| 863 | src << program_source << '\n'; |
| 864 | src << k_quants_source << '\n'; |
| 865 | for (size_t i = 0; i < dequant_str_values.size(); i += dequant_str_keys.size()) { |
| 866 | std::string dequant_kernel = dequant_template; |
| 867 | std::string dmmv_kernel = dequant_mul_mat_vec_template; |
| 868 | for (size_t j = 0; j < dequant_str_keys.size(); j++) { |
| 869 | replace(dequant_kernel, dequant_str_keys[j], dequant_str_values[i + j]); |
| 870 | replace(dmmv_kernel, dequant_str_keys[j], dequant_mul_mat_vec_str_values[i + j]); |
| 871 | } |
| 872 | src << dequant_kernel << '\n'; |
| 873 | src << dmmv_kernel << '\n'; |
| 874 | } |
| 875 | for (size_t i = 0; i < mul_str_values.size(); i += mul_str_keys.size()) { |
| 876 | std::string mul_kernel = mul_template; |
| 877 | for (size_t j = 0; j < mul_str_keys.size(); j++) { |
| 878 | replace(mul_kernel, mul_str_keys[j], mul_str_values[i + j]); |
| 879 | } |
| 880 | src << mul_kernel << '\n'; |
| 881 | } |
| 882 | |
| 883 | return src.str(); |
| 884 | } |
| 885 | |
| 886 | static cl_platform_id platform; |
| 887 | static cl_device_id device; |
no test coverage detected