11#include " source_base/kernels/math_kernel_op.h"
22#include " source_base/module_external/blas_connector.h"
3+ #include " source_base/parallel_reduce.h"
4+ #include " source_base/tool_threading.h"
35
46
57namespace ModuleBase
@@ -23,13 +25,14 @@ struct vector_mul_real_op<T, base_device::DEVICE_CPU>
2325 using Real = typename GetTypeReal<T>::type;
2426 void operator ()(const int dim, T* result, const T* vector, const Real constant)
2527 {
26- #ifdef _OPENMP
27- #pragma omp parallel for schedule(static, 4096 / sizeof(Real))
28- #endif
29- for (int i = 0 ; i < dim; i++)
30- {
31- result[i] = vector[i] * constant;
32- }
28+ ModuleBase::OMP_PARALLEL ([&](int num_thread, int thread_id) {
29+ int beg = 0 , len = 0 ;
30+ ModuleBase::BLOCK_TASK_DIST_1D (num_thread, thread_id, dim, (int )(4096 / sizeof (T)), beg, len);
31+ for (int i = beg; i < beg + len; i++)
32+ {
33+ result[i] = vector[i] * constant;
34+ }
35+ });
3336 }
3437};
3538
@@ -41,23 +44,25 @@ struct vector_mul_vector_op<T, base_device::DEVICE_CPU>
4144 {
4245 if (add)
4346 {
44- #ifdef _OPENMP
45- #pragma omp parallel for schedule(static, 4096 / sizeof(Real))
46- #endif
47- for (int i = 0 ; i < dim; i++)
48- {
49- result[i] += vector1[i] * vector2[i];
50- }
47+ ModuleBase::OMP_PARALLEL ([&](int num_thread, int thread_id) {
48+ int beg = 0 , len = 0 ;
49+ ModuleBase::BLOCK_TASK_DIST_1D (num_thread, thread_id, dim, (int )(4096 / sizeof (T)), beg, len);
50+ for (int i = beg; i < beg + len; i++)
51+ {
52+ result[i] += vector1[i] * vector2[i];
53+ }
54+ });
5155 }
5256 else
5357 {
54- #ifdef _OPENMP
55- #pragma omp parallel for schedule(static, 4096 / sizeof(Real))
56- #endif
57- for (int i = 0 ; i < dim; i++)
58- {
59- result[i] = vector1[i] * vector2[i];
60- }
58+ ModuleBase::OMP_PARALLEL ([&](int num_thread, int thread_id) {
59+ int beg = 0 , len = 0 ;
60+ ModuleBase::BLOCK_TASK_DIST_1D (num_thread, thread_id, dim, (int )(4096 / sizeof (T)), beg, len);
61+ for (int i = beg; i < beg + len; i++)
62+ {
63+ result[i] = vector1[i] * vector2[i];
64+ }
65+ });
6166 }
6267 }
6368};
@@ -68,13 +73,14 @@ struct vector_div_constant_op<T, base_device::DEVICE_CPU>
6873 using Real = typename GetTypeReal<T>::type;
6974 void operator ()(const int & dim, T* result, const T* vector, const Real constant)
7075 {
71- #ifdef _OPENMP
72- #pragma omp parallel for schedule(static, 4096 / sizeof(Real))
73- #endif
74- for (int i = 0 ; i < dim; i++)
75- {
76- result[i] = vector[i] / constant;
77- }
76+ ModuleBase::OMP_PARALLEL ([&](int num_thread, int thread_id) {
77+ int beg = 0 , len = 0 ;
78+ ModuleBase::BLOCK_TASK_DIST_1D (num_thread, thread_id, dim, (int )(4096 / sizeof (T)), beg, len);
79+ for (int i = beg; i < beg + len; i++)
80+ {
81+ result[i] = vector[i] / constant;
82+ }
83+ });
7884 }
7985};
8086
@@ -84,13 +90,14 @@ struct vector_div_vector_op<T, base_device::DEVICE_CPU>
8490 using Real = typename GetTypeReal<T>::type;
8591 void operator ()(const int & dim, T* result, const T* vector1, const Real* vector2)
8692 {
87- #ifdef _OPENMP
88- #pragma omp parallel for schedule(static, 4096 / sizeof(Real))
89- #endif
90- for (int i = 0 ; i < dim; i++)
91- {
92- result[i] = vector1[i] / vector2[i];
93- }
93+ ModuleBase::OMP_PARALLEL ([&](int num_thread, int thread_id) {
94+ int beg = 0 , len = 0 ;
95+ ModuleBase::BLOCK_TASK_DIST_1D (num_thread, thread_id, dim, (int )(4096 / sizeof (T)), beg, len);
96+ for (int i = beg; i < beg + len; i++)
97+ {
98+ result[i] = vector1[i] / vector2[i];
99+ }
100+ });
94101 }
95102};
96103
@@ -120,13 +127,14 @@ struct vector_add_vector_op<T, base_device::DEVICE_CPU>
120127 const T* vector2,
121128 const Real constant2)
122129 {
123- #ifdef _OPENMP
124- #pragma omp parallel for schedule(static, 8192 / sizeof(T))
125- #endif
126- for (int i = 0 ; i < dim; i++)
127- {
128- result[i] = vector1[i] * constant1 + vector2[i] * constant2;
129- }
130+ ModuleBase::OMP_PARALLEL ([&](int num_thread, int thread_id) {
131+ int beg = 0 , len = 0 ;
132+ ModuleBase::BLOCK_TASK_DIST_1D (num_thread, thread_id, dim, (int )(4096 / sizeof (T)), beg, len);
133+ for (int i = beg; i < beg + len; i++)
134+ {
135+ result[i] = vector1[i] * constant1 + vector2[i] * constant2;
136+ }
137+ });
130138 }
131139};
132140
0 commit comments