1 /*
2 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
67 template <typename T>
68 void WorkerDataArray<T>::set_thread_work_item(uint worker_i, size_t value) {
69 assert(_thread_work_items != NULL, "No sub count");
70 _thread_work_items->set(worker_i, value);
71 }
72
73 template <typename T>
74 void WorkerDataArray<T>::add(uint worker_i, T value) {
75 assert(worker_i < _length, "Worker %d is greater than max: %d", worker_i, _length);
76 assert(_data[worker_i] != uninitialized(), "No data to add to for worker %d", worker_i);
77 _data[worker_i] += value;
78 }
79
80 template <typename T>
81 double WorkerDataArray<T>::average(uint active_threads) const {
82 return sum(active_threads) / (double) active_threads;
83 }
84
85 template <typename T>
86 T WorkerDataArray<T>::sum(uint active_threads) const {
87 T s = get(0);
88 for (uint i = 1; i < active_threads; ++i) {
89 s += get(i);
90 }
91 return s;
92 }
93
94 template <typename T>
95 void WorkerDataArray<T>::clear() {
96 set_all(0);
97 }
98
99 template <typename T>
100 void WorkerDataArray<T>::set_all(T value) {
101 for (uint i = 0; i < _length; i++) {
102 _data[i] = value;
103 }
104 }
105
106 template <class T>
107 void WorkerDataArray<T>::print_summary_on(outputStream* out, uint active_threads, bool print_sum) const {
108 T max = get(0);
109 T min = max;
110 T sum = 0;
111 for (uint i = 1; i < active_threads; ++i) {
112 T value = get(i);
113 max = MAX2(max, value);
114 min = MIN2(min, value);
115 sum += value;
116 }
117 T diff = max - min;
118 double avg = sum / (double) active_threads;
119 WDAPrinter::summary(out, title(), min, avg, max, diff, sum, print_sum);
120 }
121
122 template <class T>
123 void WorkerDataArray<T>::print_details_on(outputStream* out, uint active_threads) const {
124 WDAPrinter::details(this, out, active_threads);
125 }
126
127 #ifndef PRODUCT
128 template <typename T>
129 void WorkerDataArray<T>::reset() {
130 set_all(uninitialized());
131 if (_thread_work_items != NULL) {
|
1 /*
2 * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
67 template <typename T>
68 void WorkerDataArray<T>::set_thread_work_item(uint worker_i, size_t value) {
69 assert(_thread_work_items != NULL, "No sub count");
70 _thread_work_items->set(worker_i, value);
71 }
72
73 template <typename T>
74 void WorkerDataArray<T>::add(uint worker_i, T value) {
75 assert(worker_i < _length, "Worker %d is greater than max: %d", worker_i, _length);
76 assert(_data[worker_i] != uninitialized(), "No data to add to for worker %d", worker_i);
77 _data[worker_i] += value;
78 }
79
80 template <typename T>
81 double WorkerDataArray<T>::average(uint active_threads) const {
82 return sum(active_threads) / (double) active_threads;
83 }
84
85 template <typename T>
86 T WorkerDataArray<T>::sum(uint active_threads) const {
87 T s = 0;
88 for (uint i = 0; i < active_threads; ++i) {
89 s += get(i);
90 }
91 return s;
92 }
93
94 template <typename T>
95 void WorkerDataArray<T>::clear() {
96 set_all(0);
97 }
98
99 template <typename T>
100 void WorkerDataArray<T>::set_all(T value) {
101 for (uint i = 0; i < _length; i++) {
102 _data[i] = value;
103 }
104 }
105
106 template <class T>
107 void WorkerDataArray<T>::print_summary_on(outputStream* out, uint active_threads, bool print_sum) const {
108 T max = get(0);
109 T min = max;
110 T sum = 0;
111 for (uint i = 0; i < active_threads; ++i) {
112 T value = get(i);
113 max = MAX2(max, value);
114 min = MIN2(min, value);
115 sum += value;
116 }
117 T diff = max - min;
118 double avg = sum / (double) active_threads;
119 WDAPrinter::summary(out, title(), min, avg, max, diff, sum, print_sum);
120 }
121
122 template <class T>
123 void WorkerDataArray<T>::print_details_on(outputStream* out, uint active_threads) const {
124 WDAPrinter::details(this, out, active_threads);
125 }
126
127 #ifndef PRODUCT
128 template <typename T>
129 void WorkerDataArray<T>::reset() {
130 set_all(uninitialized());
131 if (_thread_work_items != NULL) {
|