GPU có nhiều lõi hơn CPU và do đó, khi tính toán song song dữ liệu, GPU hoạt động tốt hơn nhiều so với CPU mặc dù GPU có tốc độ xung nhịp thấp hơn và nó thiếu một số tính năng quản lý lõi so với CPU.
Do đó, việc chạy tập lệnh python trên GPU có thể nhanh hơn tương đối so với CPU, tuy nhiên, cần lưu ý rằng để xử lý tập dữ liệu bằng GPU, trước tiên dữ liệu sẽ được chuyển vào bộ nhớ của GPU, có thể cần thêm thời gian, vì vậy nếu dữ liệu .
Bắt đầu.
Hiện tại chỉ hỗ trợ GPU NVIDIA và những GPU được liệt kê trên trang này. Nếu card đồ họa của bạn có lõi CUDA thì bạn có thể tiếp tục thiết lập mọi thứ.
Cài đặt.
Trước tiên, hãy đảm bảo rằng trình điều khiển Nvidia được cập nhật, bạn cũng có thể cài đặt cudatoolkit một cách rõ ràng từ đây. sau đó cài đặt Anaconda thêm anaconda vào môi trường trong khi cài đặt.
Sau khi hoàn thành tất cả các cài đặt, hãy chạy các lệnh sau trong dấu nhắc lệnh
conda install numba & conda install cudatoolkit
GHI CHÚ. Nếu Anaconda không được thêm vào môi trường thì hãy điều hướng đến cài đặt anaconda và tìm thư mục Scripts và mở dấu nhắc lệnh ở đó.
MÃ SỐ
Chúng tôi sẽ sử dụng số. trang trí jit cho chức năng chúng tôi muốn tính toán qua GPU. Trình trang trí có một số tham số nhưng chúng tôi sẽ chỉ làm việc với tham số đích. Mục tiêu yêu cầu jit biên dịch mã cho nguồn nào ["CPU" hoặc "Cuda"]. “Cuda” tương ứng với GPU. Tuy nhiên, nếu các
CPU được truyền dưới dạng đối số, sau đó jit sẽ cố gắng tối ưu hóa mã chạy nhanh hơn trên CPU và cũng cải thiện tốc độ.
Python3
from
numba
import
jit, cuda
import
numpy as np
# to measure exec time
from
without GPU: 8.985259440999926 with GPU: 1.42471725600012180
import
without GPU: 8.985259440999926 with GPU: 1.42471725600012182
without GPU: 8.985259440999926 with GPU: 1.42471725600012183
without GPU: 8.985259440999926 with GPU: 1.42471725600012184
without GPU: 8.985259440999926 with GPU: 1.42471725600012185
without GPU: 8.985259440999926 with GPU: 1.42471725600012186
without GPU: 8.985259440999926 with GPU: 1.42471725600012187
without GPU: 8.985259440999926 with GPU: 1.42471725600012188
without GPU: 8.985259440999926 with GPU: 1.42471725600012189
from
0 from
1from
2from
3from
4from
5from
6from
7from
8 from
9
without GPU: 8.985259440999926 with GPU: 1.42471725600012183
numba
1
numba
2numba
3from
8numba
5numba
6
without GPU: 8.985259440999926 with GPU: 1.42471725600012185
numba
8without GPU: 8.985259440999926 with GPU: 1.42471725600012187
without GPU: 8.985259440999926 with GPU: 1.42471725600012188
without GPU: 8.985259440999926 with GPU: 1.42471725600012189
from
0 from
1from
2from
3from
4from
5from
6from
7from
8 from
9
jit, cuda
2 jit, cuda
3from
8from
8jit, cuda
6jit, cuda
7
without GPU: 8.985259440999926 with GPU: 1.42471725600012187
jit, cuda
9from
8 from
3without GPU: 8.985259440999926 with GPU: 1.42471725600012187
import
3_______24_______8 import
5from
8 import
7import
8
without GPU: 8.985259440999926 with GPU: 1.42471725600012187
numpy as np
0_______24_______8 numpy as np
2without GPU: 8.985259440999926 with GPU: 1.42471725600012187
numpy as np
4without GPU: 8.985259440999926 with GPU: 1.42471725600012187
numpy as np
6from
2numpy as np
8numpy as np
9# to measure exec time
0# to measure exec time
1import
8
without GPU: 8.985259440999926 with GPU: 1.42471725600012187
numpy as np
0_______24_______8 numpy as np
2without GPU: 8.985259440999926 with GPU: 1.42471725600012187
# to measure exec time
8without GPU: 8.985259440999926 with GPU: 1.42471725600012187
numpy as np
6from
2from
2numpy as np
9# to measure exec time
0from
5đầu ra. dựa trên CPU = i3 6006u, GPU = 920M.
without GPU: 8.985259440999926 with GPU: 1.4247172560001218
Tuy nhiên, cần lưu ý rằng mảng đầu tiên được sao chép từ ram sang GPU để xử lý và nếu hàm trả về bất kỳ giá trị nào thì các giá trị được trả về sẽ được sao chép từ GPU sang CPU. Do đó, đối với các tập dữ liệu nhỏ, tốc độ của CPU tương đối nhanh hơn nhưng tốc độ có thể được cải thiện hơn nữa ngay cả đối với các tập dữ liệu nhỏ bằng cách chuyển mục tiêu là “CPU”. Cần đặc biệt cẩn thận khi chức năng được viết dưới jit cố gắng gọi bất kỳ chức năng nào khác thì chức năng đó cũng phải được tối ưu hóa với jit nếu không jit có thể tạo ra các mã thậm chí còn chậm hơn