در این مطلب، ویدئو برنامه نویسی موازی با (Py)OpenCL برای سرگرمی و سود با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:38:10
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:03,080 –> 00:00:06,299
سلام و خوش آمدید روی استیج ما
2
00:00:06,299 –> 00:00:08,849
باغبانی داریم. او دیروز
3
00:00:08,849 –> 00:00:11,250
در مورد برنامه نویسی موازی با PI
4
00:00:11,250 –> 00:00:14,130
OpenCL صحبت خواهد کرد. او در حال حاضر برای
5
00:00:14,130 –> 00:00:15,839
شهر کیپ تاون کار می کند، اگرچه
6
00:00:15,839 –> 00:00:18,720
این به محدودیت هایی که
7
00:00:18,720 –> 00:00:20,570
آنها دارند به اینجا آمدیم تا
8
00:00:20,570 –> 00:00:23,760
او در پایتون بوده است. برای چهارده سال مثبت یا منفی،
9
00:00:23,760 –> 00:00:27,480
بنابراین او حتی من را
10
00:00:27,480 –> 00:00:31,070
در این صنعت شکست می دهد و بدون هیچ صحبتی
11
00:00:31,070 –> 00:00:34,520
گوردون از شما متشکرم،
12
00:00:59,680 –> 00:01:05,630
آه، من یک انعکاس خوب بودم، بنابراین
13
00:01:05,630 –> 00:01:07,010
اگر می خواهید چیزها
14
00:01:07,010 –> 00:01:09,320
سریعتر و با دقت بیشتری در
15
00:01:09,320 –> 00:01:11,150
انواع عجیب و غریب پیش بروند، یک کار را انجام می دهم. دستگاه ها لطفا با
16
00:01:11,150 –> 00:01:14,450
من چت کنید من همیشه علاقه مند هستم و
17
00:01:14,450 –> 00:01:16,250
به نظر می رسد معیار اصلی من برای انتخاب مشاغل
18
00:01:16,250 –> 00:01:19,190
دشواری آنهاست، بنابراین
19
00:01:19,190 –> 00:01:22,370
نترسید، خوب است، بنابراین در این گفتگو من فقط می
20
00:01:22,370 –> 00:01:24,170
خواهم خیلی سریع در مورد اینکه چرا
21
00:01:24,170 –> 00:01:26,510
ممکن است بخواهید صحبت کنم. استفاده از چیزی
22
00:01:26,510 –> 00:01:28,280
مانند PI OpenCL را در نظر بگیرید که فقط
23
00:01:28,280 –> 00:01:30,770
اتصالات پایتون برای استانداردی به نام
24
00:01:30,770 –> 00:01:32,960
استاندارد محاسباتی opens dnews به نام
25
00:01:32,960 –> 00:01:35,780
open CL است و سپس من قصد دارم شما را با یک
26
00:01:35,780 –> 00:01:37,460
قدم بسیار سریع در مورد نحوه
27
00:01:37,460 –> 00:01:39,830
انجام چند مرحله زیبا آشنا کنم. چیزهای ساده در
28
00:01:39,830 –> 00:01:42,500
OpenGL و شما را با استفاده از
29
00:01:42,500 –> 00:01:45,440
چیزهایی مانند پردازنده های گرافیکی و حتی FPGA
30
00:01:45,440 –> 00:01:47,780
همه نوع دستگاه های جالبی هستند که در
31
00:01:47,780 –> 00:01:50,479
دسترس ما هستند. همچنین می خواهم
32
00:01:50,479 –> 00:01:52,130
کمی در مورد نحوه دستکاری
33
00:01:52,130 –> 00:01:53,750
حافظه و برخی از روش های آن صحبت کنم.
34
00:01:53,750 –> 00:01:55,369
در این چارچوب در معرض دید شما قرار می گیرد
35
00:01:55,369 –> 00:01:57,350
و سپس به شما می گویم که چگونه می توانید
36
00:01:57,350 –> 00:01:58,700
کارها را به صورت موازی انجام دهید،
37
00:01:58,700 –> 00:02:00,320
نه تنها همزمان، بلکه در واقع به
38
00:02:00,320 –> 00:02:04,310
طور موازی، تمام کدها و همچنین
39
00:02:04,310 –> 00:02:07,899
هدایای گربه نمکی در یک مخزن منفی موجود است،
40
00:02:07,899 –> 00:02:10,130
پس لطفاً با خیال راحت به
41
00:02:10,130 –> 00:02:12,650
درخواست های ساده نگاهی بیندازید هر
42
00:02:12,650 –> 00:02:15,500
کاری که مردم با مخازن github انجام می دهند خوب است،
43
00:02:15,500 –> 00:02:18,860
پس چرا می خواهید پایپ
44
00:02:18,860 –> 00:02:19,850
و بادبان را یاد بگیرید و من فکر می کنم واقعاً این
45
00:02:19,850 –> 00:02:21,920
سؤال این است که چرا اصلاً و به خوبی می خواهید محاسبات ناهمگن انجام دهید.
46
00:02:21,920 –> 00:02:24,890
47
00:02:24,890 –> 00:02:27,470
خبر بد این است که ناهار رایگان به
48
00:02:27,470 –> 00:02:29,420
پایان رسیده است و من در مورد کدام ناهار شما
49
00:02:29,420 –> 00:02:30,680
صحبت می کنم، در
50
00:02:30,680 –> 00:02:32,750
مورد یک ساعت پیش صحبت نمی کنم، در مورد
51
00:02:32,750 –> 00:02:35,120
این ناهار صحبت می کنم که متاسفم اگر شما
52
00:02:35,120 –> 00:02:36,500
صحبت کرده اید. کاری که من قبل از شما انجام داده ام
53
00:02:36,500 –> 00:02:38,360
احتمالاً قبلاً این نمودار را دیدهاید، اما
54
00:02:38,360 –> 00:02:39,860
اساساً آن خط سبز در بالا
55
00:02:39,860 –> 00:02:41,420
چیزی است که واقعاً
56
00:02:41,420 –> 00:02:44,060
با آن آشنا میشود و آن قانون مور است،
57
00:02:44,060 –> 00:02:47,690
بنابراین در محور y ما یک مقیاس ورود به سیستم داریم و
58
00:02:47,690 –> 00:02:52,130
در محور x زمان داریم و اساساً
59
00:02:52,130 –> 00:02:54,140
آن چیزی است که می گوید هر 18 ماه
60
00:02:54,140 –> 00:02:56,269
از دهه 1970، 9 ترانزیستور نصب شده ای
61
00:02:56,269 –> 00:02:58,070
که می توانیم روی یک تراشه
62
00:02:58,070 –> 00:03:01,850
قرار دهیم دو برابر می شود و این عالی است و
63
00:03:01,850 –> 00:03:03,380
اگر به آن دو خط آبی نگاه کنید برای مدت طولانی
64
00:03:03,380 –> 00:03:05,060
به این معنی بود که
65
00:03:05,060 –> 00:03:07,609
می توانید کد بنویسید. پس از هجده
66
00:03:07,609 –> 00:03:09,829
ماه، اکنون دو برابر سریعتر اجرا می شود،
67
00:03:09,829 –> 00:03:11,660
بدیهی است که پلتفرم ها و همه چیز
68
00:03:11,660 –> 00:03:13,430
در این مدت تغییر می کند، اما نیازی به کمک مالی برای
69
00:03:13,430 –> 00:03:16,159
شما نداشت و
70
00:03:16,159 –> 00:03:17,930
کد کامپیوتر شما با گذشت زمان بهتر و
71
00:03:17,930 –> 00:03:18,920
بهتر می شد،
72
00:03:18,920 –> 00:03:21,500
اما در سال 2005 در همان زمان من
73
00:03:21,500 –> 00:03:25,220
متأسفانه در حال یادگیری پایتون بود که به
74
00:03:25,220 –> 00:03:27,769
نوعی متوقف شد و ما به
75
00:03:27,769 –> 00:03:30,579
محدودیتهای فیزیکی اساسی رسیدیم که
76
00:03:30,579 –> 00:03:33,409
چگونه میتوانیم آن تعداد
77
00:03:33,409 –> 00:03:35,060
ترانزیستور را در تراشه به فرکانسهای ساعت ترجمه
78
00:03:35,060 –> 00:03:36,799
کنیم، بنابراین کد ما متوقف شد.
79
00:03:36,799 –> 00:03:38,959
به
80
00:03:38,959 –> 00:03:40,579
دلیل اینکه ما هیچ کاری انجام نمی دهیم سریعتر و سریعتر می شویم و مجبور شدیم
81
00:03:40,579 –> 00:03:42,170
82
00:03:42,170 –> 00:03:44,120
مسیر برنامه نویسی موازی را با داشتن
83
00:03:44,120 –> 00:03:46,579
چندین هسته روی یک تراشه و سپس
84
00:03:46,579 –> 00:03:47,810
داشتن نرم افزار مناسبی که می تواند
85
00:03:47,810 –> 00:03:49,670
از آن تماس های متعددی که
86
00:03:49,670 –> 00:03:53,959
در دسترس ما بود استفاده کنیم. اما یک خبر خوب
87
00:03:53,959 –> 00:03:57,379
در این است که گزینههای جایگزین وجود دارد، بنابراین
88
00:03:57,379 –> 00:03:59,900
این نموداری است که میدانید در
89
00:03:59,900 –> 00:04:02,180
ماشین فوقالعاده این مرد، او مرتباً
90
00:04:02,180 –> 00:04:05,269
این نمودار را بهروزرسانی میکند این است که شما رنگ قرمز دارید
91
00:04:05,269 –> 00:04:07,939
و ما پردازندههای گرافیکی MD داریم و سپس سبز، شما
92
00:04:07,939 –> 00:04:10,849
GPUهای NVIDIA دارید. و این مجدداً
93
00:04:10,849 –> 00:04:13,010
مقیاس لاگ در محور y است و این یک
94
00:04:13,010 –> 00:04:14,720
نقطه شناور با دقت دوگانه است و همانطور
95
00:04:14,720 –> 00:04:16,668
که می بینید در طول زمان تقریباً
96
00:04:16,668 –> 00:04:19,789
یک مرتبه بهتر از
97
00:04:19,789 –> 00:04:22,220
CPUهای درجه سرور کالای اینتل بوده اند که
98
00:04:22,220 –> 00:04:25,250
خط آبی است. در پایین وجود دارد، اما در
99
00:04:25,250 –> 00:04:27,830
همان زمان مصرف برق
100
00:04:27,830 –> 00:04:29,510
تقریباً یکسان باقی مانده است، پس به چه
101
00:04:29,510 –> 00:04:32,090
معنی است که هر زمان که زمان
102
00:04:32,090 –> 00:04:34,400
با نرخ های خطی افزایش می یابد،
103
00:04:34,400 –> 00:04:36,500
اما مصرف برق ما بسیار زیبا باقی مانده است.
104
00:04:36,500 –> 00:04:38,870
پایدار است، بنابراین به این معنی است که
105
00:04:38,870 –> 00:04:40,430
میزان عملکردی که میتوان به
106
00:04:40,430 –> 00:04:42,620
ازای هر وات انرژی یا به ازای هر وات توان دریافت کرد
107
00:04:42,620 –> 00:04:47,030
در حال بهبود است، بنابراین پیشنهاد میکند، اما
108
00:04:47,030 –> 00:04:48,289
به یاد داشته باشید که یک
109
00:04:48,289 –> 00:04:50,030
مرتبه تفاوت بین این دو وجود دارد،
110
00:04:50,030 –> 00:04:53,539
بنابراین در پردازندههای گرافیکی ما به طور فزایندهای بهتر میشویم.
111
00:04:53,539 –> 00:04:55,550
یا به طور فزاینده ای کارآمدتر انرژی
112
00:04:55,550 –> 00:04:58,639
در انجام محاسبات و یک
113
00:04:58,639 –> 00:05:00,860
خلاصه خوب از این است و متأسفانه
114
00:05:00,860 –> 00:05:03,020
این یک نمودار قدیمی است و اما آنچه
115
00:05:03,020 –> 00:05:05,449
ما در محور y داریم ژول در هر
116
00:05:05,449 –> 00:05:08,810
مگا هش برای انجام نمودار sha-256 یا دوتایی
117
00:05:08,810 –> 00:05:10,520
نمودار دو است. پنج شش که
118
00:05:10,520 –> 00:05:13,220
الگوریتم اثبات کار برای بیت کوین در
119
00:05:13,220 –> 00:05:14,810
محور y است، ما در هر ثانیه مگا هش داریم
120
00:05:14,810 –> 00:05:17,930
و آنچه شما در آنجا بالا آورده
121
00:05:17,930 –> 00:05:19,099
اید خط سبز است که
122
00:05:19,099 –> 00:05:23,029
CPU هایی است که خطوط قرمز NVIDIA را دارید.
123
00:05:23,029 –> 00:05:26,180
پردازندههای گرافیکی خطوط آبی پردازندههای گرافیکی AMD هستند و در
124
00:05:26,180 –> 00:05:27,320
خط زرد ما چیزهایی
125
00:05:27,320 –> 00:05:29,720
به نام FPGA داریم که اساساً تراشههایی هستند
126
00:05:29,720 –> 00:05:32,380
که میتوانید آنها را برای پیادهسازی معماریها دوباره برنامهریزی کنید
127
00:05:32,380 –> 00:05:34,610
و سپس با خطوط سیاه
128
00:05:34,610 –> 00:05:37,580
آنچه که امروزه بر استخراج بیتکوین غالب است،
129
00:05:37,580 –> 00:05:40,010
تراشههای اساساً تخصصی Asics ما را برنامهریزی کنید. برای
130
00:05:40,010 –> 00:05:42,320
انجام این محاسبات، این نمودار به
131
00:05:42,320 –> 00:05:45,680
ما نشان میدهد که اساساً
132
00:05:45,680 –> 00:05:48,800
عملکرد ما و عملکرد انرژی ما
133
00:05:48,800 –> 00:05:50,840
در کوه جواهرات که میتوانیم در هر محاسبه انجام دهیم،
134
00:05:50,840 –> 00:05:53,840
اگر بخواهید
135
00:05:53,840 –> 00:05:55,910
روی سختافزار عجیبتر و عجیبتر کار کنید، بهبود مییابد،
136
00:05:55,910 –> 00:05:59,480
بنابراین اگر مایل به تسلیم شدن هستید. CPU خود را انجام دهید
137
00:05:59,480 –> 00:06:00,980
و به چیزهای دیگر بروید،
138
00:06:00,980 –> 00:06:02,990
در واقع می توانید عملکرد بسیار خوبی
139
00:06:02,990 –> 00:06:04,760
داشته باشید، اما اگر این کار را نکنید، به برخی از
140
00:06:04,760 –> 00:06:09,710
محدودیت های اساسی دست خواهید یافت، بسیار خوب است، بنابراین همه اینها
141
00:06:09,710 –> 00:06:12,530
عالی به نظر می رسد، اما برخی از چالش ها وجود دارد
142
00:06:12,530 –> 00:06:14,630
و من این سه
143
00:06:14,630 –> 00:06:16,040
چالش را تعریف می کنم.
144
00:06:16,040 –> 00:06:18,590
امیدوارم شما را تشویق کنم که
145
00:06:18,590 –> 00:06:21,620
در این سخنرانی ها به شما نشان دهم که pi open CL و
146
00:06:21,620 –> 00:06:23,000
open CL می توانند به شما در حل این چالش ها کمک کنند این
147
00:06:23,000 –> 00:06:25,400
است که اولاً یک
148
00:06:25,400 –> 00:06:27,500
مشکل جهت گیری وجود دارد، بنابراین فهمیدن
149
00:06:27,500 –> 00:06:29,180
اینکه چگونه دستگاهی را که می خواهید بدست آورید.
150
00:06:29,180 –> 00:06:31,550
استفاده از عملاً برای انجام کاری
151
00:06:31,550 –> 00:06:34,150
شبیه به چشمک زدن یک LED
152
00:06:34,150 –> 00:06:36,650
که بسیار دشوار است، مشکل بعدی این
153
00:06:36,650 –> 00:06:38,390
است که در واقع
154
00:06:38,390 –> 00:06:39,890
میتوانید بیتهای بزرگتری از دادهها را به
155
00:06:39,890 –> 00:06:41,810
طور کارآمد حرکت دهید و بسازید. ارزش این
156
00:06:41,810 –> 00:06:43,970
را دارد که برای استفاده از این دستگاه دیگر وقت خود را انجام دهید
157
00:06:43,970 –> 00:06:46,490
و نکته این است و این
158
00:06:46,490 –> 00:06:47,930
مشکل ترین چیزی است که من
159
00:06:47,930 –> 00:06:50,390
در مورد آن قولی نمی دهم مشکل مفهومی این است
160
00:06:50,390 –> 00:06:52,160
که چگونه فکر می کنید چه کاری می خواهید
161
00:06:52,160 –> 00:06:54,710
انجام دهید و از سخت افزار محاسباتی که
162
00:06:54,710 –> 00:06:57,410
در دسترس شماست به بهترین نحو استفاده کنید. چگونه
163
00:06:57,410 –> 00:06:59,090
برنامه طبیعی را برای پیاده سازی خود دوست دارید.
164
00:06:59,090 –> 00:07:01,580
165
00:07:01,580 –> 00:07:02,720
166
00:07:02,720 –> 00:07:07,760
167
00:07:07,760 –> 00:07:08,990
برای
168
00:07:08,990 –> 00:07:12,260
اینکه به شما معرفی کنم که یک برنامه Open CL چیست که چگونه
169
00:07:12,260 –> 00:07:14,600
می توانید یک برنامه CL باز را کامپایل کنید و
170
00:07:14,600 –> 00:07:17,180
چگونه یک برنامه CL باز را اجرا کنید، اما قبل از اینکه
171
00:07:17,180 –> 00:07:19,730
این کار را انجام دهم باید به شما بگویم
172
00:07:19,730 –> 00:07:21,380
که این چیزی که مدام
173
00:07:21,380 –> 00:07:23,750
در مورد آن صحبت می کنم چیست؟ Open CL یک
174
00:07:23,750 –> 00:07:26,330
استاندارد محاسباتی ناهمگن است و آن استاندارد
175
00:07:26,330 –> 00:07:28,520
از دو AP
176
00:07:28,520 –> 00:07:32,060
و یک زبان برنامه نویسی که آن را زبان هسته
177
00:07:32,060 –> 00:07:34,310
می نامند تشکیل شده است و اما
178
00:07:34,310 –> 00:07:36,650
مهمترین چیز در مورد Open CL
179
00:07:36,650 –> 00:07:38,570
این است که توسط چیزی به نام
180
00:07:38,570 –> 00:07:39,950
گروه Khronos یا کنسرسیوم Chronos مدیریت
181
00:07:39,950 –> 00:07:41,259
182
00:07:41,259 –> 00:07:43,360
می شود. از همه فروشندگان بزرگ خرید کرده است،
183
00:07:43,360 –> 00:07:45,879
بنابراین اینها افراد اصلی هستند که
184
00:07:45,879 –> 00:07:47,499
در هیئت مدیره گروه Khronos
185
00:07:47,499 –> 00:07:50,590
در واقع توسط اپل راه اندازی شده است، اما می
186
00:07:50,590 –> 00:07:52,719
توانید ببینید که Md بازوی آنهاست زیرا
187
00:07:52,719 –> 00:07:55,449
اینتل آنها در ویدیوها وجود دارد، حتی
188
00:07:55,449 –> 00:07:56,949
افرادی که به تازگی وارد تراشه ای شده ام
189
00:07:56,949 –> 00:08:00,099
که افراد تجاری را در گوگل تخیل خود در گوگل معرفی
190
00:08:00,099 –> 00:08:01,810
می کند، بازیگر بزرگ دیگری
191
00:08:01,810 –> 00:08:05,229
در فضایی وجود دارد که آنها ورودی ها را ارائه می
192
00:08:05,229 –> 00:08:07,419
دهند و استاندارد را تعریف می کنند، بنابراین
193
00:08:07,419 –> 00:08:10,360
معنای آن این است که استاندارد
194
00:08:10,360 –> 00:08:12,189
استاندارد است که به درجات مختلف توسط دستگاه های مختلف پشتیبانی می شود.
195
00:08:12,189 –> 00:08:14,529
از این افراد، بنابراین
196
00:08:14,529 –> 00:08:17,469
با استفاده از این استاندارد یا اشتراک در
197
00:08:17,469 –> 00:08:19,029
این یک استاندارد، به طور بالقوه به
198
00:08:19,029 –> 00:08:20,979
شما این امکان را میدهد که دستگاههای همه این
199
00:08:20,979 –> 00:08:24,849
افراد را به روشی قابل حمل قابل حمل برنامهریزی کنید،
200
00:08:24,849 –> 00:08:26,650
بنابراین در عمل واقعاً چگونه به نظر میرسد
201
00:08:26,650 –> 00:08:28,060
، من فکر میکنم این یک نوع
202
00:08:28,060 –> 00:08:30,999
نظریه کافی است. اجازه دهید مقداری کدنویسی واقعی را
203
00:08:30,999 –> 00:08:33,969
وارد کنیم، بنابراین ما PI OpenCL را وارد می کنیم
204
00:08:33,969 –> 00:08:36,578
و numpy و PI OpenGL را وارد می کنیم که اتصالات برای
205
00:08:36,578 –> 00:08:40,328
API پایتون در OpenCL ApS از
206
00:08:40,328 –> 00:08:43,510
پایتون است، آنها به شدت به numpy
207
00:08:43,510 –> 00:08:45,519
an وابسته هستند d من مدتی دیگر به شما نشان خواهم داد که چرا
208
00:08:45,519 –> 00:08:48,459
باید اینطور باشد و بنابراین
209
00:08:48,459 –> 00:08:49,870
اولین کاری که می خواهیم انجام دهیم این
210
00:08:49,870 –> 00:08:52,600
است که عملکرد پلت فرم های دروازه OpenCL pi است که
211
00:08:52,600 –> 00:08:55,570
سیستم ما را پرس و جو می کند و به دنبال
212
00:08:55,570 –> 00:08:57,670
پلت فرم های fin CL یا پیاده سازی هایی است که در
213
00:08:57,670 –> 00:08:59,260
دسترس ما هستند. شما می توانید ببینید که این در
214
00:08:59,260 –> 00:09:01,089
واقع روی لپ تاپ من اجرا می شود و
215
00:09:01,089 –> 00:09:02,320
من سه پیاده سازی مختلف
216
00:09:02,320 –> 00:09:04,089
در دسترس دارم، یکی از اینتل
217
00:09:04,089 –> 00:09:07,329
یکی از انویدیا و دیگری به نام
218
00:09:07,329 –> 00:09:09,730
Paco همه زبان محاسباتی قابل حمل است
219
00:09:09,730 –> 00:09:12,579
و افراد تیزبین در میان شما متوجه خواهند شد
220
00:09:12,579 –> 00:09:14,829
که در -ویدئو یکی می گوید cuda و شما
221
00:09:14,829 –> 00:09:16,570
در واقع ممکن است نام CUDA را شنیده باشید
222
00:09:16,570 –> 00:09:18,550
که یک چارچوب برنامه نویسی برای
223
00:09:18,550 –> 00:09:21,550
پردازنده های گرافیکی NVIDIA است و در واقع روشی که انویدیا
224
00:09:21,550 –> 00:09:25,209
از pi OpenCL پشتیبانی می کند این است که
225
00:09:25,209 –> 00:09:27,399
کد OpenCL شما را به کد CUDA ترجمه می کند
226
00:09:27,399 –> 00:09:29,350
و سپس آن را در ابزارهای CUDA خود قرار می
227
00:09:29,350 –> 00:09:31,420
دهد. اگر تمایلی به یادگیری CUDA ندارید، این فقط یک
228
00:09:31,420 –> 00:09:33,279
روش پیچیده برای صحبت با
229
00:09:33,279 –> 00:09:34,329
ابزارهای
230
00:09:34,329 –> 00:09:38,470
CUDA است، اما اگر می خواهید
231
00:09:38,470 –> 00:09:40,569
واقعاً از پیاده سازی خاصی استفاده کنید،
232
00:09:40,569 –> 00:09:41,529
233
00:09:41,529 –> 00:09:43,329
من فقط یک قطعه کوچکی از کد
234
00:09:43,329 –> 00:09:46,089
برای انتخاب اولین پلتفرم که
235
00:09:46,089 –> 00:09:47,589
CUDA درون ویدیویی نامیده می شود، بنابراین من
236
00:09:47,589 –> 00:09:50,440
پلتفرم Nvidia و Nvidia را
237
00:09:50,440 –> 00:09:52,959
انتخاب می کنم و سپس انتخاب می کنم من می روم
238
00:09:52,959 –> 00:09:54,910
دستگاه های ویدیویی را در آن پلتفرم می فروشم
239
00:09:54,910 –> 00:09:57,139
اکنون فقط برای صحبت در مورد کمی در مورد
240
00:09:57,139 –> 00:09:58,910
انتزاعات برنامه نویسی که OpenCL
241
00:09:58,910 –> 00:10:00,860
معرفی می کند، بنابراین این API برنامه نویسی است
242
00:10:00,860 –> 00:10:03,889
که OpenCL در پایتون توسط OpenGL در معرض نمایش قرار می دهد و
243
00:10:03,889 –> 00:10:07,489
همه چیزهایی که زیر آنها خط کشیده شده
244
00:10:07,489 –> 00:10:09,769
است کلماتی به معنای خاص خود هستند،
245
00:10:09,769 –> 00:10:11,899
شما برنامه ای دارید که
246
00:10:11,899 –> 00:10:15,079
توابع خاصی به نام هسته دارد و
247
00:10:15,079 –> 00:10:16,699
شما یک فرآیند کامپایل را انجام می دهید. و
248
00:10:16,699 –> 00:10:20,149
باینریها را تولید میکند و آن باینریها
249
00:10:20,149 –> 00:10:22,220
سپس به یک زمینه خاص متصل میشوند و
250
00:10:22,220 –> 00:10:24,529
آن زمینه به یک پلتفرم گره خورده است، بنابراین یک
251
00:10:24,529 –> 00:10:26,389
پیادهسازی فروشندگان خاص و
252
00:10:26,389 –> 00:10:28,309
در آن زمینه دستگاههای خاصی وجود
253
00:10:28,309 –> 00:10:30,829
دارد که با یک
254
00:10:30,829 –> 00:10:33,949
فرمان متناظر Q مرتبط هستند و آن فرمان Q
255
00:10:33,949 –> 00:10:36,350
میتواند برای فراخوانی هستهها استفاده میشود
256
00:10:36,350 –> 00:10:39,559
که نگران نباشید اگر بیشتر آنهایی که
257
00:10:39,559 –> 00:10:41,629
میدانید فرود نیامدند، فقط بدانید که
258
00:10:41,629 –> 00:10:42,860
مهمترین چیز این است که شما ویژگیهای خاصی دارید.
259
00:10:42,860 –> 00:10:44,269
توابعی به نام کرنل ها که
260
00:10:44,269 –> 00:10:47,089
دوباره آنها را فراخوانی می کنیم، بنابراین اکنون می خواهیم
261
00:10:47,089 –> 00:10:48,350
262
00:10:48,350 –> 00:10:51,199
با استفاده از این API برنامه نویسی یک برنامه بسیار ساده بسازیم و
263
00:10:51,199 –> 00:10:52,339
مثالی که من در سرتاسر آن استفاده خواهم کرد
264
00:10:52,339 –> 00:10:56,360
یک جمع برداری بسیار ساده است، بنابراین Victor
265
00:10:56,360 –> 00:10:58,459
برخی بسیار ساده است. ما یک آرایه a
266
00:10:58,459 –> 00:11:01,009
داریم و Raby را بردیم و میخواهیم
267
00:11:01,009 –> 00:11:03,259
آنهایی را که به هم اضافه شدهاند عنصر
268
00:11:03,259 –> 00:11:04,999
به عنصر اضافه کنیم، بنابراین اولین
269
00:11:04,999 –> 00:11:06,920
عنصر a را به اولین عنصر B اضافه
270
00:11:06,920 –> 00:11:08,959
میکنیم و عنصر دوم را به عنصر دوم اضافه میکنیم. be
271
00:11:08,959 –> 00:11:11,600
etc من فکر می کنم شما بچه ها متوجه می شوید که بله و
272
00:11:11,600 –> 00:11:17,209
سپس نگاهی به آن بیندازید، بنابراین در اینجا
273
00:11:17,209 –> 00:11:18,949
ما زمینه ویدیویی را دریافت می کنیم و می توانید
274
00:11:18,949 –> 00:11:20,660
ببینید که من به آن می گویم که از چه دستگاه
275
00:11:20,660 –> 00:11:22,160
هایی در متن آنها استفاده خواهم کرد
276
00:11:22,160 –> 00:11:23,629
و آنها باید از
277
00:11:23,629 –> 00:11:26,449
همان پلتفرم بیایم و سپس مقداری
278
00:11:26,449 –> 00:11:28,100
منبع برنامه را دارم و نگران نباشید من
279
00:11:28,100 –> 00:11:29,899
فقط از رشته های چند خطی
280
00:11:29,899 –> 00:11:32,299
برای منبع برنامه خود استفاده نمی کنم، اما واقعاً
281
00:11:32,299 –> 00:11:34,490
می خواستم شما را تحت تأثیر قرار دهم که چقدر ساده یا
282
00:11:34,490 –> 00:11:36,829
چقدر کمی در اینجا باز می شود ممکن است در واقع
283
00:11:36,829 –> 00:11:39,259
نیاز به نوشتن داشته باشید، بنابراین چیزی که ما به اشتراک
284
00:11:39,259 –> 00:11:40,879
گذاشتیم این است که یک f داریم unction و اگر
285
00:11:40,879 –> 00:11:42,829
کمی C بلد باشید میشناسید یا حتی جاوا را
286
00:11:42,829 –> 00:11:44,749
میشناسید که به نظر میرسد
287
00:11:44,749 –> 00:11:47,329
ما چیزی به نام برخی داریم،
288
00:11:47,329 –> 00:11:49,249
تابعی به نام some و هستهها طبق
289
00:11:49,249 –> 00:11:51,309
تعریف همیشه توابع خالی هستند
290
00:11:51,309 –> 00:11:53,899
که ما در برخی از اشارهگرها ارسال میکنیم. به چیزهایی
291
00:11:53,899 –> 00:11:57,529
که B و C نامیده می شوند، پس از آن یک نوع شناسه دریافت می کنیم
292
00:11:57,529 –> 00:11:59,389
و دوباره نگران نباشید،
293
00:11:59,389 –> 00:12:01,639
من به این شناسه وارد می شوم، یعنی مدتی کوتاه
294
00:12:01,639 –> 00:12:04,639
و ما عناصر را از یک
295
00:12:04,639 –> 00:12:06,410
متناظر می گیریم که عنصر را از آن شناسه می دهد.
296
00:12:06,410 –> 00:12:08,449
پین کر اسپانسر آن ID را شکست می
297
00:12:08,449 –> 00:12:08,720
دهیم و ما
298
00:12:08,720 –> 00:12:10,759
آنها را در طول نتایج در C با هم جمع می کنیم و
299
00:12:10,759 –> 00:12:13,879
اکنون آن رشته منبع را گرفته
300
00:12:13,879 –> 00:12:15,529
ایم و واقعاً فقط یک
301
00:12:15,529 –> 00:12:18,709
رشته ضربی است که یک
302
00:12:18,709 –> 00:12:21,310
شی برنامه ایجاد کرده ایم و سپس روشی را فراخوانی می کنیم.
303
00:12:21,310 –> 00:12:24,439
این شی که ساخته شده است و
304
00:12:24,439 –> 00:12:26,750
این همان چیزی است که چگونه شما کد را کامپایل می کنید تا به
305
00:12:26,750 –> 00:12:28,430
خوبی اجرا شود، من باید کد را کامپایل کنم
306
00:12:28,430 –> 00:12:32,180
تا روی GPU لپ تاپم اجرا شود،
307
00:12:32,180 –> 00:12:34,279
بنابراین و این جایی است که برخی از چیزهای خوب
308
00:12:34,279 –> 00:12:36,019
در مورد استفاده از
309
00:12:36,019 –> 00:12:37,699
زبانی مانند زبان پایتون برای انجام
310
00:12:37,699 –> 00:12:39,350
کد سمت میزبان به عنوان همه مرحله نامیده می شود.
311
00:12:39,350 –> 00:12:42,649
چیزهای موجود در interact api این است که
312
00:12:42,649 –> 00:12:46,339
به صورت پویا
313
00:12:46,339 –> 00:12:48,439
نام هسته را به عنوان متد به شیء کامپایل شده متصل می
314
00:12:48,439 –> 00:12:51,439
کند، برخی در اینجا در حال پرس و جو از شی هسته هستند،
315
00:12:51,439 –> 00:12:54,800
اما می بینید که می گوید آه،
316
00:12:54,800 –> 00:12:56,990
چه زوج هایی در دسترس دارم، من
317
00:12:56,990 –> 00:12:59,689
یکی دارم. به نام Sun کدام یک از هستهای را که
318
00:12:59,689 –> 00:13:03,170
بهتازگی کامپایل کردهایم خوب است،
319
00:13:03,170 –> 00:13:04,699
بنابراین اکنون باید واقعاً کد را اجرا کنیم
320
00:13:04,699 –> 00:13:06,439
و این دومین API است که در زمان اجرای
321
00:13:06,439 –> 00:13:08,930
api است.
322
00:13:08,930 –> 00:13:11,240
323
00:13:11,240 –> 00:13:13,879
وقایع روی
324
00:13:13,879 –> 00:13:18,350
فرمان Q چیزی را به خاطر بسپارید بله
325
00:13:18,350 –> 00:13:19,850
فرمان Q که با
326
00:13:19,850 –> 00:13:22,550
دستگاه مرتبط است، بنابراین با قرار دادن رویدادها روی
327
00:13:22,550 –> 00:13:24,620
آنها و می توانند کپی های حافظه باشند یا
328
00:13:24,620 –> 00:13:28,100
می توانند فراخوانی هسته ما باشند، اما به
329
00:13:28,100 –> 00:13:28,720
طور پیش فرض
330
00:13:28,720 –> 00:13:31,639
OpenCL یک دسته از چارچوب
331
00:13:31,639 –> 00:13:33,470
برنامه نویسی فریم موازی است. آیا این
332
00:13:33,470 –> 00:13:35,689
در واقع به این معنی است که هر زمان که
333
00:13:35,689 –> 00:13:37,399
هسته را فراخوانی می کنیم، همیشه یک
334
00:13:37,399 –> 00:13:41,660
حلقه بزرگ بالای آن هسته وجود دارد و هر نمونه
335
00:13:41,660 –> 00:13:44,149
از تکرار آن حلقه یک آیتم کاری نامیده می شود
336
00:13:44,149 –> 00:13:47,389
و آن کار i تیمها
337
00:13:47,389 –> 00:13:48,920
به گروههایی گروهبندی میشوند که گروههای کاری نامیده میشوند
338
00:13:48,920 –> 00:13:51,589
و آنهایی که روی دستگاه ما اجرا
339
00:13:51,589 –> 00:13:52,699
میشوند و مقداری حافظه
340
00:13:52,699 –> 00:13:54,889
در آن دستگاه موجود است که آن
341
00:13:54,889 –> 00:13:56,779
موارد کاری میتوانند با هم تعامل داشته باشند.
342
00:13:56,779 –> 00:13:57,949
343
00:13:57,949 –> 00:14:00,230
این در
344
00:14:00,230 –> 00:14:03,800
واقع مانند داخل پایتون به نظر می رسد توسط nipt خوب
345
00:14:03,800 –> 00:14:05,930
اول من فقط می خواهم به شما نشان دهم
346
00:14:05,930 –> 00:14:07,370
که کد شبیه به چه چیزی است، بنابراین این
347
00:14:07,370 –> 00:14:08,509
تابع کوچکی است که من می نویسم
348
00:14:08,509 –> 00:14:10,670
که قرار است هسته را اجرا کند تا به عنوان یک
349
00:14:10,670 –> 00:14:12,620
آرگومان من. m ارسال فرمان Q من
350
00:14:12,620 –> 00:14:14,180
نام هسته ای را که به آن علاقه مندم ارسال می کنم
351
00:14:14,180 –> 00:14:16,100
و منظورم از این
352
00:14:16,100 –> 00:14:18,470
روش روشی است که با حرفه ای من مرتبط است
353
00:14:18,470 –> 00:14:21,259
فقط یک اندازه جهانی که
354
00:14:21,259 –> 00:14:22,460
تعداد
355
00:14:22,460 –> 00:14:24,320
تکرار آن حلقه بزرگ از موارد کاری است که من
356
00:14:24,320 –> 00:14:26,960
میخواهم اجرا کنم، سپس چند تاپل ورودی
357
00:14:26,960 –> 00:14:28,580
و خروجی را ارسال میکنم و توضیح
358
00:14:28,580 –> 00:14:30,230
میدهم که آنها در یک ثانیه چیست و سپس
359
00:14:30,230 –> 00:14:31,970
اندازه محلی را مشخص میکنم که
360
00:14:31,970 –> 00:14:34,190
تعداد آیتمها در هر گروه کاری است دوباره
361
00:14:34,190 –> 00:14:36,890
این یک جزئیات است. قرار
362
00:14:36,890 –> 00:14:38,390
است انجام دهیم این است که برخی از آنها را انجام دهیم عملیات کپی کردن،
363
00:14:38,390 –> 00:14:41,089
بنابراین ما
364
00:14:41,089 –> 00:14:42,649
مهر باز را کپی می نامیم و لعنتی-یک
365
00:14:42,649 –> 00:14:44,240
منبع را فاصله می دهیم و یک مقصد را مشخص می کنیم
366
00:14:44,240 –> 00:14:46,399
و اینجاست که آنها وارد می
367
00:14:46,399 –> 00:14:48,770
شوند زیرا در آن تاپل یک
368
00:14:48,770 –> 00:14:51,110
آرایه مبدا و یک بافر وجود دارد و
369
00:14:51,110 –> 00:14:53,690
آن آرایه یک آرایه numpy و
370
00:14:53,690 –> 00:14:55,760
بافر این است که این یک شی است که
371
00:14:55,760 –> 00:14:57,350
ما می خواهیم ایجاد کنیم، نشان دهنده
372
00:14:57,350 –> 00:15:00,410
حافظه دستگاه است، سپس ما در حال
373
00:15:00,410 –> 00:15:02,390
ساخت برخی آرگومان ها هستیم
374
00:15:02,390 –> 00:15:04,040
که قرار است به هسته خود منتقل کنیم
375
00:15:04,040 –> 00:15:05,810
و آرگومان هایی که ارسال می کنیم. in
376
00:15:05,810 –> 00:15:09,320
فقط نام بافرهایی است که
377
00:15:09,320 –> 00:15:11,330
می خواهیم روی آنها کار کند، بنابراین همان چیزی است
378
00:15:11,330 –> 00:15:14,330
که a و B ما و من می بینیم و
379
00:15:14,330 –> 00:15:17,300
سپس در واقع هسته را اجرا می کنیم و
380
00:15:17,300 –> 00:15:18,470
این تنها کاری است که شما برای اجرای واقعی هسته باید انجام دهید.
381
00:15:18,470 –> 00:15:20,120
آن یک خط و
382
00:15:20,120 –> 00:15:22,130
سپس ما میخواهیم نتیجه را کپی کنیم
383
00:15:22,130 –> 00:15:24,680
و سپس درست در انتها منتظر میشویم
384
00:15:24,680 –> 00:15:27,170
تا همه کار به خوبی تمام شود، اما
385
00:15:27,170 –> 00:15:28,400
این کمی انتزاعی
386
00:15:28,400 –> 00:15:31,310
387
00:15:31,310 –> 00:15:33,050
است. ما باید مطمئن شویم که
388
00:15:33,050 –> 00:15:35,660
کاری که انجام می دهیم این است منطقی است، بنابراین کاری که
389
00:15:35,660 –> 00:15:37,610
میخواهیم انجام دهیم این است که مطمئن
390
00:15:37,610 –> 00:15:40,040
شویم نتایج مرجع C
391
00:15:40,040 –> 00:15:41,630
را در این تابع در اینجا ایجاد
392
00:15:41,630 –> 00:15:44,810
میکنیم، جایی که یک بعلاوه B اضافه میکنیم و
393
00:15:44,810 –> 00:15:47,660
آن را به طور مطلق از C خود حذف میکنیم. و
394
00:15:47,660 –> 00:15:49,880
سپس ما به دنبال این هستیم که در هر نقطه ای ببینیم
395
00:15:49,880 –> 00:15:52,100
که آیا اعداد برای من فرق می
396
00:15:52,100 –> 00:15:53,540
کند وقتی که ما محاسبه مرجع خود را
397
00:15:53,540 –> 00:15:55,730
که در CPU میزبان خود
398
00:15:55,730 –> 00:15:59,810
انجام داده ایم در مقایسه با توصیه خود انجام داده ایم، بنابراین
399
00:15:59,810 –> 00:16:02,060
در اینجا می رویم
400
00:16:02,060 –> 00:16:03,980
در واقع آن را پیاده سازی می کنیم، ما
401
00:16:03,980 –> 00:16:07,339
یک میلیون عدد دو تا 22 را
402
00:16:07,339 –> 00:16:09,560
به توان 20 انجام خواهیم داد که در ساخت دو
403
00:16:09,560 –> 00:16:13,040
آرایه، شناورهای numpy خواهند بود
404
00:16:13,040 –> 00:16:16,579
و ما یک آرایه مقصد ایجاد
405
00:16:16,579 –> 00:16:18,110
می کنیم که C ما است. بنابراین برای شروع آن را
406
00:16:18,110 –> 00:16:20,600
خالی می کنیم و سپس کاری که انجام می دهیم این
407
00:16:20,600 –> 00:16:22,970
است که در حال ایجاد اشیاء بافر خود هستیم و
408
00:16:22,970 –> 00:16:24,470
من در یک ثانیه وارد آن می شوم زیرا
409
00:16:24,470 –> 00:16:26,029
این به
410
00:16:26,029 –> 00:16:31,040
سیستم حافظه OpenGL مربوط می شود و سپس چه ما می
411
00:16:31,040 –> 00:16:34,250
خواهیم انجام دهیم این است که یک صف دستور ایجاد می کنیم
412
00:16:34,250 –> 00:16:35,640
که در
413
00:16:35,640 –> 00:16:38,399
زمینه chr باشد conte را به خاطر بسپاریم xt
414
00:16:38,399 –> 00:16:40,589
دستگاه ما را در داخل خود دارد و سپس ما در
415
00:16:40,589 –> 00:16:43,829
واقع آن دستههای ورودی را ایجاد میکنیم
416
00:16:43,829 –> 00:16:45,930
که جفت شدن آرایه مبدا
417
00:16:45,930 –> 00:16:48,060
و بافر مقصد یا
418
00:16:48,060 –> 00:16:49,890
بافر سس و آرایه مقصد را
419
00:16:49,890 –> 00:16:51,540
که میخواهیم کپی کنیم را به خاطر بسپاریم.
420
00:16:51,540 –> 00:16:54,420
کد خود را به خوبی اجرا کنید و سپس
421
00:16:54,420 –> 00:16:55,829
نتایج خود را بررسی میکنیم و
422
00:16:55,829 –> 00:16:58,560
میبینیم که عملکرد فوقالعادهای که روی GPU انجام دادهایم
423
00:16:58,560 –> 00:17:01,980
دقیقاً مشابه آنچه در CPU بود
424
00:17:01,980 –> 00:17:03,510
است، چیز دیگری که میدانید
425
00:17:03,510 –> 00:17:04,980
در مورد علاقهمند شدن به آن این است که چقدر طول میکشد.
426
00:17:04,980 –> 00:17:07,709
خوشبختانه این کار برای اجرا کردن چیزهایی است که
427
00:17:07,709 –> 00:17:09,569
ipython این زمان عملکرد جادویی خوب را دارد
428
00:17:09,569 –> 00:17:11,849
– به همین دلیل است که من در واقع
429
00:17:11,849 –> 00:17:14,099
کل اجرای برنامه را
430
00:17:14,099 –> 00:17:17,010
که شامل کپی حافظه همه در
431
00:17:17,010 –> 00:17:18,510
یک تابع است، نمونهسازی کردم تا بتوانم کارهایی مانند
432
00:17:18,510 –> 00:17:20,490
فقط نامیده میشود انجام دهم. و
433
00:17:20,490 –> 00:17:22,559
به سرعت بررسی می کند که چقدر سریع
434
00:17:22,559 –> 00:17:24,299
درست کار می کند، در این مورد زیاد نگران
435
00:17:24,299 –> 00:17:26,010
انحراف معیار نباشید
436
00:17:26,010 –> 00:17:27,329
زیرا می دانید که ما
437
00:17:27,329 –> 00:17:30,169
تعداد نسبتا کمی از اجراها را انجام می دهیم
438
00:17:30,169 –> 00:17:35,309
خوب است، بنابراین حافظه را دستکاری می کنیم، بنابراین
439
00:17:35,309 –> 00:17:37,350
شما اکنون اصول اولیه نحوه اجرای آن را مشاهده کرده اید. شما از
440
00:17:37,350 –> 00:17:40,410
OpenCL، api زمان اجرا و
441
00:17:40,410 –> 00:17:42,270
برنامه نویسی هشت، api برنامه نویسی
442
00:17:42,270 –> 00:17:43,559
در زمان اجرا استفاده می کنید، بله، در واقع
443
00:17:43,559 –> 00:17:45,570
برنامه ها اجرا می شوند، اجازه دهید کمی
444
00:17:45,570 –> 00:17:47,190
بیشتر در مورد نحوه عملکرد حافظه در
445
00:17:47,190 –> 00:17:49,020
کل این سیستم صحبت کنیم که چگونه داده ها را منتقل می کنید که
446
00:17:49,020 –> 00:17:52,919
مشکل دوم دوباره شناسایی شده است به طوری که
447
00:17:52,919 –> 00:17:56,240
نباید. چیزی که OpenCL معرفی می کند
448
00:17:56,240 –> 00:17:58,650
این است که حافظه جهانی وجود دارد و حافظه ثابت وجود دارد
449
00:17:58,650 –> 00:18:00,929
و هر مورد کاری روی
450
00:18:00,929 –> 00:18:04,429
دستگاه می تواند اکنون به آن چیزها دسترسی
451
00:18:04,429 –> 00:18:06,510
داشته باشد زیرا به یاد داشته باشید که به شما گفتم
452
00:18:06,510 –> 00:18:09,030
موارد کاری آن تکرارهای حلقه بزرگ ما را
453
00:18:09,030 –> 00:18:11,250
می توان با هم در
454
00:18:11,250 –> 00:18:14,160
گروه های کاری گروه بندی کرد که در واقع می توانند دسترسی به
455
00:18:14,160 –> 00:18:16,559
چیزی به نام حافظه محلی را به اشتراک بگذارید و
456
00:18:16,559 –> 00:18:19,620
همانطور که از نام ممکن است نشان دهد که
457
00:18:19,620 –> 00:18:23,059
موارد کاری فردی می توانند به حافظه خصوصی دسترسی داشته باشند
458
00:18:23,059 –> 00:18:25,590
اکنون ممکن است تعجب کنید که ممکن است
459
00:18:25,590 –> 00:18:28,500
در مورد توصیف
460
00:18:28,500 –> 00:18:30,480
موارد کاری به عنوان تکرارهای یک گروه بزرگ بسیار شرور باشید
461
00:18:30,480 –> 00:18:34,290
و بله حقیقت این است که استاندارد
462
00:18:34,290 –> 00:18:36,150
هیچ تضمینی نمی دهد که چشم های کاری در کدام
463
00:18:36,150 –> 00:18:37,860
یک ارزش هستند یا در واقع
464
00:18:37,860 –> 00:18:40,140
ممکن است به طور موازی ارزیابی شوند، بنابراین
465
00:18:40,140 –> 00:18:41,520
به همین دلیل است که شما وقتی به این
466
00