37 std::ifstream cache_file(filename, std::ios::binary);
38 if (cache_file.is_open())
45 while (!cache_file.eof())
48 size_t binary_len = 0;
49 cache_file.read(
reinterpret_cast<char *
>(&name_len),
sizeof(
size_t));
50 cache_file.read(
reinterpret_cast<char *
>(&binary_len),
sizeof(
size_t));
51 if (name_len == 0 || binary_len == 0)
55 std::vector<char> tmp(name_len);
56 std::vector<unsigned char> binary(binary_len);
58 cache_file.read(tmp.data(), name_len);
59 name.assign(tmp.data(), name_len);
60 tmp.resize(binary_len);
61 cache_file.read(
reinterpret_cast<char *
>(binary.data()), binary_len);
63 cl::Program::Binaries binaries{binary};
64 std::vector<cl::Device> devices =
context.getInfo<CL_CONTEXT_DEVICES>();
65 cl::Program program(
context, devices, binaries);
77 std::ofstream cache_file(filename, std::ios::binary);
78 if (cache_file.is_open())
82 std::vector<std::vector<unsigned char>> binaries = it.second.getInfo<CL_PROGRAM_BINARIES>();
86 size_t binary_size = binaries[0].size();
87 cache_file.write(
reinterpret_cast<char *
>(&kernel_name_size),
sizeof(
size_t));
88 cache_file.write(
reinterpret_cast<char *
>(&binary_size),
sizeof(
size_t));
89 cache_file.write(
kernel_name.c_str(), kernel_name_size);
90 cache_file.write(
reinterpret_cast<const char *
>(binaries[0].data()), binaries[0].size());