@@ -36,6 +36,36 @@ std::string promptSimpleMathTask() {
36
36
return data.dump ();
37
37
}
38
38
39
+ std::string promptMatrixMultiplicationTask () {
40
+ int matrixSize;
41
+ std::cout << " Enter matrix size:" << std::endl;
42
+ std::cout << " > " ;
43
+ std::cin >> matrixSize;
44
+
45
+ // Optimized random matrix generation using pre-allocated memory
46
+ std::vector<int > randomNumbers (matrixSize * matrixSize * 2 );
47
+ std::random_device rd;
48
+ std::mt19937 gen (rd ());
49
+ std::uniform_int_distribution<> distrib (0 , 99 );
50
+ std::generate (randomNumbers.begin (), randomNumbers.end (), [&]() { return distrib (gen); });
51
+
52
+ json data = json::array ();
53
+ int index = 0 ;
54
+ for (int i = 0 ; i < 2 ; ++i) {
55
+ json matrixJson = json::array ();
56
+ for (int j = 0 ; j < matrixSize; ++j) {
57
+ json rowJson = json::array ();
58
+ for (int k = 0 ; k < matrixSize; ++k) {
59
+ rowJson.emplace_back (randomNumbers[index++]);
60
+ }
61
+ matrixJson.emplace_back (rowJson);
62
+ }
63
+ data.emplace_back (matrixJson);
64
+ }
65
+
66
+ return data.dump ();
67
+ }
68
+
39
69
40
70
std::string promptMatrixDeterminantTask () {
41
71
int matrixSize, matrixCount;
@@ -46,71 +76,6 @@ std::string promptMatrixDeterminantTask() {
46
76
std::cout << " > " ;
47
77
std::cin >> matrixCount;
48
78
49
- // std::random_device rd;
50
- // std::mt19937 gen(rd());
51
- // std::uniform_int_distribution<> distrib(0, 99);
52
- // const int totalNumbers = matrixSize * matrixSize * matrixCount;
53
- // std::vector<int> randomNumbers;
54
- // randomNumbers.reserve(totalNumbers);
55
- //
56
- // auto begin = std::chrono::steady_clock::now();
57
- // std::cout << "Start generating random numbers " << std::endl;
58
- //
59
- // for (int i = 0; i < totalNumbers; ++i) {
60
- // randomNumbers.push_back(distrib(gen));
61
- // }
62
- //
63
- // auto gen_end = std::chrono::steady_clock::now();
64
- // std::chrono::duration<double> gen_elapsed = gen_end - begin;
65
- // std::cout << "Elapsed time for generating random numbers: " << gen_elapsed.count() << " seconds." << std::endl;
66
- //
67
- // json data = json::array();
68
- // auto fill_begin = std::chrono::steady_clock::now();
69
- // std::cout << "Start filling matrices " << std::endl;
70
- //
71
- // int index = 0;
72
- // for (int i = 0; i < matrixCount; ++i) {
73
- // json matrixJson = json::array();
74
- // for (int j = 0; j < matrixSize; ++j) {
75
- // json rowJson = json::array();
76
- // for (int k = 0; k < matrixSize; ++k) {
77
- // rowJson.emplace_back(randomNumbers[index++]);
78
- // }
79
- // matrixJson.emplace_back(rowJson);
80
- // }
81
- // data.emplace_back(matrixJson);
82
- // }
83
- // auto fill_end = std::chrono::steady_clock::now();
84
- // std::chrono::duration<double> fill_elapsed = fill_end - fill_begin;
85
- // std::cout << "Elapsed time for filling matrices: " << fill_elapsed.count() << " seconds." << std::endl;
86
- //
87
- // auto total_end = std::chrono::steady_clock::now();
88
- // std::chrono::duration<double> total_elapsed = total_end - begin;
89
- // std::cout << "Total elapsed time: " << total_elapsed.count() << " seconds." << std::endl;
90
- // return data.dump();
91
-
92
- // json data = json::array();
93
- // std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
94
- // std::cout << "Start randoming " << std::endl;
95
- // std::random_device rd; // Источник энтропии
96
- // std::mt19937 gen(rd()); // Генератор Mersenne Twister
97
- // std::uniform_int_distribution<> distrib(0, 99); // Распределение от 0 до 99
98
- // for (int i = 0; i < matrixCount; ++i) {
99
- // json matrixJson = json::array();
100
- // for (int j = 0; j < matrixSize; ++j) {
101
- // json rowJson = json::array();
102
- // for (int k = 0; k < matrixSize; ++k) {
103
- // rowJson.emplace_back(distrib(gen));
104
- // }
105
- // matrixJson.emplace_back(rowJson);
106
- // }
107
- // data.emplace_back(matrixJson);
108
- // }
109
- // std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
110
- // std::chrono::duration<double> elapsed = end - begin;
111
- // std::cout << "Elapsed time: " << elapsed.count() << " seconds." << std::endl;
112
- // return data.dump();
113
-
114
79
json data = json::array ();
115
80
std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now ();
116
81
std::cout << " Start randoming " << std::endl;
@@ -130,57 +95,6 @@ std::string promptMatrixDeterminantTask() {
130
95
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now ();
131
96
std::cout << " Time difference = " << std::chrono::duration_cast<std::chrono::seconds>(end - begin).count () << std::endl;
132
97
return data.dump ();
133
-
134
- // std::vector<std::vector<std::vector<int>>> matrices;
135
- //
136
- // std::cout << "Start randoming" << std::endl;
137
- // for (int i = 0; i < matrixCount; i++) {
138
- // std::vector<std::vector<int>> matrix;
139
- // matrix.resize(matrixSize);
140
- // for (int j = 0; j < matrixSize; j++) {
141
- // std::vector<int> row;
142
- // row.resize(matrixSize);
143
- // for (int k = 0; k < matrixSize; k++) {
144
- // row.emplace_back(int(rand() % 100));
145
- // }
146
- // matrix.emplace_back(row);
147
- // }
148
- // matrices.emplace_back(matrix);
149
- // }
150
- // std::cout << "End randoming" << std::endl;
151
- // return data.dump();
152
-
153
- // std::vector<std::vector<std::vector<int>>> matrices;
154
- //
155
- // std::cout << "Start randoming" << std::endl;
156
- // for (int i = 0; i < matrixCount; i++) {
157
- // std::vector<std::vector<int>> matrix;
158
- // matrix.resize(matrixSize);
159
- // for (int j = 0; j < matrixSize; j++) {
160
- // std::vector<int> row;
161
- // row.resize(matrixSize);
162
- // for (int k = 0; k < matrixSize; k++) {
163
- // row.push_back(int(rand() % 100));
164
- // }
165
- // matrix.push_back(row);
166
- // }
167
- // matrices.push_back(matrix);
168
- // }
169
- // std::cout << "End randoming" << std::endl;
170
- //
171
- // json data = json::array();
172
- // for (auto &matrix: matrices) {
173
- // json matrixJson = json::array();
174
- // for (auto &row: matrix) {
175
- // json rowJson = json::array();
176
- // for (int &elem: row) {
177
- // rowJson.push_back(elem);
178
- // }
179
- // matrixJson.push_back(rowJson);
180
- // }
181
- // data.push_back(matrixJson);
182
- // }
183
- // return data.dump();
184
98
}
185
99
186
100
void *receiverThread (void *arg) {
@@ -195,8 +109,8 @@ void *senderThread(void *arg) {
195
109
while (true ) {
196
110
std::cout << " Enter task number:" << std::endl;
197
111
std::cout << " 1 - simple math" << std::endl;
198
- std::cout << " 2 - matrix multiplication " << std::endl;
199
- std::cout << " 3 - bulk simple task " << std::endl;
112
+ std::cout << " 2 - matrix determinant " << std::endl;
113
+ std::cout << " 3 - matrix multiplication " << std::endl;
200
114
std::cout << " 0 - exit console" << std::endl;
201
115
std::cout << " > " ;
202
116
@@ -226,27 +140,31 @@ void *senderThread(void *arg) {
226
140
break ;
227
141
228
142
case 3 :
229
- int t, tasksCount, delay;
230
- std::cout << " Enter tasks count:" << std::endl;
231
- std::cout << " > " ;
232
- std::cin >> tasksCount;
233
- std::cout << " Enter delay between tasks:" << std::endl;
234
- std::cout << " > " ;
235
- std::cin >> delay;
236
- for (t = 0 ; t < tasksCount; t++) {
237
- json data;
238
- data[" a" ] = rand () % 100 ;
239
- data[" b" ] = rand () % 100 ;
240
- int taskId = rand ();
241
- client->sendTask (TaskRequest{std::to_string (taskId), " simpleMath" , data.dump (), cores});
242
- std::cout << " Task " << taskId << " sent" << std::endl;
243
- std::this_thread::sleep_for (std::chrono::milliseconds (delay));
244
- }
245
-
246
- requestParams = promptMatrixDeterminantTask ();
247
- requestFunc = " determinant" ;
143
+ requestParams = promptMatrixMultiplicationTask ();
144
+ requestFunc = " matrixMultiplication" ;
248
145
break ;
249
146
147
+ // int t, tasksCount, delay;
148
+ // std::cout << "Enter tasks count:" << std::endl;
149
+ // std::cout << "> ";
150
+ // std::cin >> tasksCount;
151
+ // std::cout << "Enter delay between tasks:" << std::endl;
152
+ // std::cout << "> ";
153
+ // std::cin >> delay;
154
+ // for (t = 0; t < tasksCount; t++) {
155
+ // json data;
156
+ // data["a"] = rand() % 100;
157
+ // data["b"] = rand() % 100;
158
+ // int taskId = rand();
159
+ // client->sendTask(TaskRequest{std::to_string(taskId), "simpleMath", data.dump(), cores});
160
+ // std::cout << "Task " << taskId << " sent" << std::endl;
161
+ // std::this_thread::sleep_for(std::chrono::milliseconds(delay));
162
+ // }
163
+ //
164
+ // requestParams = promptMatrixDeterminantTask();
165
+ // requestFunc = "determinant";
166
+ // break;
167
+
250
168
case 0 :
251
169
return nullptr ;
252
170
0 commit comments