powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Особенности многопоточности виндовса и линукса, AMD и Intel
116 сообщений из 116, показаны все 5 страниц
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39798188
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запушил трассировщик CardRaytracer распаралелленный на акторах.

Исходники
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39798533
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смержил. Вечером потещу.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799037
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затестил. Пока результат .. не очень. Складывается ощущение что где-то идет жесткая конкуренция
между вычислительными потоками. Приложение в 1 поток отработало быстрее чем многопоточные кейсы.

Я слегка изменил скриптик добавив 3-й опциональный параметр от 1.. до 12
Код: sql
1.
2.
3.
4.
5.
6.
7.
#!/bin/bash -v

for i in {1..12}
do
   echo "Start with $i thread(s)"
   time ./card-raytracer-cpp-mt.exe $i.ppm $i
done



Щас приаттачу лог и цифирки.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
#!/bin/bash -v

for i in {1..12}
do
   echo "Start with $i thread(s)"
   time ./card-raytracer-cpp-mt.exe $i.ppm $i
done
Start with 1 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 1 threads to file 1.ppm ...
Init end: 36 msec

------- STAT -------
thread_max     1
parallel_run   1
thread_create  1
thread_wake_up 1
try_wake_up    243
msg_create     262144
actor_create   3
actor_get      0
actor_find     4
actor_not_run  0
cache_found    2
cache_bad      0
cache_full     524529
resource_lock  1
msg_send       786432
msg_send/sec   79889

Time: 9844 msec

real	0m9.851s
user	0m9.868s
sys	0m0.016s
Start with 2 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 2 threads to file 2.ppm ...
Init end: 53 msec

------- STAT -------
thread_max     2
parallel_run   2
thread_create  2
thread_wake_up 2
try_wake_up    49
msg_create     262144
actor_create   3
actor_get      0
actor_find     8
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     262195
resource_lock  2
msg_send       786432
msg_send/sec   40544

Time: 19397 msec

real	0m19.403s
user	0m20.665s
sys	0m13.215s
Start with 3 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 3 threads to file 3.ppm ...
Init end: 69 msec

------- STAT -------
thread_max     5
parallel_run   4
thread_create  5
thread_wake_up 3
try_wake_up    172
msg_create     262144
actor_create   3
actor_get      0
actor_find     14
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     262601
resource_lock  3
msg_send       786432
msg_send/sec   44193

Time: 17795 msec

real	0m17.801s
user	0m21.843s
sys	0m23.147s
Start with 4 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 4 threads to file 4.ppm ...
Init end: 70 msec

------- STAT -------
thread_max     5
parallel_run   4
thread_create  5
thread_wake_up 4
try_wake_up    113
msg_create     262144
actor_create   3
actor_get      0
actor_find     15
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     262299
resource_lock  4
msg_send       786432
msg_send/sec   38652

Time: 20346 msec

real	0m20.352s
user	0m26.864s
sys	0m43.069s
Start with 5 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 5 threads to file 5.ppm ...
Init end: 67 msec

------- STAT -------
thread_max     6
parallel_run   5
thread_create  6
thread_wake_up 5
try_wake_up    206
msg_create     262144
actor_create   3
actor_get      0
actor_find     18
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     263025
resource_lock  5
msg_send       786432
msg_send/sec   28075

Time: 28011 msec

real	0m28.016s
user	0m34.124s
sys	1m26.774s
Start with 6 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 6 threads to file 6.ppm ...
Init end: 68 msec

------- STAT -------
thread_max     7
parallel_run   6
thread_create  7
thread_wake_up 6
try_wake_up    201
msg_create     262144
actor_create   3
actor_get      0
actor_find     21
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     262507
resource_lock  6
msg_send       786432
msg_send/sec   26394

Time: 29795 msec

real	0m29.801s
user	0m37.429s
sys	1m59.716s
Start with 7 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 7 threads to file 7.ppm ...
Init end: 53 msec

------- STAT -------
thread_max     8
parallel_run   7
thread_create  8
thread_wake_up 7
try_wake_up    167
msg_create     262144
actor_create   3
actor_get      0
actor_find     24
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     262445
resource_lock  7
msg_send       786432
msg_send/sec   26198

Time: 30018 msec

real	0m30.025s
user	0m39.843s
sys	2m27.361s
Start with 8 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 8 threads to file 8.ppm ...
Init end: 62 msec

------- STAT -------
thread_max     9
parallel_run   8
thread_create  9
thread_wake_up 8
try_wake_up    312
msg_create     262144
actor_create   3
actor_get      0
actor_find     27
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     263302
resource_lock  8
msg_send       786432
msg_send/sec   26198

Time: 30018 msec

real	0m30.022s
user	0m41.379s
sys	2m53.991s
Start with 9 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 9 threads to file 9.ppm ...
Init end: 62 msec

------- STAT -------
thread_max     10
parallel_run   9
thread_create  10
thread_wake_up 9
try_wake_up    162
msg_create     262144
actor_create   3
actor_get      0
actor_find     29
actor_not_run  0
cache_found    2
cache_bad      0
cache_full     262347
resource_lock  9
msg_send       786432
msg_send/sec   26570

Time: 29598 msec

real	0m29.603s
user	0m42.097s
sys	3m19.522s
Start with 10 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 10 threads to file 10.ppm ...
Init end: 57 msec

------- STAT -------
thread_max     11
parallel_run   10
thread_create  11
thread_wake_up 10
try_wake_up    399
msg_create     262144
actor_create   3
actor_get      0
actor_find     33
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     265511
resource_lock  10
msg_send       786432
msg_send/sec   26454

Time: 29728 msec

real	0m29.734s
user	0m43.622s
sys	3m47.234s
Start with 11 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 11 threads to file 11.ppm ...
Init end: 57 msec

------- STAT -------
thread_max     12
parallel_run   11
thread_create  12
thread_wake_up 11
try_wake_up    351
msg_create     262144
actor_create   3
actor_get      0
actor_find     36
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     263099
resource_lock  11
msg_send       786432
msg_send/sec   26665

Time: 29493 msec

real	0m29.500s
user	0m44.572s
sys	4m12.562s
Start with 12 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 12 threads to file 12.ppm ...
Init end: 65 msec

------- STAT -------
thread_max     13
parallel_run   12
thread_create  13
thread_wake_up 16
try_wake_up    185
msg_create     262144
actor_create   3
actor_get      0
actor_find     46
actor_not_run  0
cache_found    2
cache_bad      0
cache_full     262307
resource_lock  15
msg_send       786432
msg_send/sec   26488

Time: 29690 msec

real	0m29.695s
user	0m44.418s
sys	4m42.378s

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799042
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще заметно что рабочие потоки не загружают ядра на 100%. Как будто они где-то простаивают.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799043
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После 6 потоков время не растет. Запирает как будто есть какой-то ограничитель.
И вообще .. должно не расти а уменьшаться.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799044
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скрин где видно простой процессоров на 10 потоках.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799136
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЗатестил. Пока результат .. не очень. Складывается ощущение что где-то идет жесткая конкуренция
между вычислительными потоками. Приложение в 1 поток отработало быстрее чем многопоточные кейсы.

Я слегка изменил скриптик добавив 3-й опциональный параметр от 1.. до 12
Код: sql
1.
2.
3.
4.
5.
6.
7.
#!/bin/bash -v

for i in {1..12}
do
   echo "Start with $i thread(s)"
   time ./card-raytracer-cpp-mt.exe $i.ppm $i
done



Щас приаттачу лог и цифирки.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
#!/bin/bash -v

for i in {1..12}
do
   echo "Start with $i thread(s)"
   time ./card-raytracer-cpp-mt.exe $i.ppm $i
done
Start with 1 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 1 threads to file 1.ppm ...
Init end: 36 msec

------- STAT -------
thread_max     1
parallel_run   1
thread_create  1
thread_wake_up 1
try_wake_up    243
msg_create     262144
actor_create   3
actor_get      0
actor_find     4
actor_not_run  0
cache_found    2
cache_bad      0
cache_full     524529
resource_lock  1
msg_send       786432
msg_send/sec   79889

Time: 9844 msec

real	0m9.851s
user	0m9.868s
sys	0m0.016s
Start with 2 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 2 threads to file 2.ppm ...
Init end: 53 msec

------- STAT -------
thread_max     2
parallel_run   2
thread_create  2
thread_wake_up 2
try_wake_up    49
msg_create     262144
actor_create   3
actor_get      0
actor_find     8
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     262195
resource_lock  2
msg_send       786432
msg_send/sec   40544

Time: 19397 msec

real	0m19.403s
user	0m20.665s
sys	0m13.215s
Start with 3 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 3 threads to file 3.ppm ...
Init end: 69 msec

------- STAT -------
thread_max     5
parallel_run   4
thread_create  5
thread_wake_up 3
try_wake_up    172
msg_create     262144
actor_create   3
actor_get      0
actor_find     14
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     262601
resource_lock  3
msg_send       786432
msg_send/sec   44193

Time: 17795 msec

real	0m17.801s
user	0m21.843s
sys	0m23.147s
Start with 4 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 4 threads to file 4.ppm ...
Init end: 70 msec

------- STAT -------
thread_max     5
parallel_run   4
thread_create  5
thread_wake_up 4
try_wake_up    113
msg_create     262144
actor_create   3
actor_get      0
actor_find     15
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     262299
resource_lock  4
msg_send       786432
msg_send/sec   38652

Time: 20346 msec

real	0m20.352s
user	0m26.864s
sys	0m43.069s
Start with 5 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 5 threads to file 5.ppm ...
Init end: 67 msec

------- STAT -------
thread_max     6
parallel_run   5
thread_create  6
thread_wake_up 5
try_wake_up    206
msg_create     262144
actor_create   3
actor_get      0
actor_find     18
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     263025
resource_lock  5
msg_send       786432
msg_send/sec   28075

Time: 28011 msec

real	0m28.016s
user	0m34.124s
sys	1m26.774s
Start with 6 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 6 threads to file 6.ppm ...
Init end: 68 msec

------- STAT -------
thread_max     7
parallel_run   6
thread_create  7
thread_wake_up 6
try_wake_up    201
msg_create     262144
actor_create   3
actor_get      0
actor_find     21
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     262507
resource_lock  6
msg_send       786432
msg_send/sec   26394

Time: 29795 msec

real	0m29.801s
user	0m37.429s
sys	1m59.716s
Start with 7 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 7 threads to file 7.ppm ...
Init end: 53 msec

------- STAT -------
thread_max     8
parallel_run   7
thread_create  8
thread_wake_up 7
try_wake_up    167
msg_create     262144
actor_create   3
actor_get      0
actor_find     24
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     262445
resource_lock  7
msg_send       786432
msg_send/sec   26198

Time: 30018 msec

real	0m30.025s
user	0m39.843s
sys	2m27.361s
Start with 8 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 8 threads to file 8.ppm ...
Init end: 62 msec

------- STAT -------
thread_max     9
parallel_run   8
thread_create  9
thread_wake_up 8
try_wake_up    312
msg_create     262144
actor_create   3
actor_get      0
actor_find     27
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     263302
resource_lock  8
msg_send       786432
msg_send/sec   26198

Time: 30018 msec

real	0m30.022s
user	0m41.379s
sys	2m53.991s
Start with 9 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 9 threads to file 9.ppm ...
Init end: 62 msec

------- STAT -------
thread_max     10
parallel_run   9
thread_create  10
thread_wake_up 9
try_wake_up    162
msg_create     262144
actor_create   3
actor_get      0
actor_find     29
actor_not_run  0
cache_found    2
cache_bad      0
cache_full     262347
resource_lock  9
msg_send       786432
msg_send/sec   26570

Time: 29598 msec

real	0m29.603s
user	0m42.097s
sys	3m19.522s
Start with 10 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 10 threads to file 10.ppm ...
Init end: 57 msec

------- STAT -------
thread_max     11
parallel_run   10
thread_create  11
thread_wake_up 10
try_wake_up    399
msg_create     262144
actor_create   3
actor_get      0
actor_find     33
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     265511
resource_lock  10
msg_send       786432
msg_send/sec   26454

Time: 29728 msec

real	0m29.734s
user	0m43.622s
sys	3m47.234s
Start with 11 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 11 threads to file 11.ppm ...
Init end: 57 msec

------- STAT -------
thread_max     12
parallel_run   11
thread_create  12
thread_wake_up 11
try_wake_up    351
msg_create     262144
actor_create   3
actor_get      0
actor_find     36
actor_not_run  0
cache_found    1
cache_bad      0
cache_full     263099
resource_lock  11
msg_send       786432
msg_send/sec   26665

Time: 29493 msec

real	0m29.500s
user	0m44.572s
sys	4m12.562s
Start with 12 thread(s)
compile Apr  9 2019 20:27:37
lite_thread 12 threads to file 12.ppm ...
Init end: 65 msec

------- STAT -------
thread_max     13
parallel_run   12
thread_create  13
thread_wake_up 16
try_wake_up    185
msg_create     262144
actor_create   3
actor_get      0
actor_find     46
actor_not_run  0
cache_found    2
cache_bad      0
cache_full     262307
resource_lock  15
msg_send       786432
msg_send/sec   26488

Time: 29690 msec

real	0m29.695s
user	0m44.418s
sys	4m42.378s


Забыл вывод статистики отключить, запушил, обновись.

Результаты очень странные, свел в таблицу
Потоков Время мс19844219397317795420346528011629795730018830018929598 102972811294931229690
Время должно уменьшаться, а тут наоборот. Запусти еще с ключом 0, это исходный однопоточный код без акторов.
Затестил у себя на i7-3770К 4 ядра + HT
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
C:\Test>card_raytracer.exe 1.ppm 1
C:\Test>card_raytracer.exe 1.ppm 0
compile Apr 10 2019 09:11:59
original code to file 1.ppm ...
Time: 13610 msec

compile Apr 10 2019 09:11:59
lite_thread 1 threads to file 1.ppm ...
Init end: 34 msec
Time: 13741 msec

C:\Test>card_raytracer.exe 1.ppm 2
compile Apr 10 2019 09:11:59
lite_thread 2 threads to file 1.ppm ...
Init end: 36 msec
Time: 6999 msec

C:\Test>card_raytracer.exe 1.ppm 3
compile Apr 10 2019 09:11:59
lite_thread 3 threads to file 1.ppm ...
Init end: 53 msec
Time: 5198 msec

C:\Test>card_raytracer.exe 1.ppm 4
compile Apr 10 2019 09:11:59
lite_thread 4 threads to file 1.ppm ...
Init end: 42 msec
Time: 4146 msec

C:\Test>card_raytracer.exe 1.ppm 5
compile Apr 10 2019 09:11:59
lite_thread 5 threads to file 1.ppm ...
Init end: 55 msec
Time: 3757 msec

C:\Test>card_raytracer.exe 1.ppm 6
compile Apr 10 2019 09:11:59
lite_thread 6 threads to file 1.ppm ...
Init end: 54 msec
Time: 3494 msec

C:\Test>card_raytracer.exe 1.ppm 7
compile Apr 10 2019 09:11:59
lite_thread 7 threads to file 1.ppm ...
Init end: 64 msec
Time: 3192 msec

