Skip to content

Commit e2d59a5

Browse files
cpu: x64 improve memory management safety for multiple objects (#2127)
1 parent 0bcd6ac commit e2d59a5

3 files changed

+20
-19
lines changed

src/cpu/x64/gemm/bf16/jit_avx512_core_gemm_bf16bf16f32_kern.cpp

+2-6
Original file line numberDiff line numberDiff line change
@@ -502,17 +502,13 @@ jit_avx512_core_gemm_bf16bf16f32_kern::jit_avx512_core_gemm_bf16bf16f32_kern(
502502
zmm_tmp0_ = zmm6;
503503
zmm_tmp1_ = zmm3;
504504

505-
bf16_emu_ = nullptr;
506505
if (!bfloat16_ && use_zmm)
507-
bf16_emu_ = new bf16_emulation_t(
506+
bf16_emu_ = utils::make_unique<bf16_emulation_t>(
508507
this, one_, even_, selector_, scratch_, zmm_tmp0_, zmm_tmp1_);
509508
}
510509

511510
jit_avx512_core_gemm_bf16bf16f32_kern::
512-
~jit_avx512_core_gemm_bf16bf16f32_kern() {
513-
delete bf16_emu_;
514-
}
515-
511+
~jit_avx512_core_gemm_bf16bf16f32_kern() {}
516512
} // namespace x64
517513
} // namespace cpu
518514
} // namespace impl

src/cpu/x64/gemm/bf16/jit_avx512_core_gemm_bf16bf16f32_kern.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,15 @@ class jit_avx512_core_gemm_bf16bf16f32_kern : public jit_generator {
9090
arg_coffset_r_;
9191

9292
// For bfloat16 emulation on avx512 and avx512_vnni ISAs
93-
bf16_emulation_t *bf16_emu_;
93+
std::unique_ptr<bf16_emulation_t> bf16_emu_;
9494
Xbyak::Reg64 scratch_;
9595
Xbyak::Zmm one_;
9696
Xbyak::Zmm even_;
9797
Xbyak::Zmm selector_;
9898
Xbyak::Zmm zmm_tmp0_;
9999
Xbyak::Zmm zmm_tmp1_;
100+
101+
DNNL_DISALLOW_COPY_AND_ASSIGN(jit_avx512_core_gemm_bf16bf16f32_kern);
100102
};
101103

102104
} // namespace x64

src/cpu/x64/jit_avx512_core_bf16_dw_conv_kernel.hpp

+15-12
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#ifndef CPU_X64_JIT_AVX512_CORE_BF16_DW_CONV_KERNEL_HPP
1818
#define CPU_X64_JIT_AVX512_CORE_BF16_DW_CONV_KERNEL_HPP
1919

20+
#include <memory>
2021
#include "common/c_types_map.hpp"
2122
#include "common/memory_tracking.hpp"
2223

@@ -133,12 +134,11 @@ struct jit_avx512_dw_conv_bwd_data_kernel_bf16 : public jit_generator {
133134
: jit_generator(jit_name()), jcp(ajcp), bf16_emu_(nullptr) {
134135

135136
if (!isa_has_bf16(jcp.isa))
136-
bf16_emu_ = new bf16_emulation_t(this, bf16_emu_reserv_1,
137-
bf16_emu_reserv_2, bf16_emu_reserv_3, bf16_emu_reserv_4,
138-
bf16_emu_reserv_5, bf16_emu_reserv_6);
137+
bf16_emu_ = utils::make_unique<bf16_emulation_t>(this,
138+
bf16_emu_reserv_1, bf16_emu_reserv_2, bf16_emu_reserv_3,
139+
bf16_emu_reserv_4, bf16_emu_reserv_5, bf16_emu_reserv_6);
139140
}
140-
141-
~jit_avx512_dw_conv_bwd_data_kernel_bf16() { delete bf16_emu_; }
141+
~jit_avx512_dw_conv_bwd_data_kernel_bf16() = default;
142142

143143
jit_conv_conf_t jcp;
144144

@@ -183,7 +183,7 @@ struct jit_avx512_dw_conv_bwd_data_kernel_bf16 : public jit_generator {
183183
Xbyak::Zmm bf16_emu_reserv_5 = Xbyak::Zmm(29);
184184
Xbyak::Zmm bf16_emu_reserv_6 = Xbyak::Zmm(30);
185185

186-
bf16_emulation_t *bf16_emu_;
186+
std::unique_ptr<bf16_emulation_t> bf16_emu_;
187187

188188
inline void ch_loop_body(int ur_ch_blocks, int unroll_w);
189189
inline void unroll_width_body(int ur_ch_blocks);
@@ -200,6 +200,8 @@ struct jit_avx512_dw_conv_bwd_data_kernel_bf16 : public jit_generator {
200200
return utils::one_of(jcp.dst_tag, format_tag::ndhwc, format_tag::nhwc,
201201
format_tag::nwc);
202202
}
203+
204+
DNNL_DISALLOW_COPY_AND_ASSIGN(jit_avx512_dw_conv_bwd_data_kernel_bf16);
203205
};
204206

205207
struct jit_avx512_dw_conv_bwd_weights_kernel_bf16 : public jit_generator {
@@ -210,12 +212,11 @@ struct jit_avx512_dw_conv_bwd_weights_kernel_bf16 : public jit_generator {
210212
: jit_generator(jit_name()), jcp(ajcp), bf16_emu_(nullptr) {
211213

212214
if (!isa_has_bf16(jcp.isa))
213-
bf16_emu_ = new bf16_emulation_t(this, bf16_emu_reserv_1,
214-
bf16_emu_reserv_2, bf16_emu_reserv_3, bf16_emu_reserv_4,
215-
bf16_emu_reserv_5, bf16_emu_reserv_6);
215+
bf16_emu_ = utils::make_unique<bf16_emulation_t>(this,
216+
bf16_emu_reserv_1, bf16_emu_reserv_2, bf16_emu_reserv_3,
217+
bf16_emu_reserv_4, bf16_emu_reserv_5, bf16_emu_reserv_6);
216218
}
217-
218-
~jit_avx512_dw_conv_bwd_weights_kernel_bf16() { delete bf16_emu_; }
219+
~jit_avx512_dw_conv_bwd_weights_kernel_bf16() = default;
219220

220221
jit_conv_conf_t jcp;
221222

@@ -275,7 +276,9 @@ struct jit_avx512_dw_conv_bwd_weights_kernel_bf16 : public jit_generator {
275276
Xbyak::Zmm bf16_emu_reserv_5 = Xbyak::Zmm(29);
276277
Xbyak::Zmm bf16_emu_reserv_6 = Xbyak::Zmm(30);
277278

278-
bf16_emulation_t *bf16_emu_;
279+
std::unique_ptr<bf16_emulation_t> bf16_emu_;
280+
281+
DNNL_DISALLOW_COPY_AND_ASSIGN(jit_avx512_dw_conv_bwd_weights_kernel_bf16)
279282

280283
/* Micro-kernel JIT'ing, fusing 'kw' and 'ow_block' loops into unrolled FMAs
281284
*/

0 commit comments

Comments
 (0)