| 1007 | } |
| 1008 | |
| 1009 | ClKernelLibrary::ClProgramInfo ClKernelLibrary::program(const std::string &program_name) const |
| 1010 | { |
| 1011 | #ifdef EMBEDDED_KERNELS |
| 1012 | #ifdef ARM_COMPUTE_COMPRESSED_KERNELS |
| 1013 | const auto inflatted_program_source_it = _decompressed_source_map.find(program_name); |
| 1014 | if (inflatted_program_source_it != _decompressed_source_map.end()) |
| 1015 | { |
| 1016 | return ClProgramInfo{inflatted_program_source_it->second, false}; |
| 1017 | } |
| 1018 | #endif /* ARM_COMPUTE_COMPRESSED_KERNELS */ |
| 1019 | |
| 1020 | const auto program_source_it = _program_source_map.find(program_name); |
| 1021 | if (program_source_it == _program_source_map.end()) |
| 1022 | { |
| 1023 | ARM_COMPUTE_ERROR_VAR("Embedded program for %s does not exist.", program_name.c_str()); |
| 1024 | } |
| 1025 | std::string program_source = program_source_it->second; |
| 1026 | |
| 1027 | #ifdef ARM_COMPUTE_COMPRESSED_KERNELS |
| 1028 | std::string decompressed_program_source = decompress_zlib(decode_base64(program_source_it->second)); |
| 1029 | ARM_COMPUTE_ERROR_ON_MSG(decompressed_program_source.empty(), "Cannot de-compress requested program"); |
| 1030 | _decompressed_source_map.insert(std::make_pair(program_name, decompressed_program_source)); |
| 1031 | program_source = std::move(decompressed_program_source); |
| 1032 | #endif /* ARM_COMPUTE_COMPRESSED_KERNELS */ |
| 1033 | |
| 1034 | return ClProgramInfo{program_source, false}; |
| 1035 | #else /* EMBEDDED_KERNELS */ |
| 1036 | // Check for binary |
| 1037 | std::string source_name = _kernel_path + program_name; |
| 1038 | std::string binary_name = source_name + "bin"; |
| 1039 | std::string program_source{}; |
| 1040 | bool is_binary = false; |
| 1041 | |
| 1042 | if (std::ifstream(binary_name).is_open()) |
| 1043 | { |
| 1044 | program_source = read_file(binary_name, true); |
| 1045 | is_binary = true; |
| 1046 | } |
| 1047 | else if (std::ifstream(source_name).is_open()) |
| 1048 | { |
| 1049 | program_source = read_file(source_name, false); |
| 1050 | } |
| 1051 | else |
| 1052 | { |
| 1053 | ARM_COMPUTE_ERROR_VAR("Kernel file %s does not exist.", source_name.c_str()); |
| 1054 | } |
| 1055 | |
| 1056 | return ClProgramInfo{program_source, is_binary}; |
| 1057 | #endif /* EMBEDDED_KERNELS */ |
| 1058 | } |
| 1059 | } // namespace opencl |
| 1060 | } // namespace arm_compute |
no test coverage detected