C:\Test>card_raytracer.exe 1.ppm 8
compile Apr 10 2019 09:11:59
lite_thread 8 threads to file 1.ppm ...
Init end: 63 msec
Time: 3057 msec

Потоков Время мс Ускорение раз0136101137411.0269991.9351982.6441463.3537573.6634943.9731924.3830574.5
i7 6700K 4 ядра без HT
Потоков Время мс Ускорение раз0115301110061.0259811.9343182.7435573.2
Похоже этот тест не очень подходит для замера производительности одного ядра, но очень сильно удивил твой результат, медленнее не должно становиться. Если это косяк моей либы с акторами, то это очень плохо, я не тестил ее на многоядерном линуксе. Сделаю загрузочную флэшку с линуксом, потестю у себя.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799273
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю рендеринг картинки должен подгружать CPU.
В топе с 10-потоками висели ядра загруженные едва-ли на треть.
Где-то они простаивают.

А как отключать твои акторы? Там вроде 1 аргумент в конце только.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799353
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНасколько я понимаю рендеринг картинки должен подгружать CPU.
В топе с 10-потоками висели ядра загруженные едва-ли на треть.
Где-то они простаивают.
Похоже проблема в самодельном мутексе. В линуксе многоядерном я его не запускал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class lite_mutex_t {
	std::atomic_flag af = ATOMIC_FLAG_INIT;

public:
	void lock() noexcept {
		while (af.test_and_set(std::memory_order_acquire)) {
#if defined LT_WIN
			Sleep(0);
#else
			usleep(20);
#endif
		}

	}
}; 


Попробуй цифру 20 на поменьше заменить.
maytonА как отключать твои акторы? Там вроде 1 аргумент в конце только.
Задать 0 потоков
Код: sql
1.
card_raytracer.exe 0.ppm 0
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799369
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно в этом и проблема. Второе. Как фиксить?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799381
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не гадать - заменил для линукса блокировку на std::mutex, обновляйся. Должно заработать.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799393
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, вечерочком. Щас я погружен в Амазоны...
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799595
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понял как ты смотрел нагрузку в разрезе процов. Гугл предложил поставить htop, поставил.

Дал виртуалке 3 ядра (на хосте 4 без HT), htop показывает загрузку 80+% на каждом ядре, суммарно 280%, но общее время чуть меньше однопоточного (10 сек вместо 12). Может это проблема многоядерных виртуалок. Флэшку с линуксом не нашел, на реальном железе потестить не получилось. Жду твой замер.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799597
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799599
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я кстати в пул-реквестах вижу только 1. На удаление статистики. А был ли второй?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799603
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ кстати в пул-реквестах вижу только 1. На удаление статистики. А был ли второй?
Я так понял второй коммит в него же попал. Посмотри, там внутри должен быть коммит про замену на std::mutex

Для проверки я вынес тип блокировки в вывод. Если все нормально, то появится строчка
Код: plaintext
compile Apr 10 2019 17:47:14   LOCK: std::mutex
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799664
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смержил. Смотрю. Пока - хреновенько. Щас покажу фотку с htop.
Судя по вики цветовая маркировка (зеленый - красный) должна означать соотв активность
- потоков пользователя
- потоков ядра
https://ru.wikipedia.org/wiki/Htop

В нашем случае мы слишком много сидим в ядре.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
mayton@mayton-ryzen:~/git/CardRaytracerBenchmark/cpp-mt$ ./make.sh 
#!/bin/bash -v

OPTIONS="-O3 -march=native -pthread -std=c++11"

g++ $OPTIONS card_raytracer.cpp       -o card-raytracer-cpp-mt.exe

mayton@mayton-ryzen:~/git/CardRaytracerBenchmark/cpp-mt$ ./run.sh 
#!/bin/bash -v

time ./card-raytracer-cpp-mt.exe 1.ppm
compile Apr 10 2019 22:51:14   LOCK: std::mutex
lite_thread 12 threads to file 1.ppm ...
Init end: 53 msec
Time: 29553 msec

real	0m29.557s
user	0m43.150s
sys	4m41.349s

mayton@mayton-ryzen:~/git/CardRaytracerBenchmark/cpp-mt$ ./run.sh 
#!/bin/bash -v

time ./card-raytracer-cpp-mt.exe 1.ppm
compile Apr 10 2019 22:51:14   LOCK: std::mutex
lite_thread 12 threads to file 1.ppm ...
Init end: 55 msec
Time: 29554 msec

real	0m29.558s
user	0m44.557s
sys	4m39.494s
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799666
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместе с htop.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799667
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если задать последний аргумент = 0 то вроде получше. 9 секунд. И красный градусник исчезает.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
mayton@mayton-ryzen:~/git/CardRaytracerBenchmark/cpp-mt$ ./run.sh 
#!/bin/bash -v

time ./card-raytracer-cpp-mt.exe 1.ppm 0
compile Apr 10 2019 22:51:14   LOCK: std::mutex
original code to file 1.ppm ...
Time: 9472 msec

real	0m9.475s
user	0m9.473s
sys	0m0.000s



