|
30 | 30 |
|
31 | 31 | #define UNUSED(x) (void)(x)
|
32 | 32 |
|
33 |
| -#define GGML_CL_MAX_NODES 16384 |
34 |
| - |
35 | 33 | #define CL_CHECK(err) \
|
36 | 34 | do { \
|
37 | 35 | cl_int err_ = (err); \
|
@@ -1066,41 +1064,32 @@ struct ggml_backend_opencl_buffer_context {
|
1066 | 1064 | CL_CHECK(clReleaseMemObject(im));
|
1067 | 1065 | }
|
1068 | 1066 |
|
1069 |
| - delete[] temp_tensor_extras; |
1070 |
| - delete[] temp_tensor_extras_q4_0; |
| 1067 | + for (ggml_tensor_extra_cl * e : temp_tensor_extras) { |
| 1068 | + delete e; |
| 1069 | + } |
| 1070 | + for (ggml_tensor_extra_cl_q4_0 * e : temp_tensor_extras_q4_0) { |
| 1071 | + delete e; |
| 1072 | + } |
1071 | 1073 | }
|
1072 | 1074 |
|
1073 | 1075 | ggml_tensor_extra_cl * ggml_opencl_alloc_temp_tensor_extra() {
|
1074 |
| - if (temp_tensor_extras == nullptr) { |
1075 |
| - temp_tensor_extras = new ggml_tensor_extra_cl[GGML_CL_MAX_NODES]; |
1076 |
| - } |
1077 |
| - |
1078 |
| - size_t alloc_index = temp_tensor_extra_index; |
1079 |
| - temp_tensor_extra_index = (temp_tensor_extra_index + 1) % GGML_CL_MAX_NODES; |
1080 |
| - ggml_tensor_extra_cl * extra = &temp_tensor_extras[alloc_index]; |
| 1076 | + ggml_tensor_extra_cl * extra = new ggml_tensor_extra_cl(); |
1081 | 1077 | extra->reset();
|
| 1078 | + temp_tensor_extras.push_back(extra); |
1082 | 1079 |
|
1083 | 1080 | return extra;
|
1084 | 1081 | }
|
1085 | 1082 |
|
1086 | 1083 | ggml_tensor_extra_cl_q4_0 * ggml_opencl_alloc_temp_tensor_extra_q4_0() {
|
1087 |
| - if (temp_tensor_extras_q4_0 == nullptr) { |
1088 |
| - temp_tensor_extras_q4_0 = new ggml_tensor_extra_cl_q4_0[GGML_CL_MAX_NODES]; |
1089 |
| - } |
1090 |
| - |
1091 |
| - size_t alloc_index = temp_tensor_extra_index_q4_0; |
1092 |
| - temp_tensor_extra_index_q4_0 = (temp_tensor_extra_index_q4_0 + 1) % GGML_CL_MAX_NODES; |
1093 |
| - ggml_tensor_extra_cl_q4_0 * extra = &temp_tensor_extras_q4_0[alloc_index]; |
| 1084 | + ggml_tensor_extra_cl_q4_0 * extra = new ggml_tensor_extra_cl_q4_0(); |
1094 | 1085 | extra->reset();
|
| 1086 | + temp_tensor_extras_q4_0.push_back(extra); |
1095 | 1087 |
|
1096 | 1088 | return extra;
|
1097 | 1089 | }
|
1098 | 1090 |
|
1099 |
| - ggml_tensor_extra_cl * temp_tensor_extras = nullptr; |
1100 |
| - size_t temp_tensor_extra_index = 0; |
1101 |
| - |
1102 |
| - ggml_tensor_extra_cl_q4_0 * temp_tensor_extras_q4_0 = nullptr; |
1103 |
| - size_t temp_tensor_extra_index_q4_0 = 0; |
| 1091 | + std::vector<ggml_tensor_extra_cl *> temp_tensor_extras; |
| 1092 | + std::vector<ggml_tensor_extra_cl_q4_0 *> temp_tensor_extras_q4_0; |
1104 | 1093 |
|
1105 | 1094 | // The buffer_context is initially created by ggml_backend_buft_alloc_buffer
|
1106 | 1095 | // before any tensor is initialized (at the beginning of alloc_tensor_range).
|
|
0 commit comments