powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Особенности многопоточности виндовса и линукса, AMD и Intel
25 сообщений из 116, страница 3 из 5
Особенности многопоточности виндовса и линукса, 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
25 сообщений из 116, страница 3 из 5
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Особенности многопоточности виндовса и линукса, AMD и Intel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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