Вобщем если это дело в акторах - то их надо фиксить. Они под линуксами не летают.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799706
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли задать последний аргумент = 0 то вроде получше. 9 секунд. И красный градусник исчезает.
Это оригинальный код без акторов. С акторами в 1 поток близкое время 21857913 , а дальше начинается какая-то хрень ((

maytonВобщем если это дело в акторах - то их надо фиксить. Они под линуксами не летают.
Сегодня сделаю флэшку загрузочную с линуксом, затестю в линуксе.

mayton
Код: sql
1.
2.
3.
4.
5.
6.
original code to file 1.ppm ...
Time: 9472 msec

real	0m9.475s
user	0m9.473s
sys	0m0.000s



Код: sql
1.
2.
3.
4.
5.
6.
lite_thread 12 threads to file 1.ppm ...
Time: 29554 msec

real	0m29.558s
user	0m44.557s
sys	4m39.494s


Если я правильно понимаю, то с акторами 90% времени проходит в режиме ядра, т.е. тратится на синхронизацию потоков.

В прошлый раз 21857731 похожее время было, так что вероятно дело не в usleep()
mayton
Код: sql
1.
2.
3.
4.
5.
Time: 29690 msec

real	0m29.695s
user	0m44.418s
sys	4m42.378s



Есть подозрение на распараллеливающийся актор (расчет одной точки), т.е. несколько однотипных обработчиков с общей очередью. Возможно когда несколько потоков пытаются одновременно из одной очереди получить сообщение, то это получается далеко не с первого раза. При увеличении количества потоков вероятность такой ситуации возрастает. Затем после расчета ситуация повторяется еще раз, т.к. все 12 потоков пишут результат в одну очередь следующего актора, который выводом занимается.

Непонятно почему в виндовсе этой проблемы нет на 8 лог. процах?

Попробую заменить std::mutex на линуксовый мутекс.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799724
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсть подозрение на распараллеливающийся актор (расчет одной точки), т.е. несколько однотипных обработчиков с общей очередью. Возможно когда несколько потоков пытаются одновременно из одной очереди получить сообщение, то это получается далеко не с первого раза. При увеличении количества потоков вероятность такой ситуации возрастает. Затем после расчета ситуация повторяется еще раз, т.к. все 12 потоков пишут результат в одну очередь следующего актора, который выводом занимается.

Непонятно почему в виндовсе этой проблемы нет на 8 лог. процах?

Попробую заменить std::mutex на линуксовый мутекс.привет, ты же вроде делал sleep под виндой? у винды вытесняемая многопоточнось
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799765
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima TЕсть подозрение на распараллеливающийся актор (расчет одной точки), т.е. несколько однотипных обработчиков с общей очередью. Возможно когда несколько потоков пытаются одновременно из одной очереди получить сообщение, то это получается далеко не с первого раза. При увеличении количества потоков вероятность такой ситуации возрастает. Затем после расчета ситуация повторяется еще раз, т.к. все 12 потоков пишут результат в одну очередь следующего актора, который выводом занимается.

Непонятно почему в виндовсе этой проблемы нет на 8 лог. процах?

Попробую заменить std::mutex на линуксовый мутекс.привет, ты же вроде делал sleep под виндой? у винды вытесняемая многопоточнось
Верно, под виндой spinlock + Sleep(0), но вытеснять некуда, т.к. потоков столько же сколько логических процов.
Под виндой работает, тут речь про линукс mayton`а, там тормозит и со spinlock и с std::mutex, осталось попробовать вариант с родным линуксовым мутексом.

Причем тормозит очень сильно, 12 потоков считают втрое дольше чем один. И самое главное там нагрузка на акторы мизерная, т.к. обработка сообщений достаточно тяжелая. Всего 27 тыс. сообщений в секунду при тестовой прокачке в 50 млн./сек.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799774
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПричем тормозит очень сильно, 12 потоков считают втрое дольше чем один. И самое главное там нагрузка на акторы мизерная, т.к. обработка сообщений достаточно тяжелая. Всего 27 тыс. сообщений в секунду при тестовой прокачке в 50 млн./сек.всё логично, сброс кеша как раз раз в 5 убивает производительность памяти
sleep фактически заставлял планировщик работать с памятью только 1-му процу, притормаживая конкурирующие потоки

ну нельзя одну и ту же память долбить одновременно с разных процов :-(
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799858
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tkealon(Ruslan)пропущено...
привет, ты же вроде делал sleep под виндой? у винды вытесняемая многопоточнось
Верно, под виндой spinlock + Sleep(0), но вытеснять некуда, т.к. потоков столько же сколько логических процов.
Под виндой работает, тут речь про линукс mayton`а, там тормозит и со spinlock и с std::mutex, осталось попробовать вариант с родным линуксовым мутексом.

Причем тормозит очень сильно, 12 потоков считают втрое дольше чем один. И самое главное там нагрузка на акторы мизерная, т.к. обработка сообщений достаточно тяжелая. Всего 27 тыс. сообщений в секунду при тестовой прокачке в 50 млн./сек.
Ты что по 1 пикселю на поток считаешь?

Я бил картинку на прямоугольники в пропорции пополам или по золотому сечению (там
вобещем 3 стратегии деления области пополам).
И каждый поток у меня обрабатывал прямоугольник и потом на мьютексе стоял
ожидая когда освободится растр картинки чтобы слить туда результаты.

Это в реализации Java-mt.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799861
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно посмотреть из любопытства как работает OpenMP.
В идеале добавить камент перед циклом и дальше
Код: plaintext
1.
#pragma omp parallel


- всё должно [i]взлететь в шоколаде [/i]. Вобщем как в сказке у Джоан Роулинг.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799917
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima TПричем тормозит очень сильно, 12 потоков считают втрое дольше чем один. И самое главное там нагрузка на акторы мизерная, т.к. обработка сообщений достаточно тяжелая. Всего 27 тыс. сообщений в секунду при тестовой прокачке в 50 млн./сек.всё логично, сброс кеша как раз раз в 5 убивает производительность памяти
sleep фактически заставлял планировщик работать с памятью только 1-му процу, притормаживая конкурирующие потоки

ну нельзя одну и ту же память долбить одновременно с разных процов :-(
Надо для линукса что-то аналогичное виндовому Sleep(0). Но, думаю, и это не панацея когда несколько потоков начинает одновременно ставить блокировку.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799929
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смержил не глядя.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799936
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно что ты не использовал

Код: plaintext
1.
2.
pthread_join( thread1, NULL);
pthread_join( thread2, NULL); 


как в этом примере.

www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

Ты мог резать картинку на 8 частей. 8 прямоугольников размером 256х128. И спокойно запускать 8 позиксных потоков
и потом в конце слить (pthread_join) результат даже не в потоке а в функции main последовательно.

Возможно ты очень сильно хотел погонять свою библиотечку лайтовых акторов?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39799939
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы что по 1 пикселю на поток считаешь?

Я бил картинку на прямоугольники в пропорции пополам или по золотому сечению (там
вобещем 3 стратегии деления области пополам).
И каждый поток у меня обрабатывал прямоугольник и потом на мьютексе стоял
ожидая когда освободится растр картинки чтобы слить туда результаты.

Это в реализации Java-mt.
Да, по одному. Но это не значит что на каждый по потоку, просто есть очередь заданий, которая разгребается N параллельными обработчиками (акторами). Я уже думал увеличить задание, например считать строку за раз, но это неспортивно, акторный фрэйморк отчасти нужен для того чтобы не заморачиваться этим вопросом.

Сделал флэшку загрузочную, затестил в линуксе на своем компеi5-660 2 ядра + HT Ubuntu 18.04.2
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
ubuntu@ubuntu:~/cr/cpp-mt$ time ./card-raytracer-cpp-mt.exe 1.ppm 0
compile Apr 11 2019 06:54:55   LOCK: std::mutex
original code to file 1.ppm ...
Time: 17294 msec

real	0m17.297s
user	0m17.288s
sys	0m0.000s
ubuntu@ubuntu:~/cr/cpp-mt$ time ./card-raytracer-cpp-mt.exe 1.ppm 1
compile Apr 11 2019 06:54:55   LOCK: std::mutex
lite_thread 1 threads to file 1.ppm ...
Init end: 57 msec
Time: 17641 msec

real	0m17.647s
user	0m17.671s
sys	0m0.025s
ubuntu@ubuntu:~/cr/cpp-mt$ time ./card-raytracer-cpp-mt.exe 1.ppm 4
compile Apr 11 2019 06:54:55   LOCK: std::mutex
lite_thread 4 threads to file 1.ppm ...
Init end: 81 msec
Time: 13125 msec

real	0m13.133s
user	0m36.776s
sys	0m13.786s


17 сек в 1 поток, 13 сек - 4 потока. Есть ускорение от акторов. Похоже дело не в линуксе, а в AMD. Как-то по другому в нем распараллеливание работает. Дома есть старенький ноут с AMD процом, потестю на нем вечером.

Запушил обновление с заменой std::mutex на родной pthread_mutex, как время будет - затести на 1 (не 0) поток и 12.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800000
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСтранно что ты не использовал

Код: plaintext
1.
2.
pthread_join( thread1, NULL);
pthread_join( thread2, NULL); 


как в этом примере.

www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

Ты мог резать картинку на 8 частей. 8 прямоугольников размером 256х128. И спокойно запускать 8 позиксных потоков
и потом в конце слить (pthread_join) результат даже не в потоке а в функции main последовательно.

Возможно ты очень сильно хотел погонять свою библиотечку лайтовых акторов?
Можно написать вариант на потоках хотя бы просто для дополнительного теста параллелизма.

Акторы это способ уйти от геморроя многопоточного программирования с явным использованием потоков, блокировок и т.п. Акторы избавляют от явного управления потоками. На акторах не надо заморачиваться с потокобезопасностью доступа к данным.

Твоя схема разбить на N частей неоптимальна, разные пиксели считаются с разной скоростью, т.е. разные блоки обсчитаются за разное время, мы это проходили еще когда я это на C# параллелил.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800012
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все верно. Вообще в мультипоточке при планировании тасок нельзя никогда расчитать точное время
работы потока. Кстати технология fork-join на этом и основана. Мы никогда не спрогнозируем.
Но эвристика деления рекурсивно всего объема задач на неравные чатси (по Паретто или по золотому
сечению) гарантирует что будет N потоков непрерывно заряжены работой. И будет планировщик
который обеспечит деление задачи примерно на не слишком разные части.

Вот к примеру я запускаю в 2 потока

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
time java \
 -server \
 -XX:CompileThreshold=2 \
 -jar target/CardRaytracerMt-1.0.jar \
   --parallelism 2 \
   --segperf     G_RATIO \
   --segstr      AD \
   --segmentsize 2048 \
   --drawseg \
   --filename    out-g-ratio-2048px-2t.bmp



Форк-джойн включен всегда. G_RATIO - это и есть золотое сечение. segmentsize = 2048 - это прямоугольник в пикселах
который будет рекурсивно делится на под-прямоугольники до тех пор пока размер площади не будет меньше 2048.

Я согласен что я потратил какое-то время разработки на стратегии деления растра на сегменты. Но это неизбежно.

Если процессить по 1 пикселу то для классической мультипоточности это слишком мелко. Много времени потратим
на техническое обслуживане потоков.

Или странный эффект который мы наблюдали в Ubuntu 18.x.x/AMD где синхронизация заняла большую часть времени.
Кажется это можно назвать когеррентностью (в части усложнения формулы Амадала).
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800028
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот эта опция --drawseg просто рисует на картинке зеленой пунктирной линией сами сегменты.
Это я для отладки делал. Можно их там по разному менять и смотреть какой будет
эффект.

Результаты пока еще актуальны для Ubuntu 18.x./Core i3 (это мой старый ноут) но скоро я перетещу всё на AMD.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800032
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЗапушил обновление с заменой std::mutex на родной pthread_mutex, как время будет - затести на 1 (не 0) поток и 12.
Я затещу все варианты.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800036
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЯ уже думал увеличить задание, например считать строку за раз, но это неспортивно, акторный фрэйморк отчасти нужен для того чтобы не заморачиваться этим вопросом.
Я не знаю как ты дизайнил этот фреймворк. Но мне кажется что в реальности актор
может делать достаточно объемистый кусок бизнес-действия. Например - сходить
в микросервис и взять какие то данные по url. И это действие полюбому не укладывается
в микросекунды. Тоесть действие достаточно увесистое. Не пиксел посчитать.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800070
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВот эта опция --drawseg просто рисует на картинке зеленой пунктирной линией сами сегменты.
Это я для отладки делал. Можно их там по разному менять и смотреть какой будет
эффект.

Результаты пока еще актуальны для Ubuntu 18.x./Core i3 (это мой старый ноут) но скоро я перетещу всё на AMD.
Запушил вариант с разбивкой на N блоков. Не понял твой хитрый алгоритм деления, можно попробовать его добавить. Пока тупо разделил на равные блоки по N строк. Как и писал - время на блок разное получается, но с другой стороны параллельность полная и чем больше ядер, тем меньше это влияет. Затести на своих 12.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800076
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonВот эта опция --drawseg просто рисует на картинке зеленой пунктирной линией сами сегменты.
Это я для отладки делал. Можно их там по разному менять и смотреть какой будет
эффект.

Результаты пока еще актуальны для Ubuntu 18.x./Core i3 (это мой старый ноут) но скоро я перетещу всё на AMD.
Запушил вариант с разбивкой на N блоков. Не понял твой хитрый алгоритм деления, можно попробовать его добавить. Пока тупо разделил на равные блоки по N строк. Как и писал - время на блок разное получается, но с другой стороны параллельность полная и чем больше ядер, тем меньше это влияет. Затести на своих 12.
Это не суть важно. Можно делить и на равные части. Просто наш рекурсивный трассировщик луча все равно
разные сегменты картинки рендерит с разной скоростью. Тут можно угадывать плюс-минут 500%. Поэтому
не принципиально как.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800102
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TЗапушил обновление с заменой std::mutex на родной pthread_mutex, как время будет - затести на 1 (не 0) поток и 12.
Я затещу все варианты.
Смержил "Добавил распараллеливание расчетом N блоков"
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800105
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется тема этого топика более глубокая. По сути мы сравниваем примитивы синхронизации Windows/Linux.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800108
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНадо для линукса что-то аналогичное виндовому Sleep(0). Но, думаю, и это не панацея когда несколько потоков начинает одновременно ставить блокировку.вообще не панацея, гораздо легче просто не создавать такие мелкие задачи, что бы транспорт не ломился в узкий канал
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800109
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМне кажется тема этого топика более глубокая. По сути мы сравниваем примитивы синхронизации Windows/Linux.
Все верно, я это в названии темы указал в скобках, и вдобавок есть особенности архитектуры Intel и AMD.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800116
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TЯ уже думал увеличить задание, например считать строку за раз, но это неспортивно, акторный фрэйморк отчасти нужен для того чтобы не заморачиваться этим вопросом.
Я не знаю как ты дизайнил этот фреймворк. Но мне кажется что в реальности актор
может делать достаточно объемистый кусок бизнес-действия. Например - сходить
в микросервис и взять какие то данные по url. И это действие полюбому не укладывается
в микросекунды. Тоесть действие достаточно увесистое. Не пиксел посчитать.
Да, в реальности мало задач где можно много что рапараллелить. Тут я взял максимально мелкую сущность, т.е. расчет одного пикселя. Можно безболезненно за раз делать расчет одной строки, тогда нагрузка на акторный фрэймворк резко снизится. Я пробовал считать строками - на моих компах я разницы почти не заметил, всего на пару процентов быстрее. Результат запуска у тебя сильно удивил, нашлось слабое место, надо поразбираться, надо понять почему так.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800125
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima TНадо для линукса что-то аналогичное виндовому Sleep(0). Но, думаю, и это не панацея когда несколько потоков начинает одновременно ставить блокировку.вообще не панацея, гораздо легче просто не создавать такие мелкие задачи, что бы транспорт не ломился в узкий канал
В этой задаче интересно другое. Почему результат такой разный в матрице:
Windows/Linux, Intell/AMD.

Меня сейчас это тоже интересует и я не успокоюсь пока не разберу вместе с Димой на атомы
эту проблему. По всей видимости мультипоточка в Linux - другая. И к ней нужны другие подходы.
Мьютекс - или любой другой примитив завёрнутый в С++ библиотеки - уже сильная надстройка
над примитивами.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800129
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так.

WindowsLinuxIntel Core i5AMD Ryzen 5
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800134
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tmaytonпропущено...

Я не знаю как ты дизайнил этот фреймворк. Но мне кажется что в реальности актор
может делать достаточно объемистый кусок бизнес-действия. Например - сходить
в микросервис и взять какие то данные по url. И это действие полюбому не укладывается
в микросекунды. Тоесть действие достаточно увесистое. Не пиксел посчитать.
Да, в реальности мало задач где можно много что рапараллелить. Тут я взял максимально мелкую сущность, т.е. расчет одного пикселя. Можно безболезненно за раз делать расчет одной строки, тогда нагрузка на акторный фрэймворк резко снизится. Я пробовал считать строками - на моих компах я разницы почти не заметил, всего на пару процентов быстрее. Результат запуска у тебя сильно удивил, нашлось слабое место, надо поразбираться, надо понять почему так.
Давай почитаем про эту штуку https://en.wikipedia.org/wiki/Futex
Подозреваю что для Windows она не очень нужна, но будет нужна
для портирования твоих лайтовых акторов в Юнихи.

Господа. Kealon, MasterZiv, Simargl, тоже буду рад вашим советам.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800137
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Ну а что там разбираться, проц не напрямую лезет в память а сначала загружает её в кэш. С кэшем, который рядом ему работать очень быстро, постепенно сливая его изменения в память. Если в память лезет кто-то другой, кэш надо обновлять.
При постоянной долбёжке памяти выходит, что проц работает с памятью напрямую, только и делая что обновляя кеш. И в этом случае всё фактически упирается в скрость шины данных между памятью и процем.

Следую этому расуждению выходит что либо нужны какие-то схемы что бы разные процы использовали только свои участки памяти, либо сразу делали более весомый участок работ, т.е. выстраивались в очередь как со sleep
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800142
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затестил на ноуте AMD A8-3510MXВиндовс
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
C:\1>card_raytracer.exe 1.ppm
compile Apr 11 2019 18:43:56   LOCK: spinlock + Sleep(0)
lite_thread 4 threads to file 1.ppm ...
Init end: 54 msec
Time: 16729 msec

C:\1>card_raytracer.exe 1.ppm 1
compile Apr 11 2019 18:43:56   LOCK: spinlock + Sleep(0)
lite_thread 1 threads to file 1.ppm ...
Init end: 52 msec
Time: 56392 msec


Убунту 18
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
ubuntu@ubuntu:~/cr/cpp-mt$ time ./card-raytracer-cpp-actor.exe 1.ppm 1
compile Apr 11 2019 15:54:03   LOCK: pthread_mutex
lite_thread 1 threads to file 1.ppm ...
Init end: 105 msec
Time: 59563 msec

real	0m59.577s
user	1m7.302s
sys	0m2.771s
ubuntu@ubuntu:~/cr/cpp-mt$ time ./card-raytracer-cpp-actor.exe 2.ppm
compile Apr 11 2019 15:54:03   LOCK: pthread_mutex
lite_thread 4 threads to file 2.ppm ...
Init end: 111 msec
Time: 54938 msec

real	0m54.947s
user	1m55.390s
sys	1m26.526s


Оказывается в нем 4 полноценных ядра с частотой 1.8-2.5 ГГц, а я его фотки смотреть покупал, он был лучший по цене ))

ОС1 поток4 потокаWin756 392 msec16 729 msecUbuntu 1859 563 msec54 938 msec

ХЗ как трактовать эти интересные цифры. Компиляторы разные, планирование потоков в ОС разное и т.д.

PS Сейчас повторю эксперимент на ноуте с i3
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800146
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima TНадо для линукса что-то аналогичное виндовому Sleep(0). Но, думаю, и это не панацея когда несколько потоков начинает одновременно ставить блокировку.вообще не панацея, гораздо легче просто не создавать такие мелкие задачи, что бы транспорт не ломился в узкий канал
Согласен, но интересно откуда такая гигантская разница? Выше писал 21859825 что укрупнение задачи почти не влияет на скорость на Intel+Win, хотелось бы повторить тенденцию в линуксе, точнее на AMD+Ubuntu.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800164
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TPS Сейчас повторю эксперимент на ноуте с i3
Похожая картина. В линуксе 1 и 4 потока одинаковы по времени, в виндовсе 4 потока вдвое быстрее. Точные цифры не показываю, т.к. с трудом загрузил линукс с флэшки, а оттуда логи не сохранились.

Пока подозреваю что тормоза из-за использования линуксового мутекса, т.к. в винде спинлок.

Я в акторах вижу архитектурную проблему: я добавил многопоточный актор для тех случаев когда у актора нет состояния, т.е. получил на вход сообщение, обсчитал, отправил на выход. По сути это N акторов с общей очередью входящих сообщений. Плюс в том что они извлекают сообщения из общей очереди по мере освобождения, минус в этом же, при одновременном освобождении конкуренция за извлечение сообщения из очереди.

Можно сделать N одинаковых акторов, каждый со своей очередью, но тогда возникает проблема как их равномерно нагрузить 21859728 . Пока вижу что надо как-то организовать обратную связь от исполнителя к заказчику задания. Чтобы не как тут генерить кучу заданий, а потом ждать пока они выполнятся, а чтобы исполнитель как-то оповещал заказчика что он свободен. Заодно частично решается проблема неконтролируемого распухания очередей. Но тут тоже не все тривиально, т.к. если вызывать заказчика по освобождению исполнителя, то заказчик будет скакать с проца на проц для формирования очередного задания.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800165
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавай почитаем про эту штуку https://en.wikipedia.org/wiki/Futex
Надо потестить. Поизучаю.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800173
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Ну а что там разбираться, проц не напрямую лезет в память а сначала загружает её в кэш. С кэшем, который рядом ему работать очень быстро, постепенно сливая его изменения в память. Если в память лезет кто-то другой, кэш надо обновлять.
Для этих целей ввели несколько уровней кэша: кэш ядра, кэш проца. Железяка в итоге одна, т.е. данные между ядрами гоняются через общий кэш, а не через память.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800207
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во первых.

Перетестирую java-mt на количестве потоков от 1 до 12. Разумеется на борту у меня 6 ядер. 12 это гипер-трединг
и как он маппится на вычислительные потоки хз. Тут много уровней абстракций.

(потерянные 500 милисекунд - это время прогрева JVM. Тоесть по сути та дырка между тем
как я в коде замеряю показания таймера и фактически временем пуска java-процесса
с точки зрения операционки. Поэтому elapsed time фактически отличается от времени
которое показывает утилита time)


Я буду в табличке писать фактическое фремя которое намеряла утилтка тайм.

Забавно. Но характер кривой не особо изменился по сравнению с 2х ядерным Intel Core i3.
Наибольший перформанс - был где-то на 5 потоках. Дальше - деградация.

У меня есть мысли как улучшить. Надо соптимизировать работу с коллециями на растровых
операциях. Это финальная фаза где работа идет уже внутри мьютекса. Поэтому рост потоков
не дает пользы.

AMD Ryzen-5/Ubuntu 18.x.x LTS x64
Java-MT
Threads Elapsed time111.665s26.515s35.315s43.928s53.879s63.767s73.752s83.623s95.433s106.865s117.070s127.247s

Пот катом - лог
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
mayton@mayton-ryzen:~/git/CardRaytracerBenchmark/java-mt$ ./run.sh 
usage: CardRaytracerMt
 -d,--drawseg              draw segment-per-thead bounding boxes (debug
                           only)
 -f,--filename <arg>       filename + extension, where extension can be
                           'bmp' or 'png', always 24-bit/pixel quality or
                           /dev/null to omit file creation.
 -h,--help                 print this message
 -p,--parallelism <arg>    parallelism degree: {-,1,2,....n}, default =
                           AvailableProcessors)
 -s,--segperf <arg>        segment performer: { QUATRO | HALF | THIRD |
                           G_RATIO }
 -ss,--segstr <arg>        segment strategy: { HD | VD | AD }, HD -
                           (horizontal division by rectangles), VD -
                           (vertial division by rectangles), AD - (all
                           directions)
 -sz,--segmentsize <arg>   segment size in pixels: integer
2019-04-11 22:30:45.870 [ INFO  ] - Elapsed time          : 4 ms
2019-04-11 22:30:46.468 [ INFO  ] - Parallelism           : 1 
2019-04-11 22:30:46.470 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:30:46.470 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:30:46.470 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:30:46.470 [ INFO  ] - File format           : bmp 
2019-04-11 22:30:57.546 [ INFO  ] - Elapsed time          : 11083 ms

real	0m11.665s
user	0m14.606s
sys	0m0.173s
2019-04-11 22:30:58.095 [ INFO  ] - Parallelism           : 2 
2019-04-11 22:30:58.096 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:30:58.097 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:30:58.097 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:30:58.097 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:04.046 [ INFO  ] - Elapsed time          : 5957 ms

real	0m6.515s
user	0m14.574s
sys	0m0.221s
2019-04-11 22:31:04.600 [ INFO  ] - Parallelism           : 3 
2019-04-11 22:31:04.602 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:31:04.602 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:31:04.602 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:31:04.602 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:09.377 [ INFO  ] - Elapsed time          : 4783 ms

real	0m5.315s
user	0m15.706s
sys	0m0.176s
2019-04-11 22:31:09.925 [ INFO  ] - Parallelism           : 4 
2019-04-11 22:31:09.927 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:31:09.927 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:31:09.927 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:31:09.927 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:13.286 [ INFO  ] - Elapsed time          : 3367 ms

real	0m3.928s
user	0m15.435s
sys	0m0.243s
2019-04-11 22:31:13.852 [ INFO  ] - Parallelism           : 5 
2019-04-11 22:31:13.854 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:31:13.854 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:31:13.854 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:31:13.854 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:17.184 [ INFO  ] - Elapsed time          : 3337 ms

real	0m3.879s
user	0m18.685s
sys	0m0.196s
2019-04-11 22:31:17.737 [ INFO  ] - Parallelism           : 6 
2019-04-11 22:31:17.739 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:31:17.739 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:31:17.739 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:31:17.739 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:20.943 [ INFO  ] - Elapsed time          : 3212 ms

real	0m3.767s
user	0m20.125s
sys	0m0.264s
2019-04-11 22:31:21.511 [ INFO  ] - Parallelism           : 7 
2019-04-11 22:31:21.512 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:31:21.512 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:31:21.513 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:31:21.513 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:24.687 [ INFO  ] - Elapsed time          : 3182 ms

real	0m3.752s
user	0m22.778s
sys	0m0.212s
2019-04-11 22:31:25.297 [ INFO  ] - Parallelism           : 8 
2019-04-11 22:31:25.299 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:31:25.299 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:31:25.300 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:31:25.300 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:28.324 [ INFO  ] - Elapsed time          : 3032 ms

real	0m3.623s
user	0m24.804s
sys	0m0.220s
2019-04-11 22:31:28.879 [ INFO  ] - Parallelism           : 9 
2019-04-11 22:31:28.881 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:31:28.882 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:31:28.882 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:31:28.882 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:33.761 [ INFO  ] - Elapsed time          : 4890 ms

real	0m5.433s
user	0m46.091s
sys	0m0.284s
2019-04-11 22:31:34.302 [ INFO  ] - Parallelism           : 10 
2019-04-11 22:31:34.304 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:31:34.304 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:31:34.304 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:31:34.304 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:40.612 [ INFO  ] - Elapsed time          : 6317 ms

real	0m6.865s
user	1m7.066s
sys	0m0.220s
2019-04-11 22:31:41.156 [ INFO  ] - Parallelism           : 11 
2019-04-11 22:31:41.158 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:31:41.158 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:31:41.158 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:31:41.158 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:47.673 [ INFO  ] - Elapsed time          : 6522 ms

real	0m7.070s
user	1m14.399s
sys	0m0.256s
2019-04-11 22:31:48.257 [ INFO  ] - Parallelism           : 12 
2019-04-11 22:31:48.259 [ INFO  ] - Segment strategy      : Division all directions 
2019-04-11 22:31:48.259 [ INFO  ] - Segment performer     : Golden ratio 
2019-04-11 22:31:48.260 [ INFO  ] - Minimal segment size  : 2048 pixels 
2019-04-11 22:31:48.260 [ INFO  ] - File format           : bmp 
2019-04-11 22:31:54.933 [ INFO  ] - Elapsed time          : 6682 ms

real	0m7.247s
user	1m16.640s
sys	0m0.156s

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800210
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот скрин с сегментами. Сори за качество. Скруль сжимает PNG->JPG когда квота превышена.
Так что линии могут быть слегка мутноваты.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800212
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второе. Перейду к сям. Ого. Тут сразу 2 приложения. Акторное и обычное.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800215
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Готов акторный лог

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
for i in {1..12}
do
 time ./card-raytracer-cpp-actor.exe actor-$i.ppm $i
done
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 1 threads to file actor-1.ppm ...
Init end: 43 msec
Time: 10618 msec

real	0m10.624s
user	0m11.242s
sys	0m0.913s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 2 threads to file actor-2.ppm ...
Init end: 39 msec
Time: 19922 msec

real	0m19.927s
user	0m22.166s
sys	0m15.149s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 3 threads to file actor-3.ppm ...
Init end: 40 msec
Time: 17551 msec

real	0m17.555s
user	0m22.995s
sys	0m23.523s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 4 threads to file actor-4.ppm ...
Init end: 41 msec
Time: 21904 msec

real	0m21.908s
user	0m29.196s
sys	0m47.161s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 5 threads to file actor-5.ppm ...
Init end: 49 msec
Time: 26687 msec

real	0m26.692s
user	0m34.958s
sys	1m21.835s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 6 threads to file actor-6.ppm ...
Init end: 51 msec
Time: 29467 msec

real	0m29.472s
user	0m38.608s
sys	1m57.528s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 7 threads to file actor-7.ppm ...
Init end: 47 msec
Time: 29905 msec

real	0m29.910s
user	0m41.178s
sys	2m26.062s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 8 threads to file actor-8.ppm ...
Init end: 57 msec
Time: 29958 msec

real	0m29.962s
user	0m42.182s
sys	2m53.965s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 9 threads to file actor-9.ppm ...
Init end: 53 msec
Time: 29741 msec

real	0m29.745s
user	0m44.429s
sys	3m18.458s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 10 threads to file actor-10.ppm ...
Init end: 48 msec
Time: 29634 msec

real	0m29.637s
user	0m43.905s
sys	3m46.545s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 11 threads to file actor-11.ppm ...
Init end: 54 msec
Time: 29612 msec

real	0m29.616s
user	0m43.591s
sys	4m14.488s
compile Apr 11 2019 23:09:40   LOCK: pthread_mutex
lite_thread 12 threads to file actor-12.ppm ...
Init end: 53 msec
Time: 29549 msec

real	0m29.553s
user	0m45.238s
sys	4m37.552s

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800217
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И мультипоточный
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
#!/bin/bash -v

for i in {1..12}
do
 time ./card-raytracer-cpp-mt.exe mt-$i.ppm $i
done
compile Apr 11 2019 23:09:42
use 1 threads to file mt-1.ppm ...
9614: thread 0 finish 
Time: 9615 msec

real	0m9.618s
user	0m9.608s
sys	0m0.008s
compile Apr 11 2019 23:09:42
use 2 threads to file mt-2.ppm ...
30456: thread 0 finish 
30465: thread 1 finish 
Time: 30465 msec

real	0m18.049s
user	0m18.736s
sys	0m11.730s
compile Apr 11 2019 23:09:42
use 3 threads to file mt-3.ppm ...
40199: thread 0 finish 
40372: thread 1 finish 
40380: thread 2 finish 
Time: 40380 msec

real	0m18.470s
user	0m21.071s
sys	0m19.310s
compile Apr 11 2019 23:09:42
use 4 threads to file mt-4.ppm ...
58525: thread 0 finish 
59751: thread 1 finish 
59756: thread 2 finish 
59760: thread 3 finish 
Time: 59761 msec

real	0m19.822s
user	0m23.665s
sys	0m36.097s
compile Apr 11 2019 23:09:42
use 5 threads to file mt-5.ppm ...
103351: thread 0 finish 
106624: thread 1 finish 
106629: thread 2 finish 
106633: thread 3 finish 
106637: thread 4 finish 
Time: 106637 msec

real	0m27.232s
user	0m29.949s
sys	1m16.689s
compile Apr 11 2019 23:09:42
use 6 threads to file mt-6.ppm ...
121113: thread 0 finish 
124010: thread 1 finish 
124261: thread 2 finish 
124269: thread 3 finish 
124274: thread 4 finish 
124277: thread 5 finish 
Time: 124277 msec

real	0m26.708s
user	0m32.544s
sys	1m31.734s
compile Apr 11 2019 23:09:42
use 7 threads to file mt-7.ppm ...
151512: thread 0 finish 
153276: thread 1 finish 
154207: thread 2 finish 
154212: thread 3 finish 
154215: thread 4 finish 
154218: thread 5 finish 
154220: thread 6 finish 
Time: 154221 msec

real	0m27.923s
user	0m35.303s
sys	1m58.918s
compile Apr 11 2019 23:09:42
use 8 threads to file mt-8.ppm ...
173626: thread 0 finish 
175783: thread 1 finish 
177719: thread 2 finish 
177749: thread 3 finish 
177755: thread 4 finish 
177761: thread 5 finish 
177763: thread 6 finish 
177765: thread 7 finish 
Time: 177766 msec

real	0m28.468s
user	0m37.680s
sys	2m20.087s
compile Apr 11 2019 23:09:42
use 9 threads to file mt-9.ppm ...
202001: thread 0 finish 
204274: thread 1 finish 
206613: thread 2 finish 
206681: thread 3 finish 
206684: thread 4 finish 
206686: thread 5 finish 
206689: thread 6 finish 
206691: thread 7 finish 
206694: thread 8 finish 
Time: 206694 msec

real	0m28.731s
user	0m38.961s
sys	2m47.734s
compile Apr 11 2019 23:09:42
use 10 threads to file mt-10.ppm ...
225958: thread 0 finish 
226068: thread 1 finish 
228793: thread 2 finish 
229474: thread 3 finish 
229479: thread 4 finish 
229484: thread 5 finish 
229488: thread 6 finish 
229490: thread 7 finish 
229491: thread 8 finish 
229493: thread 9 finish 
Time: 229494 msec

real	0m29.022s
user	0m40.092s
sys	3m9.403s
compile Apr 11 2019 23:09:42
use 11 threads to file mt-11.ppm ...
248000: thread 0 finish 
248037: thread 1 finish 
252347: thread 2 finish 
253317: thread 3 finish 
253322: thread 4 finish 
253325: thread 5 finish 
253328: thread 6 finish 
253331: thread 7 finish 
253334: thread 8 finish 
253336: thread 9 finish 
253340: thread 10 finish 
Time: 253340 msec

real	0m28.992s
user	0m41.595s
sys	3m31.746s
compile Apr 11 2019 23:09:42
use 12 threads to file mt-12.ppm ...
273454: thread 0 finish 
273470: thread 1 finish 
276600: thread 2 finish 
278190: thread 3 finish 
278191: thread 4 finish 
278193: thread 5 finish 
278195: thread 6 finish 
278196: thread 7 finish 
278199: thread 8 finish 
278202: thread 9 finish 
278203: thread 10 finish 
278205: thread 11 finish 
Time: 278205 msec

real	0m28.938s
user	0m42.102s
sys	3m56.105s

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800220
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картинка с графиком Java-MT:
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800223
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... Хотел построить график для сей... и завис.

А почему такое сильно разбегание времени для card-raytracer-cpp-mt.exe?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
compile Apr 11 2019 23:09:42
use 3 threads to file mt-3.ppm ...
40199: thread 0 finish 
40372: thread 1 finish 
40380: thread 2 finish 
Time: 40380 msec

real	0m18.470s
user	0m21.071s
sys	0m19.310s
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800264
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХм... Хотел построить график для сей... и завис.

А почему такое сильно разбегание времени для card-raytracer-cpp-mt.exe?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
compile Apr 11 2019 23:09:42
use 3 threads to file mt-3.ppm ...
40199: thread 0 finish 
40372: thread 1 finish 
40380: thread 2 finish 
Time: 40380 msec

real	0m18.470s
user	0m21.071s
sys	0m19.310s


Надо было чем-то время замерить, в виндовсе для этого clock() подходит, он дает время в мс с момента запуска, а в линуксе он дает суммарное время работы всех ядер. Смотри на нижнее время, как понимаю real это фактическое время работы.

Поправил, запушил.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800274
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ мультипоточный
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
#!/bin/bash -v

for i in {1..12}
do
 time ./card-raytracer-cpp-mt.exe mt-$i.ppm $i
done
compile Apr 11 2019 23:09:42
use 1 threads to file mt-1.ppm ...
9614: thread 0 finish 
Time: 9615 msec

real	0m9.618s
user	0m9.608s
sys	0m0.008s
compile Apr 11 2019 23:09:42
use 2 threads to file mt-2.ppm ...
30456: thread 0 finish 
30465: thread 1 finish 
Time: 30465 msec

real	0m18.049s
user	0m18.736s
sys	0m11.730s
compile Apr 11 2019 23:09:42
use 3 threads to file mt-3.ppm ...
40199: thread 0 finish 
40372: thread 1 finish 
40380: thread 2 finish 
Time: 40380 msec

real	0m18.470s
user	0m21.071s
sys	0m19.310s
compile Apr 11 2019 23:09:42
use 4 threads to file mt-4.ppm ...
58525: thread 0 finish 
59751: thread 1 finish 
59756: thread 2 finish 
59760: thread 3 finish 
Time: 59761 msec

real	0m19.822s
user	0m23.665s
sys	0m36.097s
compile Apr 11 2019 23:09:42
use 5 threads to file mt-5.ppm ...
103351: thread 0 finish 
106624: thread 1 finish 
106629: thread 2 finish 
106633: thread 3 finish 
106637: thread 4 finish 
Time: 106637 msec

real	0m27.232s
user	0m29.949s
sys	1m16.689s
compile Apr 11 2019 23:09:42
use 6 threads to file mt-6.ppm ...
121113: thread 0 finish 
124010: thread 1 finish 
124261: thread 2 finish 
124269: thread 3 finish 
124274: thread 4 finish 
124277: thread 5 finish 
Time: 124277 msec

real	0m26.708s
user	0m32.544s
sys	1m31.734s
compile Apr 11 2019 23:09:42
use 7 threads to file mt-7.ppm ...
151512: thread 0 finish 
153276: thread 1 finish 
154207: thread 2 finish 
154212: thread 3 finish 
154215: thread 4 finish 
154218: thread 5 finish 
154220: thread 6 finish 
Time: 154221 msec

real	0m27.923s
user	0m35.303s
sys	1m58.918s
compile Apr 11 2019 23:09:42
use 8 threads to file mt-8.ppm ...
173626: thread 0 finish 
175783: thread 1 finish 
177719: thread 2 finish 
177749: thread 3 finish 
177755: thread 4 finish 
177761: thread 5 finish 
177763: thread 6 finish 
177765: thread 7 finish 
Time: 177766 msec

real	0m28.468s
user	0m37.680s
sys	2m20.087s
compile Apr 11 2019 23:09:42
use 9 threads to file mt-9.ppm ...
202001: thread 0 finish 
204274: thread 1 finish 
206613: thread 2 finish 
206681: thread 3 finish 
206684: thread 4 finish 
206686: thread 5 finish 
206689: thread 6 finish 
206691: thread 7 finish 
206694: thread 8 finish 
Time: 206694 msec

real	0m28.731s
user	0m38.961s
sys	2m47.734s
compile Apr 11 2019 23:09:42
use 10 threads to file mt-10.ppm ...
225958: thread 0 finish 
226068: thread 1 finish 
228793: thread 2 finish 
229474: thread 3 finish 
229479: thread 4 finish 
229484: thread 5 finish 
229488: thread 6 finish 
229490: thread 7 finish 
229491: thread 8 finish 
229493: thread 9 finish 
Time: 229494 msec

real	0m29.022s
user	0m40.092s
sys	3m9.403s
compile Apr 11 2019 23:09:42
use 11 threads to file mt-11.ppm ...
248000: thread 0 finish 
248037: thread 1 finish 
252347: thread 2 finish 
253317: thread 3 finish 
253322: thread 4 finish 
253325: thread 5 finish 
253328: thread 6 finish 
253331: thread 7 finish 
253334: thread 8 finish 
253336: thread 9 finish 
253340: thread 10 finish 
Time: 253340 msec

real	0m28.992s
user	0m41.595s
sys	3m31.746s
compile Apr 11 2019 23:09:42
use 12 threads to file mt-12.ppm ...
273454: thread 0 finish 
273470: thread 1 finish 
276600: thread 2 finish 
278190: thread 3 finish 
278191: thread 4 finish 
278193: thread 5 finish 
278195: thread 6 finish 
278196: thread 7 finish 
278199: thread 8 finish 
278202: thread 9 finish 
278203: thread 10 finish 
278205: thread 11 finish 
Time: 278205 msec

real	0m28.938s
user	0m42.102s
sys	3m56.105s


Похоже проблема не в коде. Тут до безобразия тупое решение, оставил только код касающийся распараллеливания:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
void test(const char* filename, size_t thread_count) {
...
	// Запуск потоков
	for (size_t i = 0; i != thread_count; i++) {
		... заполнение задания tasks[i] 
		threads[i] = std::thread(calc_thread, &tasks[i]); // Запуск потока обсчета tasks[i]
	}

	// Ожидание завершения потоков и вывод результатов
	for (size_t i = 0; i != thread_count; i++) {
		threads[i].join(); // Ожидание завершения потока threads[i]
		... сохранение результата tasks[i]
	}
...
}


Внутри потока никаких синхронизаций, только расчет. Исходник .

Тут просто нечему тормозить. Расчет разбивается на thread_count частей и каждая часть считается в своем потоке.
Единственный тормоз неравномерное разбиение на блоки, но все равно в 12 потоков должно быть быстрее чем в 1, а у тебя 1 поток за 9.6 сек считает, а 12 потоков 28.9 сек. Втрое медленнее быть не должно, в худшем случае должно быть чуть быстрее.

Хотел написать что дело в проце, но глянул на твои замеры с java 21859984 и там видно что можно параллелить.

Я не знаю где искать проблему. Может проблема в компиляторе? Попробуй -O3 заменить -O2

PS Глянул картинку, я накосячил немного, в обратном порядке в файл блоки пишутся, но на скорость расчета это не влияет. Поправлю попозже.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800303
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно залоггировать старт-стоп каждого потока?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800314
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМожно залоггировать старт-стоп каждого потока?
Можно. Добавлю.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800399
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь прокомментировать как ты делишь объём работ на каждый поток?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
void test(const char* filename, size_t thread_count) {
	FILE *out = fopen(filename, "w");
	assert(out != NULL);
	fprintf(out, "P6 %d %d 255 ", WIDTH, HEIGHT);

	std::vector<task_t> tasks(thread_count);
	std::vector<std::thread> threads(thread_count);

	// Запуск потоков
	int step = HEIGHT / (int)thread_count, start = 0;
	for (size_t i = 0; i != thread_count; i++) {
		tasks[i].y_from = start;
		start = i + 1 != thread_count ? start + step : HEIGHT;
		tasks[i].y_to = start - 1;
		tasks[i].result.reserve(WIDTH * (tasks[i].y_to - tasks[i].y_from + 1));
		threads[i] = std::thread(calc_thread, &tasks[i]);
	}

	// Ожидание завершения потоков и вывод результатов
	for (size_t i = 0; i != thread_count; i++) {
		threads[i].join();
		for(auto& it : tasks[i].result) it.print(out);
		printf("%d: thread %d finish \n", time_now(), (int)i);
	}

	fclose(out);
}
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800506
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМожешь прокомментировать как ты делишь объём работ на каждый поток?
Я делю строки на thread_count частей.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// Задание на расчет блока
typedef struct {
	int y_from, y_to; // первая строка блока, последняя строка блока
	std::vector<Vector> result;
} task_t;


	int step = HEIGHT / (int)thread_count, start = 0;
	for (size_t i = 0; i != thread_count; i++) {
		tasks[i].y_from = start; // Первая строка блока
		start = i + 1 != thread_count ? start + step : HEIGHT; // Начало следующего блока, для последнего HEIGHT
		tasks[i].y_to = start - 1; // Последняя строка задания
...


Можешь не вникать, я в вывод добавлю "Расчет блока: строки с ... по ..."
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800526
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смержил.

Тестирую. Пока решил делать от 1 до 4 потоков. Так быстрее.

Баг с перевернутой мозаикой пока еще остался.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800528
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Время пофиксилось. Thanks.

Но пользы от мультипоточки пока еще не видно. Надо курить дальше. Я думаю - что-то тривиальное.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
mayton@mayton-ryzen:~/git/CardRaytracerBenchmark/cpp-mt$ ./run.sh
#!/bin/bash -v

for i in {1..4}
do
 time ./card-raytracer-cpp-mt.exe mt-$i.ppm $i
done
compile Apr 12 2019 13:19:30
use 1 threads to file mt-1.ppm ...
9279: thread 0 finish 
Time: 9279 msec

real	0m9.282s
user	0m9.277s
sys	0m0.004s
compile Apr 12 2019 13:19:30
use 2 threads to file mt-2.ppm ...
17260: thread 0 finish 
17268: thread 1 finish 
Time: 17269 msec

real	0m17.271s
user	0m17.603s
sys	0m11.384s
compile Apr 12 2019 13:19:30
use 3 threads to file mt-3.ppm ...
16813: thread 0 finish 
17512: thread 1 finish 
17518: thread 2 finish 
Time: 17518 msec

real	0m17.520s
user	0m20.439s
sys	0m19.302s
compile Apr 12 2019 13:19:30
use 4 threads to file mt-4.ppm ...
19983: thread 0 finish 
21024: thread 1 finish 
21030: thread 2 finish 
21035: thread 3 finish 
Time: 21035 msec

real	0m21.038s
user	0m25.544s
sys	0m37.620s

for i in {1..4}
do
 time ./card-raytracer-cpp-actor.exe actor-$i.ppm $i
done
compile Apr 12 2019 13:19:28   LOCK: pthread_mutex
lite_thread 1 threads to file actor-1.ppm ...
Init end: 44 msec
Time: 10563 msec

real	0m10.569s
user	0m11.206s
sys	0m0.935s
compile Apr 12 2019 13:19:28   LOCK: pthread_mutex
lite_thread 2 threads to file actor-2.ppm ...
Init end: 41 msec
Time: 19882 msec

real	0m19.887s
user	0m22.360s
sys	0m14.535s
compile Apr 12 2019 13:19:28   LOCK: pthread_mutex
lite_thread 3 threads to file actor-3.ppm ...
Init end: 42 msec
Time: 17827 msec

real	0m17.832s
user	0m23.415s
sys	0m23.728s
compile Apr 12 2019 13:19:28   LOCK: pthread_mutex
lite_thread 4 threads to file actor-4.ppm ...
Init end: 37 msec
Time: 25236 msec

real	0m25.240s
user	0m30.380s
sys	0m58.237s

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800531
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

слушай, а какой ГСЧ используешь? стандартын вроде как глобальные переменные использует, он то явно чаще вызывается чем переключение акторов
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800538
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это мысль. В однопоточной Java я использовал один из линейных с изветными коэффициентами.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
    static final int M = 1_048_576; // 2^20
    static final int J = 2_045;
    int oldI = 12357;

    double Random() {
        oldI = (oldI * J + 1) % M;
        return (double) oldI / M;
    }



В мультипоточке там встроенная функция Random::next() но она - dedicated для каждого узла ForkJoin и
думаю что не пересекается в глобальном контексте нигде.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800540
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T,

слушай, а какой ГСЧ используешь? стандартын вроде как глобальные переменные использует, он то явно чаще вызывается чем переключение акторов
Точно, вот я тормоз )))
Код: plaintext
1.
2.
3.
double Random() {
	return (double)rand() / RAND_MAX;
}


Сейчас переделаю.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800545
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дай бох...
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800554
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВремя пофиксилось. Thanks.

Но пользы от мультипоточки пока еще не видно. Надо курить дальше. Я думаю - что-то тривиальное.
Там только вывод времени пофикшен.

Запушил обновление с правильным порядком вывода блоков и отдельным ГСЧ для каждого потока. Сейчас интересно что получится.

Мой результат на 4 ядрах с HT слева время в мс
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
C:\Test>card-raytracer-mt.exe 2.ppm
compile Apr 12 2019 11:43:35
     0: test 8 threads to file 2.ppm
     0: start thread (511...448)
     1: start thread (447...384)
     1: start thread (383...320)
     1: start thread (319...256)
     1: start thread (255...192)
     1: start thread (191...128)
     1: start thread (127...64)
     1: start thread (63...0)
  1234: thread (511...448) finished
  1235: thread (447...384) finished
  1963: thread (383...320) finished
  2011: thread (63...0) finished
  2284: thread (127...64) finished
  2896: thread (319...256) finished
  3312: thread (191...128) finished
  3401: thread (255...192) finished
  3432: test end

C:\Test>card-raytracer-mt.exe 3.ppm 1
compile Apr 12 2019 11:43:35
     0: test 1 threads to file 3.ppm
     0: start thread (511...0)
 12477: thread (511...0) finished
 12534: test end

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800559
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T,

слушай, а какой ГСЧ используешь? стандартын вроде как глобальные переменные использует, он то явно чаще вызывается чем переключение акторов
Заменил на
Код: plaintext
1.
2.
3.
4.
5.
double Random() {
	thread_local uint32_t state = 12345;
	state = state * 1103515245;
	return (double)(state >> 16) / 65536;
}


Время работы не поменялось. Насколько я понимаю нынешние компиляторы все с многопоточным рантаймом, который при старте потока глобальные переменные библиотеки С++ размещает в TLS потока, т.е. свой rand() для каждого потока.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800564
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В стек трассировщика поставь.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800567
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonВремя пофиксилось. Thanks.

Но пользы от мультипоточки пока еще не видно. Надо курить дальше. Я думаю - что-то тривиальное.
Там только вывод времени пофикшен.

Запушил обновление с правильным порядком вывода блоков и отдельным ГСЧ для каждого потока. Сейчас интересно что получится.

Мой результат на 4 ядрах с HT слева время в мс
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
C:\Test>card-raytracer-mt.exe 2.ppm
compile Apr 12 2019 11:43:35
     0: test 8 threads to file 2.ppm
     0: start thread (511...448)
     1: start thread (447...384)
     1: start thread (383...320)
     1: start thread (319...256)
     1: start thread (255...192)
     1: start thread (191...128)
     1: start thread (127...64)
     1: start thread (63...0)
  1234: thread (511...448) finished
  1235: thread (447...384) finished
  1963: thread (383...320) finished
  2011: thread (63...0) finished
  2284: thread (127...64) finished
  2896: thread (319...256) finished
  3312: thread (191...128) finished
  3401: thread (255...192) finished
  3432: test end

C:\Test>card-raytracer-mt.exe 3.ppm 1
compile Apr 12 2019 11:43:35
     0: test 1 threads to file 3.ppm
     0: start thread (511...0)
 12477: thread (511...0) finished
 12534: test end


А можно как-то ID-потока получить?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800585
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА можно как-то ID-потока получить?
Можно. Добавил. Хотя там и так понятно по диапазону обрабатываемых строк.
Так выглядит
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
compile Apr 12 2019 16:27:04
     0: test 7 threads to file 1.ppm
   175: start thread#2520 (lines 511...439)
   375: start thread#836 (lines 438...366)
   515: start thread#2176 (lines 365...293)
   714: start thread#2596 (lines 292...220)
   979: start thread#5884 (lines 219...147)
  1320: start thread#5864 (lines 146...74)
  1721: start thread#5456 (lines 73...0)
  3588: thread#2520 (lines 511...439) finished
  4179: thread#836 (lines 438...366) finished
  8549: thread#2176 (lines 365...293) finished
  8723: thread#5456 (lines 73...0) finished
  9858: thread#5864 (lines 146...74) finished
 10302: thread#2596 (lines 292...220) finished
 10591: thread#5884 (lines 219...147) finished
 10626: test end

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800594
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему такой долгий старт? Между стартом первого и последнего потока - почти полторы секунды.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800596
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смержил. Но тестить буду вечером.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800599
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПочему такой долгий старт? Между стартом первого и последнего потока - почти полторы секунды.
Время не смотри, я тебе показал как id потока выглядит.
Это 7 потоков в одноядерной виртуалке в под отладчиком MSVC.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800606
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто когда я разбираюсь с перформансом - смотрю на диаграмму событий во времени и пытаюсь понять
что пошло не так. И где есть бутылочное горло.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800728
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил расчет строками на акторах. Там всего 512 сообщений запускается, у меня стало быстрее на 0.1 сек. Затести card-raytracer-cpp-actor3.exe
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800730
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классно. А можно регулировать размер порции данных для актора? К примеру я захочу по 2 строки толкать?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800738
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА можно регулировать размер порции данных для актора? К примеру я захочу по 2 строки толкать?
Можешь, мой исходник бери и правь как тебе захочется. Там все просто и понятно.

Но я не вижу смысла укрупнять: 512 строк за 10 сек это 19.5 мс на строку, это очень большой кусок.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800744
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запустил в линуксе на моем i3-2310M
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
ubuntu@ubuntu:~/cr/cpp-mt$ ./run.sh
#!/bin/bash -v

time ./card-raytracer-cpp-mt.exe 1.ppm
compile Apr 12 2019 16:16:32
     0: test 4 threads to file 1.ppm
     0: start thread#8342 (lines 511...384)
     0: start thread#8343 (lines 383...256)
     0: start thread#8344 (lines 255...128)
     4: start thread#8345 (lines 127...0)
  4628: thread#8342 (lines 511...384) finished
  9380: thread#8343 (lines 383...256) finished
  9740: thread#8345 (lines 127...0) finished
 12957: thread#8344 (lines 255...128) finished
 12980: test end


real	0m12.984s
user	0m33.858s
sys	0m0.048s

time ./card-raytracer-cpp-actor.exe 2.ppm
compile Apr 12 2019 16:16:23   LOCK: pthread_mutex
lite_thread 4 threads to file 2.ppm ...
Init end: 194 msec
Time: 11442 msec


real	0m11.449s
user	0m38.711s
sys	0m1.868s

time ./card-raytracer-cpp-actor3.exe 3.ppm
compile Apr 12 2019 16:16:28   LOCK: pthread_mutex
lite_thread 4 threads to file 3.ppm ...
Init end: 2 msec
Time: 10907 msec


real	0m10.910s
user	0m38.701s
sys	0m0.111s



PS Забыл однопоточно запустить (((
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800782
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДобавил расчет строками на акторах. Там всего 512 сообщений запускается, у меня стало быстрее на 0.1 сек. Затести card-raytracer-cpp-actor3.exe
Merged in master.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800784
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДобавил расчет строками на акторах. Там всего 512 сообщений запускается, у меня стало быстрее на 0.1 сек. Затести card-raytracer-cpp-actor3.exe
Ты пишешь про card-raytracer-cpp-actor3.exe но в сборочном скрипте такого output нету.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800786
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затестил. Мультипоточный вариант - уже очень хорошо.

Акторный - пока хреновенько. Наращивание акторов не добавляет мощности к этому софту.
Надо что-то кумекать архитектурно.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
#!/bin/bash -v

for i in {1..4}
do
 time ./card-raytracer-cpp-mt.exe mt-$i.ppm $i
done
compile Apr 12 2019 21:49:01
     0: test 1 threads to file mt-1.ppm
     0: start thread#4876 (lines 511...0)
  8719: thread#4876 (lines 511...0) finished
  8743: test end

real	0m8.746s
user	0m8.741s
sys	0m0.004s
compile Apr 12 2019 21:49:01
     0: test 2 threads to file mt-2.ppm
     0: start thread#4878 (lines 511...256)
     0: start thread#4879 (lines 255...0)
  3327: thread#4878 (lines 511...256) finished
  5547: thread#4879 (lines 255...0) finished
  5566: test end

real	0m5.570s
user	0m8.910s
sys	0m0.004s
compile Apr 12 2019 21:49:01
     0: test 3 threads to file mt-3.ppm
     0: start thread#4881 (lines 511...342)
     0: start thread#4882 (lines 341...172)
     0: start thread#4883 (lines 171...0)
  1614: thread#4881 (lines 511...342) finished
  3349: thread#4883 (lines 171...0) finished
  4131: thread#4882 (lines 341...172) finished
  4149: test end

real	0m4.152s
user	0m9.111s
sys	0m0.008s
compile Apr 12 2019 21:49:01
     0: test 4 threads to file mt-4.ppm
     0: start thread#4886 (lines 383...256)
     0: start thread#4887 (lines 255...128)
     0: start thread#4885 (lines 511...384)
     0: start thread#4888 (lines 127...0)
  1115: thread#4885 (lines 511...384) finished
  2225: thread#4888 (lines 127...0) finished
  2384: thread#4886 (lines 383...256) finished
  3544: thread#4887 (lines 255...128) finished
  3559: test end

real	0m3.562s
user	0m9.294s
sys	0m0.008s

for i in {1..4}
do
 time ./card-raytracer-cpp-actor.exe actor-$i.ppm $i
done
compile Apr 12 2019 21:48:58   LOCK: pthread_mutex
lite_thread 1 threads to file actor-1.ppm ...
Init end: 48 msec
Time: 10677 msec

real	0m10.683s
user	0m11.417s
sys	0m0.863s
compile Apr 12 2019 21:48:58   LOCK: pthread_mutex
lite_thread 2 threads to file actor-2.ppm ...
Init end: 41 msec
Time: 19457 msec

real	0m19.462s
user	0m22.341s
sys	0m13.998s
compile Apr 12 2019 21:48:58   LOCK: pthread_mutex
lite_thread 3 threads to file actor-3.ppm ...
Init end: 44 msec
Time: 18088 msec

real	0m18.092s
user	0m24.209s
sys	0m23.788s
compile Apr 12 2019 21:48:58   LOCK: pthread_mutex
lite_thread 4 threads to file actor-4.ppm ...
Init end: 39 msec
Time: 23792 msec

real	0m23.797s
user	0m32.185s
sys	0m50.214s

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800787
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага. Увидел.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800788
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то кривенько было. Еще раз перетестил. Вроде лучше.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
#!/bin/bash -v

for i in {1..4}
do
 time ./card-raytracer-cpp-mt.exe mt-$i.ppm $i
done
compile Apr 12 2019 22:03:06
     0: test 1 threads to file mt-1.ppm
     0: start thread#5427 (lines 511...0)
  9113: thread#5427 (lines 511...0) finished
  9138: test end

real	0m9.141s
user	0m9.127s
sys	0m0.012s
compile Apr 12 2019 22:03:06
     0: test 2 threads to file mt-2.ppm
     0: start thread#5429 (lines 511...256)
     0: start thread#5430 (lines 255...0)
  3504: thread#5429 (lines 511...256) finished
  5826: thread#5430 (lines 255...0) finished
  5841: test end

real	0m5.844s
user	0m9.352s
sys	0m0.008s
compile Apr 12 2019 22:03:06
     0: test 3 threads to file mt-3.ppm
     0: start thread#5432 (lines 511...342)
     0: start thread#5433 (lines 341...172)
     0: start thread#5435 (lines 171...0)
  1622: thread#5432 (lines 511...342) finished
  3455: thread#5435 (lines 171...0) finished
  4299: thread#5433 (lines 341...172) finished
  4316: test end

real	0m4.319s
user	0m9.400s
sys	0m0.004s
compile Apr 12 2019 22:03:06
     0: test 4 threads to file mt-4.ppm
     0: start thread#5437 (lines 511...384)
     0: start thread#5438 (lines 383...256)
     0: start thread#5439 (lines 255...128)
     0: start thread#5440 (lines 127...0)
  1141: thread#5437 (lines 511...384) finished
  2239: thread#5440 (lines 127...0) finished
  2407: thread#5438 (lines 383...256) finished
  3642: thread#5439 (lines 255...128) finished
  3657: test end

real	0m3.660s
user	0m9.460s
sys	0m0.004s

for i in {1..4}
do
 time ./card-raytracer-cpp-actor.exe actor-$i.ppm $i
done
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 1 threads to file actor-1.ppm ...
Init end: 42 msec
Time: 9212 msec

real	0m9.218s
user	0m9.855s
sys	0m0.715s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 2 threads to file actor-2.ppm ...
Init end: 45 msec
Time: 4678 msec

real	0m4.684s
user	0m10.099s
sys	0m0.783s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 3 threads to file actor-3.ppm ...
Init end: 46 msec
Time: 3181 msec

real	0m3.185s
user	0m10.159s
sys	0m0.704s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 4 threads to file actor-4.ppm ...
Init end: 49 msec
Time: 2403 msec

real	0m2.407s
user	0m10.181s
sys	0m0.523s

for i in {1..4}
do
 time ./card-raytracer-cpp-actor3.exe actor3-$i.ppm $i
done
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 1 threads to file actor3-1.ppm ...
Init end: 0 msec
Time: 8724 msec

real	0m8.726s
user	0m8.754s
sys	0m0.008s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 2 threads to file actor3-2.ppm ...
Init end: 1 msec
Time: 4453 msec

real	0m4.456s
user	0m8.950s
sys	0m0.020s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 3 threads to file actor3-3.ppm ...
Init end: 0 msec
Time: 3014 msec

real	0m3.016s
user	0m9.064s
sys	0m0.016s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 4 threads to file actor3-4.ppm ...
Init end: 1 msec
Time: 2258 msec

real	0m2.261s
user	0m9.055s
sys	0m0.004s

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800793
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько помню, там параллелить надо было поперек, а не вдоль

потому переписывать алгоритм на 100%.

я не стал
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800796
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я смотрю после 4 потока еще перформанс растет. Расширю до 12.

Отлично! Теперь-бы эти 3 столбика цифр нарисовать в Экцселе. Тремя цветами. У меня дурацкий Libre-Office.
Он какие-то стрёмные графики рисует. Так-что прошу кого-то выбрать цифирки и отобразить.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
mayton@mayton-ryzen:~/git/CardRaytracerBenchmark/cpp-mt$ ./run.sh
#!/bin/bash -v

for i in {1..12}
do
 time ./card-raytracer-cpp-mt.exe mt-$i.ppm $i
done
compile Apr 12 2019 22:03:06
     0: test 1 threads to file mt-1.ppm
     0: start thread#6178 (lines 511...0)
  8642: thread#6178 (lines 511...0) finished
  8666: test end

real	0m8.669s
user	0m8.663s
sys	0m0.004s
compile Apr 12 2019 22:03:06
     0: test 2 threads to file mt-2.ppm
     0: start thread#6181 (lines 511...256)
     0: start thread#6182 (lines 255...0)
  3314: thread#6181 (lines 511...256) finished
  5505: thread#6182 (lines 255...0) finished
  5532: test end

real	0m5.535s
user	0m8.846s
sys	0m0.008s
compile Apr 12 2019 22:03:06
     0: test 3 threads to file mt-3.ppm
     0: start thread#6184 (lines 511...342)
     0: start thread#6185 (lines 341...172)
     0: start thread#6186 (lines 171...0)
  1606: thread#6184 (lines 511...342) finished
  3365: thread#6186 (lines 171...0) finished
  4143: thread#6185 (lines 341...172) finished
  4161: test end

real	0m4.164s
user	0m9.139s
sys	0m0.008s
compile Apr 12 2019 22:03:06
     0: test 4 threads to file mt-4.ppm
     0: start thread#6190 (lines 511...384)
     0: start thread#6191 (lines 383...256)
     0: start thread#6192 (lines 255...128)
     0: start thread#6193 (lines 127...0)
  1141: thread#6190 (lines 511...384) finished
  2231: thread#6193 (lines 127...0) finished
  2353: thread#6191 (lines 383...256) finished
  3540: thread#6192 (lines 255...128) finished
  3557: test end

real	0m3.560s
user	0m9.295s
sys	0m0.008s
compile Apr 12 2019 22:03:06
     0: test 5 threads to file mt-5.ppm
     0: start thread#6196 (lines 511...410)
     0: start thread#6197 (lines 409...308)
     0: start thread#6198 (lines 307...206)
     0: start thread#6199 (lines 205...104)
     0: start thread#6200 (lines 103...0)
   903: thread#6196 (lines 511...410) finished
  1390: thread#6197 (lines 409...308) finished
  1695: thread#6200 (lines 103...0) finished
  2639: thread#6199 (lines 205...104) finished
  2664: thread#6198 (lines 307...206) finished
  2680: test end

real	0m2.683s
user	0m9.319s
sys	0m0.000s
compile Apr 12 2019 22:03:06
     0: test 6 threads to file mt-6.ppm
     0: start thread#6202 (lines 511...427)
     0: start thread#6203 (lines 426...342)
     0: start thread#6204 (lines 341...257)
     0: start thread#6205 (lines 256...172)
     0: start thread#6206 (lines 171...87)
     0: start thread#6207 (lines 86...0)
   744: thread#6202 (lines 511...427) finished
   865: thread#6203 (lines 426...342) finished
  1407: thread#6207 (lines 86...0) finished
  1878: thread#6204 (lines 341...257) finished
  2063: thread#6206 (lines 171...87) finished
  2402: thread#6205 (lines 256...172) finished
  2422: test end

real	0m2.425s
user	0m9.383s
sys	0m0.012s
compile Apr 12 2019 22:03:06
     0: test 7 threads to file mt-7.ppm
     0: start thread#6209 (lines 511...439)
     0: start thread#6210 (lines 438...366)
     0: start thread#6212 (lines 365...293)
     0: start thread#6213 (lines 292...220)
     0: start thread#6214 (lines 219...147)
     0: start thread#6215 (lines 146...74)
     0: start thread#6216 (lines 73...0)
   635: thread#6209 (lines 511...439) finished
   955: thread#6210 (lines 438...366) finished
  1195: thread#6216 (lines 73...0) finished
  1441: thread#6212 (lines 365...293) finished
  1834: thread#6215 (lines 146...74) finished
  1904: thread#6213 (lines 292...220) finished
  2075: thread#6214 (lines 219...147) finished
  2092: test end

real	0m2.095s
user	0m10.071s
sys	0m0.000s
compile Apr 12 2019 22:03:06
     0: test 8 threads to file mt-8.ppm
     0: start thread#6218 (lines 511...448)
     0: start thread#6219 (lines 447...384)
     0: start thread#6220 (lines 383...320)
     0: start thread#6221 (lines 319...256)
     0: start thread#6222 (lines 255...192)
     0: start thread#6223 (lines 191...128)
     0: start thread#6224 (lines 127...64)
     0: start thread#6225 (lines 63...0)
   562: thread#6218 (lines 511...448) finished
   574: thread#6219 (lines 447...384) finished
   931: thread#6220 (lines 383...320) finished
  1076: thread#6225 (lines 63...0) finished
  1410: thread#6224 (lines 127...64) finished
  1753: thread#6221 (lines 319...256) finished
  2009: thread#6223 (lines 191...128) finished
  2104: thread#6222 (lines 255...192) finished
  2119: test end

real	0m2.122s
user	0m10.448s
sys	0m0.004s
compile Apr 12 2019 22:03:06
     0: test 9 threads to file mt-9.ppm
     0: start thread#6227 (lines 511...456)
     0: start thread#6228 (lines 455...400)
     0: start thread#6229 (lines 399...344)
     0: start thread#6230 (lines 343...288)
     0: start thread#6231 (lines 287...232)
     0: start thread#6232 (lines 231...176)
     0: start thread#6233 (lines 175...120)
     0: start thread#6234 (lines 119...64)
     0: start thread#6235 (lines 63...0)
   485: thread#6227 (lines 511...456) finished
   649: thread#6229 (lines 399...344) finished
   700: thread#6228 (lines 455...400) finished
  1240: thread#6230 (lines 343...288) finished
  1340: thread#6235 (lines 63...0) finished
  1342: thread#6234 (lines 119...64) finished
  1724: thread#6231 (lines 287...232) finished
  1755: thread#6233 (lines 175...120) finished
  1896: thread#6232 (lines 231...176) finished
  1914: test end

real	0m1.917s
user	0m11.154s
sys	0m0.012s
compile Apr 12 2019 22:03:06
     0: test 10 threads to file mt-10.ppm
     0: start thread#6237 (lines 511...461)
     0: start thread#6238 (lines 460...410)
     0: start thread#6239 (lines 409...359)
     0: start thread#6240 (lines 358...308)
     0: start thread#6241 (lines 307...257)
     0: start thread#6242 (lines 256...206)
     0: start thread#6243 (lines 205...155)
     0: start thread#6244 (lines 154...104)
     0: start thread#6245 (lines 103...53)
     0: start thread#6246 (lines 52...0)
   695: thread#6238 (lines 460...410) finished
   700: thread#6237 (lines 511...461) finished
   782: thread#6239 (lines 409...359) finished
   847: thread#6245 (lines 103...53) finished
  1122: thread#6246 (lines 52...0) finished
  1234: thread#6240 (lines 358...308) finished
  1490: thread#6241 (lines 307...257) finished
  1540: thread#6242 (lines 256...206) finished
  1551: thread#6244 (lines 154...104) finished
  1725: thread#6243 (lines 205...155) finished
  1740: test end

real	0m1.743s
user	0m11.721s
sys	0m0.000s
compile Apr 12 2019 22:03:06
     0: test 11 threads to file mt-11.ppm
     0: start thread#6248 (lines 511...466)
     0: start thread#6249 (lines 465...420)
     0: start thread#6250 (lines 419...374)
     0: start thread#6251 (lines 373...328)
     0: start thread#6252 (lines 327...282)
     0: start thread#6253 (lines 281...236)
     0: start thread#6254 (lines 235...190)
     0: start thread#6255 (lines 189...144)
     0: start thread#6256 (lines 143...98)
     0: start thread#6257 (lines 97...52)
     0: start thread#6258 (lines 51...0)
   416: thread#6248 (lines 511...466) finished
   629: thread#6249 (lines 465...420) finished
   659: thread#6250 (lines 419...374) finished
   996: thread#6257 (lines 97...52) finished
  1013: thread#6251 (lines 373...328) finished
  1015: thread#6258 (lines 51...0) finished
  1302: thread#6256 (lines 143...98) finished
  1440: thread#6255 (lines 189...144) finished
  1506: thread#6252 (lines 327...282) finished
  1550: thread#6253 (lines 281...236) finished
  1738: thread#6254 (lines 235...190) finished
  1755: test end

real	0m1.758s
user	0m12.291s
sys	0m0.004s
compile Apr 12 2019 22:03:06
     0: test 12 threads to file mt-12.ppm
     0: start thread#6260 (lines 511...470)
     0: start thread#6261 (lines 469...428)
     0: start thread#6262 (lines 427...386)
     0: start thread#6263 (lines 385...344)
     0: start thread#6264 (lines 343...302)
     0: start thread#6266 (lines 259...218)
     0: start thread#6265 (lines 301...260)
     0: start thread#6267 (lines 217...176)
     0: start thread#6268 (lines 175...134)
     0: start thread#6271 (lines 49...0)
     0: start thread#6270 (lines 91...50)
     6: start thread#6269 (lines 133...92)
   575: thread#6261 (lines 469...428) finished
   577: thread#6260 (lines 511...470) finished
   590: thread#6262 (lines 427...386) finished
   766: thread#6263 (lines 385...344) finished
   904: thread#6270 (lines 91...50) finished
  1224: thread#6264 (lines 343...302) finished
  1291: thread#6265 (lines 301...260) finished
  1301: thread#6271 (lines 49...0) finished
  1406: thread#6269 (lines 133...92) finished
  1407: thread#6267 (lines 217...176) finished
  1426: thread#6268 (lines 175...134) finished
  1592: thread#6266 (lines 259...218) finished
  1608: test end

real	0m1.611s
user	0m13.044s
sys	0m0.004s

for i in {1..12}
do
 time ./card-raytracer-cpp-actor.exe actor-$i.ppm $i
done
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 1 threads to file actor-1.ppm ...
Init end: 43 msec
Time: 8787 msec

real	0m8.793s
user	0m9.358s
sys	0m0.892s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 2 threads to file actor-2.ppm ...
Init end: 42 msec
Time: 4586 msec

real	0m4.591s
user	0m9.799s
sys	0m0.935s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 3 threads to file actor-3.ppm ...
Init end: 44 msec
Time: 3085 msec

real	0m3.090s
user	0m9.944s
sys	0m0.647s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 4 threads to file actor-4.ppm ...
Init end: 47 msec
Time: 2376 msec

real	0m2.379s
user	0m10.058s
sys	0m0.482s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 5 threads to file actor-5.ppm ...
Init end: 46 msec
Time: 1948 msec

real	0m1.953s
user	0m10.152s
sys	0m0.546s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 6 threads to file actor-6.ppm ...
Init end: 61 msec
Time: 1679 msec

real	0m1.682s
user	0m10.551s
sys	0m0.417s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 7 threads to file actor-7.ppm ...
Init end: 61 msec
Time: 1568 msec

real	0m1.571s
user	0m11.406s
sys	0m0.485s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 8 threads to file actor-8.ppm ...
Init end: 67 msec
Time: 1518 msec

real	0m1.521s
user	0m12.551s
sys	0m0.533s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 9 threads to file actor-9.ppm ...
Init end: 59 msec
Time: 1492 msec

real	0m1.495s
user	0m13.844s
sys	0m0.475s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 10 threads to file actor-10.ppm ...
Init end: 62 msec
Time: 1423 msec

real	0m1.426s
user	0m14.546s
sys	0m0.583s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 11 threads to file actor-11.ppm ...
Init end: 52 msec
Time: 1364 msec

real	0m1.367s
user	0m15.090s
sys	0m0.606s
compile Apr 12 2019 22:03:02   LOCK: pthread_mutex
lite_thread 12 threads to file actor-12.ppm ...
Init end: 58 msec
Time: 1348 msec

real	0m1.351s
user	0m15.285s
sys	0m0.733s

for i in {1..12}
do
 time ./card-raytracer-cpp-actor3.exe actor3-$i.ppm $i
done
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 1 threads to file actor3-1.ppm ...
Init end: 0 msec
Time: 8204 msec

real	0m8.206s
user	0m8.245s
sys	0m0.012s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 2 threads to file actor3-2.ppm ...
Init end: 1 msec
Time: 4271 msec

real	0m4.274s
user	0m8.591s
sys	0m0.004s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 3 threads to file actor3-3.ppm ...
Init end: 1 msec
Time: 2962 msec

real	0m2.964s
user	0m8.906s
sys	0m0.008s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 4 threads to file actor3-4.ppm ...
Init end: 1 msec
Time: 2221 msec

real	0m2.224s
user	0m8.902s
sys	0m0.016s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 5 threads to file actor3-5.ppm ...
Init end: 2 msec
Time: 1784 msec

real	0m1.787s
user	0m8.914s
sys	0m0.008s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 6 threads to file actor3-6.ppm ...
Init end: 1 msec
Time: 1498 msec

real	0m1.501s
user	0m8.998s
sys	0m0.004s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 7 threads to file actor3-7.ppm ...
Init end: 1 msec
Time: 1446 msec

real	0m1.449s
user	0m10.094s
sys	0m0.012s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 8 threads to file actor3-8.ppm ...
Init end: 1 msec
Time: 1411 msec

real	0m1.413s
user	0m11.260s
sys	0m0.004s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 9 threads to file actor3-9.ppm ...
Init end: 1 msec
Time: 1365 msec

real	0m1.367s
user	0m12.229s
sys	0m0.008s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 10 threads to file actor3-10.ppm ...
Init end: 1 msec
Time: 1342 msec

real	0m1.344s
user	0m13.300s
sys	0m0.004s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 11 threads to file actor3-11.ppm ...
Init end: 1 msec
Time: 1291 msec

real	0m1.293s
user	0m14.122s
sys	0m0.008s
compile Apr 12 2019 22:03:04   LOCK: pthread_mutex
lite_thread 12 threads to file actor3-12.ppm ...
Init end: 1 msec
Time: 1261 msec

real	0m1.263s
user	0m14.972s
sys	0m0.008s

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800797
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglнасколько помню, там параллелить надо было поперек, а не вдоль

потому переписывать алгоритм на 100%.

я не стал
Ты имеешь в виду векторизацию?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800804
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновил run-скрипты.
Добавил скрипт для Виндовс. Обновитесь.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800835
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ смотрю после 4 потока еще перформанс растет. Расширю до 12.
kealon(Ruslan) был прав 21860492 тормозил rand()

maytonОтлично! Теперь-бы эти 3 столбика цифр нарисовать в Экцселе. Тремя цветами. У меня дурацкий Libre-Office.
Позже сделаю.

Еще надо вернуть в акторы спинлок (который я на мутекс заменил) и перетестить.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800860
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты boost-примитивы пробовал?
В сравнении с std.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800866
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный топик получился. Надо-бы что-то подобное поднять. На тему
мультизадачности и кешей например.

Только без карточного трассировщика. Он ограничен тем что не использует
память. А надо найти что-то такое... хм. Чтоб долбануть по всем кешам
сразу и из 4-8 ядер.

Щас думаю об клеточных автоматах. Они очень просты в реализации. И хорошо параллелятся.
https://en.wikipedia.org/wiki/Conway's_Game_of_Life
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800872
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕще надо вернуть в акторы спинлок (который я на мутекс заменил) и перетестить.
А зачем нам два акторных релиза? Они отличаются.. ну 20 строками. Может их слить в одно приложение?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800890
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОтлично! Теперь-бы эти 3 столбика цифр нарисовать в Экцселе. Тремя цветами. У меня дурацкий Libre-Office.

Табличкой так получается, вторая колонка во сколько раз быстрее однопоточного

ПотоковN блоковПопиксельноПострочно1866687878204255321.645861.942711.9341612.130852.829622.8435572.423763.722213.7526803.219484.517844.6624223.616795.214985.5720924.115685.614465.7821194.115185.814115.8919144.514925.913656.01017405.014236.213426.11117554.913646.412916.41216085.413486.512616.5
График
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800897
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TЕще надо вернуть в акторы спинлок (который я на мутекс заменил) и перетестить.
А зачем нам два акторных релиза? Они отличаются.. ну 20 строками. Может их слить в одно приложение?
Для теста добавил, т.к. непонятно было в чем тормоз. Первый считает попиксельно, второй построчно. Какой оставить - не знаю, с точки зрения распараллеливания у второго меньше накладных расходов, думаю его надо оставить.

Вернул обратно блокировку спинлоками. Обновись. Затести, потом удалим первый.
maytonОбновил run-скрипты.
Добавил скрипт для Виндовс. Обновитесь.
Я со своим форком работаю, есть какая-то кнопка чтобы в него все твои изменения попали? Или удалить и форкнуть заново?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800907
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tmaytonпропущено...

А зачем нам два акторных релиза? Они отличаются.. ну 20 строками. Может их слить в одно приложение?
Для теста добавил, т.к. непонятно было в чем тормоз. Первый считает попиксельно, второй построчно. Какой оставить - не знаю, с точки зрения распараллеливания у второго меньше накладных расходов, думаю его надо оставить.

Вернул обратно блокировку спинлоками. Обновись. Затести, потом удалим первый.
maytonОбновил run-скрипты.
Добавил скрипт для Виндовс. Обновитесь.
Я со своим форком работаю, есть какая-то кнопка чтобы в него все твои изменения попали? Или удалить и форкнуть заново?
Есть. В средах разработки которые поддерживают гит есть кнопка Merge -> from branch -> remote/master.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800908
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonОтлично! Теперь-бы эти 3 столбика цифр нарисовать в Экцселе. Тремя цветами. У меня дурацкий Libre-Office.

Табличкой так получается, вторая колонка во сколько раз быстрее однопоточного

ПотоковN блоковПопиксельноПострочно1866687878204255321.645861.942711.9341612.130852.829622.8435572.423763.722213.7526803.219484.517844.6624223.616795.214985.5720924.115685.614465.7821194.115185.814115.8919144.514925.913656.01017405.014236.213426.11117554.913646.412916.41216085.413486.512616.5
График

Не очень понятно почему построчно быстрее чем блочно.
Возможно мы стоим в ожидании последнего блока и это
объясняет потери. Неравномерность рендеринга.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800928
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНе очень понятно почему построчно быстрее чем блочно.
Возможно мы стоим в ожидании последнего блока и это
объясняет потери. Неравномерность рендеринга.
Не, блочно все стартуют одновременно, но каждый поток заканчивает в разное время, в логе же все видно
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
     0: test 4 threads to file mt-4.ppm
     0: start thread#5437 (lines 511...384)
     0: start thread#5438 (lines 383...256)
     0: start thread#5439 (lines 255...128)
     0: start thread#5440 (lines 127...0)
  1141: thread#5437 (lines 511...384) finished
  2239: thread#5440 (lines 127...0) finished
  2407: thread#5438 (lines 383...256) finished
  3642: thread#5439 (lines 255...128) finished


Четверный за 1141 мс отработал, а третий за 3642 мс. А итого по последнему, отсюда тормоза.

В случае с акторами построчно: есть очередь с 512 заданиями (1 строка - 1 задание), есть N акторов, каждый актор берет задание из очереди, обсчитывает, берет следующее и т.д. Т.е. все потоки работают почти до конца. Затраты на извлечение из очереди незначительны.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800931
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смержил.

Это будет финальный вариант? Войдет в статистику?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800940
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСмержил.

Это будет финальный вариант? Войдет в статистику?
Это исходный вариант библиотеки акторов, надеюсь будет финальным. Покажи лог его запуска у тебя.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800966
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все-таки я не могу понять почему у тебя rand() так все затормозил.

Ты выше писал что у тебя Ubuntu 18.x.x LTS x64, я запускал у себя под Ubuntu 18.04.2 LTS x64 и проблема не повторялась.

Хотя был странный результат 21859864 на ноуте с AMD, сейчас перемеряю.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39800970
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну.. если множество потоков владеют состоянием функции rand() то они требуют
наложить volatile на переменную состояния этой функции. Это влечет за собой
синхронизацию памяти кешей всех заинтересованных потоков.

Выделение персональной переменной rand для каждого потока - решает эту проблему.

Я так думаю.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801088
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переделал блочный режим. Добавил помощь отстающим потокам. По скорости у меня оно чуть-чуть отстает от акторов построчно.

Обновись. Запусти у себя все три. Достаточно результатов 12-поточного запуска. Если будет близкое время - оставим блочный вариант, как самый понятный.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801091
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OK.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801092
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Готово. Под катом логи.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
#!/bin/bash -v

for i in {1..12}
do
 time ./card-raytracer-cpp-mt.exe mt-$i.ppm $i
done
compile Apr 14 2019 17:42:11
     0: test 1 threads to file mt-1.ppm
     1: start thread#0 (lines 0...511)
  8243: thread#0 finished
  8270: test end

real	0m8.273s
user	0m8.271s
sys	0m0.000s
compile Apr 14 2019 17:42:11
     0: test 2 threads to file mt-2.ppm
     1: start thread#0 (lines 0...255)
     1: start thread#1 (lines 256...511)
  3165: thread#1 help to thread#0  81 rows
  4211: thread#1 finished
  4226: thread#0 finished
  4235: test end

real	0m4.238s
user	0m8.458s
sys	0m0.004s
compile Apr 14 2019 17:42:11
     0: test 3 threads to file mt-3.ppm
     1: start thread#0 (lines 0...169)
     1: start thread#2 (lines 340...511)
     1: start thread#1 (lines 170...339)
  1576: thread#2 help to thread#1  112 rows
  2851: thread#2 help to thread#0  14 rows
  2964: thread#1 finished
  2977: thread#0 finished
  2986: thread#2 finished
  3009: test end

real	0m3.012s
user	0m8.950s
sys	0m0.000s
compile Apr 14 2019 17:42:11
     0: test 4 threads to file mt-4.ppm
     1: start thread#0 (lines 0...127)
     1: start thread#1 (lines 128...255)
     1: start thread#2 (lines 256...383)
     1: start thread#3 (lines 384...511)
  1087: thread#3 help to thread#1  88 rows
  2085: thread#0 help to thread#2  19 rows
  2230: thread#2 finished
  2231: thread#3 finished
  2237: thread#0 finished
  2249: thread#1 finished
  2261: test end

real	0m2.264s
user	0m8.972s
sys	0m0.004s
compile Apr 14 2019 17:42:11
     0: test 5 threads to file mt-5.ppm
     0: start thread#0 (lines 0...101)
     0: start thread#1 (lines 102...203)
     0: start thread#2 (lines 204...305)
     0: start thread#4 (lines 408...511)
     0: start thread#3 (lines 306...407)
  1021: thread#4 help to thread#2  66 rows
  1501: thread#3 help to thread#1  41 rows
  1833: thread#0 finished
  1834: thread#1 finished
  1844: thread#4 finished
  1849: thread#2 finished
  1855: thread#3 finished
  1877: test end

real	0m1.879s
user	0m9.236s
sys	0m0.004s
compile Apr 14 2019 17:42:11
     0: test 6 threads to file mt-6.ppm
     1: start thread#0 (lines 0...84)
     1: start thread#1 (lines 85...169)
     1: start thread#2 (lines 170...254)
     1: start thread#3 (lines 255...339)
     1: start thread#4 (lines 340...424)
     1: start thread#5 (lines 425...511)
   757: thread#5 help to thread#2  56 rows
   882: thread#4 help to thread#3  47 rows
  1313: thread#0 help to thread#1  23 rows
  1508: thread#1 finished
  1513: thread#4 finished
  1516: thread#0 finished
  1522: thread#5 finished
  1524: thread#3 finished
  1524: thread#2 finished
  1544: test end

real	0m1.547s
user	0m9.119s
sys	0m0.008s
compile Apr 14 2019 17:42:11
     0: test 7 threads to file mt-7.ppm
     1: start thread#0 (lines 0...72)
     1: start thread#1 (lines 73...145)
     1: start thread#2 (lines 146...218)
     1: start thread#3 (lines 219...291)
     1: start thread#4 (lines 292...364)
     1: start thread#5 (lines 365...437)
     1: start thread#6 (lines 438...511)
   635: thread#6 help to thread#3  60 rows
  1074: thread#5 help to thread#2  33 rows
  1100: thread#0 help to thread#4  20 rows
  1217: thread#0 help to thread#1  9 rows
  1432: thread#6 finished
  1444: thread#2 finished
  1446: thread#0 finished
  1446: thread#4 finished
  1454: thread#3 finished
  1454: thread#1 finished
  1462: thread#5 finished
  1482: test end

real	0m1.485s
user	0m10.144s
sys	0m0.012s
compile Apr 14 2019 17:42:11
     0: test 8 threads to file mt-8.ppm
     1: start thread#0 (lines 0...63)
     1: start thread#2 (lines 128...191)
     1: start thread#1 (lines 64...127)
     1: start thread#3 (lines 192...255)
     1: start thread#4 (lines 256...319)
     1: start thread#5 (lines 320...383)
     1: start thread#6 (lines 384...447)
     1: start thread#7 (lines 448...511)
   547: thread#7 help to thread#3  53 rows
   551: thread#6 help to thread#2  51 rows
   972: thread#0 help to thread#4  36 rows
  1133: thread#1 help to thread#5  19 rows
  1404: thread#6 finished
  1408: thread#5 finished
  1423: thread#1 finished
  1423: thread#0 finished
  1423: thread#7 finished
  1426: thread#4 finished
  1436: thread#3 finished
ERROR: Row not ready
  1442: thread#2 finished
  1449: test end

real	0m1.452s
user	0m11.399s
sys	0m0.008s
compile Apr 14 2019 17:42:11
     0: test 9 threads to file mt-9.ppm
     0: start thread#0 (lines 0...55)
     1: start thread#1 (lines 56...111)
     1: start thread#2 (lines 112...167)
     1: start thread#3 (lines 168...223)
     1: start thread#4 (lines 224...279)
     1: start thread#5 (lines 280...335)
     1: start thread#6 (lines 336...391)
     1: start thread#7 (lines 392...447)
     1: start thread#8 (lines 448...511)
   794: thread#7 help to thread#4  37 rows
   906: thread#8 help to thread#3  34 rows
  1063: thread#6 help to thread#2  26 rows
  1368: thread#7 help to thread#1  6 rows
  1454: thread#2 finished
  1467: thread#4 finished
  1473: thread#6 finished
  1475: thread#5 finished
  1479: thread#0 finished
  1487: thread#8 finished
  1493: thread#7 finished
  1493: thread#3 finished
  1495: thread#1 finished
  1511: test end

real	0m1.514s
user	0m13.324s
sys	0m0.008s
compile Apr 14 2019 17:42:11
     0: test 10 threads to file mt-10.ppm
     1: start thread#0 (lines 0...50)
     1: start thread#1 (lines 51...101)
     1: start thread#2 (lines 102...152)
     1: start thread#3 (lines 153...203)
     1: start thread#4 (lines 204...254)
     1: start thread#5 (lines 255...305)
     1: start thread#6 (lines 306...356)
     1: start thread#7 (lines 357...407)
     1: start thread#8 (lines 408...458)
     1: start thread#9 (lines 459...511)
   487: thread#7 help to thread#4  42 rows
   721: thread#8 help to thread#3  36 rows
   738: thread#9 help to thread#6  31 rows
  1110: thread#9 help to thread#5  20 rows
  1123: thread#6 help to thread#0  9 rows
  1226: thread#6 help to thread#1  4 rows
  1320: thread#2 finished
  1323: thread#7 finished
  1328: thread#1 finished
  1329: thread#3 finished
  1334: thread#4 finished
  1341: thread#5 finished
  1342: thread#6 finished
  1342: thread#8 finished
  1346: thread#0 finished
  1350: thread#9 finished
  1373: test end

real	0m1.376s
user	0m13.364s
sys	0m0.004s
compile Apr 14 2019 17:42:11
     0: test 11 threads to file mt-11.ppm
     1: start thread#0 (lines 0...45)
     1: start thread#1 (lines 46...91)
     1: start thread#2 (lines 92...137)
     1: start thread#3 (lines 138...183)
     1: start thread#4 (lines 184...229)
     1: start thread#5 (lines 230...275)
     1: start thread#6 (lines 276...321)
     1: start thread#8 (lines 368...413)
     1: start thread#9 (lines 414...459)
     1: start thread#10 (lines 460...511)
     2: start thread#7 (lines 322...367)
   656: thread#9 help to thread#3  33 rows
   699: thread#8 help to thread#5  31 rows
   729: thread#10 help to thread#6  27 rows
  1113: thread#7 help to thread#2  13 rows
  1189: thread#1 help to thread#4  5 rows
  1276: thread#7 finished
  1279: thread#0 finished
  1280: thread#9 finished
  1281: thread#2 finished
  1283: thread#4 finished
  1285: thread#8 finished
  1292: thread#10 finished
  1303: thread#1 finished
  1304: thread#5 finished
  1307: thread#6 finished
  1311: thread#3 finished
  1319: test end

real	0m1.322s
user	0m14.206s
sys	0m0.004s
compile Apr 14 2019 17:42:11
     0: test 12 threads to file mt-12.ppm
     1: start thread#0 (lines 0...41)
     1: start thread#1 (lines 42...83)
     1: start thread#2 (lines 84...125)
     1: start thread#3 (lines 126...167)
     1: start thread#4 (lines 168...209)
     1: start thread#5 (lines 210...251)
     1: start thread#6 (lines 252...293)
     1: start thread#7 (lines 294...335)
     1: start thread#8 (lines 336...377)
     4: start thread#11 (lines 462...511)
     4: start thread#10 (lines 420...461)
    16: start thread#9 (lines 378...419)
   599: thread#10 help to thread#5  31 rows
   615: thread#9 help to thread#7  29 rows
   710: thread#11 help to thread#3  26 rows
   847: thread#8 help to thread#4  23 rows
  1071: thread#9 help to thread#6  14 rows
  1077: thread#7 help to thread#2  8 rows
  1246: thread#2 finished
  1248: thread#11 finished
  1251: thread#3 finished
  1255: thread#10 finished
  1260: thread#5 finished
  1262: thread#0 finished
  1262: thread#8 finished
  1263: thread#6 finished
  1265: thread#9 finished
  1267: thread#1 finished
  1269: thread#7 finished
ERROR: Row not ready
  1272: thread#4 finished
  1283: test end

real	0m1.286s
user	0m14.992s
sys	0m0.024s

for i in {1..12}
do
 time ./card-raytracer-cpp-actor.exe actor-$i.ppm $i
done
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 1 threads to file actor-1.ppm ...
Init end: 38 msec
Time: 8729 msec

real	0m8.735s
user	0m9.332s
sys	0m0.813s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 2 threads to file actor-2.ppm ...
Init end: 54 msec
Time: 4582 msec

real	0m4.586s
user	0m9.843s
sys	0m0.853s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 3 threads to file actor-3.ppm ...
Init end: 127 msec
Time: 3171 msec

real	0m3.174s
user	0m9.973s
sys	0m0.577s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 4 threads to file actor-4.ppm ...
Init end: 178 msec
Time: 2427 msec

real	0m2.430s
user	0m9.851s
sys	0m0.609s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 5 threads to file actor-5.ppm ...
Init end: 261 msec
Time: 2055 msec

real	0m2.058s
user	0m10.380s
sys	0m0.482s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 6 threads to file actor-6.ppm ...
Init end: 260 msec
Time: 1759 msec

real	0m1.761s
user	0m10.554s
sys	0m0.458s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 7 threads to file actor-7.ppm ...
Init end: 284 msec
Time: 1637 msec

real	0m1.640s
user	0m11.393s
sys	0m0.493s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 8 threads to file actor-8.ppm ...
Init end: 294 msec
Time: 1588 msec

real	0m1.591s
user	0m12.664s
sys	0m0.430s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 9 threads to file actor-9.ppm ...
Init end: 308 msec
Time: 1519 msec

real	0m1.522s
user	0m13.515s
sys	0m0.466s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 10 threads to file actor-10.ppm ...
Init end: 307 msec
Time: 1448 msec

real	0m1.450s
user	0m14.166s
sys	0m0.506s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 11 threads to file actor-11.ppm ...
Init end: 279 msec
Time: 1399 msec

real	0m1.402s
user	0m14.933s
sys	0m0.541s
compile Apr 14 2019 17:42:07   LOCK: spinlock + Sleep(0)
lite_thread 12 threads to file actor-12.ppm ...
Init end: 281 msec
Time: 1373 msec

real	0m1.376s
user	0m14.977s
sys	0m0.636s

for i in {1..12}
do
 time ./card-raytracer-cpp-actor3.exe actor3-$i.ppm $i
done
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 1 threads to file actor3-1.ppm ...
Init end: 0 msec
Time: 8070 msec

real	0m8.072s
user	0m8.115s
sys	0m0.008s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 2 threads to file actor3-2.ppm ...
Init end: 1 msec
Time: 4258 msec

real	0m4.261s
user	0m8.542s
sys	0m0.024s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 3 threads to file actor3-3.ppm ...
Init end: 1 msec
Time: 2950 msec

real	0m2.953s
user	0m8.855s
sys	0m0.016s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 4 threads to file actor3-4.ppm ...
Init end: 1 msec
Time: 2229 msec

real	0m2.232s
user	0m8.935s
sys	0m0.016s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 5 threads to file actor3-5.ppm ...
Init end: 1 msec
Time: 1784 msec

real	0m1.787s
user	0m8.896s
sys	0m0.012s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 6 threads to file actor3-6.ppm ...
Init end: 0 msec
Time: 1535 msec

real	0m1.537s
user	0m9.207s
sys	0m0.004s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 7 threads to file actor3-7.ppm ...
Init end: 0 msec
Time: 1440 msec

real	0m1.442s
user	0m10.037s
sys	0m0.000s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 8 threads to file actor3-8.ppm ...
Init end: 1 msec
Time: 1404 msec

real	0m1.406s
user	0m11.181s
sys	0m0.000s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 9 threads to file actor3-9.ppm ...
Init end: 1 msec
Time: 1358 msec

real	0m1.360s
user	0m12.121s
sys	0m0.036s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 10 threads to file actor3-10.ppm ...
Init end: 2 msec
Time: 1328 msec

real	0m1.330s
user	0m13.181s
sys	0m0.000s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 11 threads to file actor3-11.ppm ...
Init end: 1 msec
Time: 1284 msec

real	0m1.286s
user	0m14.038s
sys	0m0.020s
compile Apr 14 2019 17:42:09   LOCK: spinlock + Sleep(0)
lite_thread 12 threads to file actor3-12.ppm ...
Init end: 1 msec
Time: 1260 msec

real	0m1.262s
user	0m14.933s
sys	0m0.000s

...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801098
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: sql
1.
ERROR: Row not ready


Это невозможно, но как-то случилось (((
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801105
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял в чем ошибка. Поправил и акторы убрал.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801136
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПонял в чем ошибка. Поправил и акторы убрал.
Не могу смержить. Конфликтует файл cpp-mt/run.sh
Это то куда я вносил изменения.
Тебе надо снова смержится с мастером и применить изменения.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801160
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonЯ смотрю после 4 потока еще перформанс растет. Расширю до 12.
kealon(Ruslan) был прав 21860492 тормозил rand()
...Это еще три года назад было выяснено.
Возьми реализацию ранда из моей топовой реализации (она не моя, какого то профи по шифрам).

И утомили спамить коммитами....Тестите там на кошках сначала чтоле =)
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801161
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зяма привет. Ты чего такой злой сегодня?
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801225
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TПонял в чем ошибка. Поправил и акторы убрал.
Не могу смержить. Конфликтует файл cpp-mt/run.sh
Это то куда я вносил изменения.
Тебе надо снова смержится с мастером и применить изменения.
У меня клиент TortoiseSVN, не нашел как смерживать с тобой. На сайте гитхаба тоже не нашел такой кнопки. Вобщем грохнул и форкнул заново.

Переделал многопоточный вариант. Теперь все просто и быстро: добавил состояние строки, все потоки тупо перебирают все строки и считают каждую попавшуюся в состоянии "не обработано". По окончании всех потоков запись результата в файл.

Запушил.

PS На этом думаю можно остановиться. Можно еще запись в файл запараллелить, но она всего 10-15 мс.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801329
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, OK. Я смержу.

Странно что ты выбрал тул который тебе не очень подходит.

Смотри. Я уж лет 10 не работал в Вижуал Студии. Но подозреваю что ты в ней все время.
Там есть поддержка гита. Вроде-бы тут пишут.

https://docs.microsoft.com/en-us/azure/devops/repos/git/rebase?view=azure-devops&tabs=visual-studio

Для смёрживания есть 2 стратегии.
- merge (это когда ты вливаешь в себя изменения из главной ветки (неважно какой но обычно это master)
- merge with rebase (это когда ты как-бы снова форкаешся от головной ревизии и применяешь шак за шагом к ней
все коммиты. Попутно ресолвишь конфликты).

Обе стратегии - правильные просто надо выбрать какая быстрее и удобнее.

Еще попробуй посмотри в такие утилиты как GitGui (GitBash) обычно они идут в паре. GitBash
это такое себе окружение баша в Windows.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801415
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСтранно что ты выбрал тул который тебе не очень подходит.
У меня в локалке Subversion SVN-сервер поднят уже лет 10 как, ну и клиент под него. Для работы хватает.

Надо будет как-нибудь потестить git-клиента. Думаю они меж собой уживутся, если оба поставить.
...
Рейтинг: 0 / 0
Особенности многопоточности виндовса и линукса, AMD и Intel
    #39801805
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смержил.
...
Рейтинг: 0 / 0
116 сообщений из 116, показаны все 5 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Особенности многопоточности виндовса и линукса, AMD и Intel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]