Tốc độ của cython so với trăn

Keras được sử dụng bởi CERN, NASA, NIH và nhiều tổ chức khoa học khác trên thế giới [và vâng, Keras được sử dụng tại LHC]. Keras có tính linh hoạt cấp thấp để thực hiện các ý tưởng nghiên cứu tùy ý trong khi cung cấp các tính năng tiện lợi cấp cao tùy chọn để tăng tốc chu kỳ thử nghiệm

Mình tin rằng bạn đã nghe nhiều người hoang mang rằng Python quá chậm. Mình thấy mọi người chỉ so sánh Python với C về hiệu suất, nhưng không mấy ai so sánh về thời gian phát triển. Thời gian phát triển Python quá nhanh vì Python có vẻ "dễ viết mã" hơn một số ngôn ngữ khác và bạn không cần phải đối mặt với con trỏ hay quản lý bộ nhớ, v.v. v

Một trong những lý do khiến mình sử dụng Python rất nhiều mặc dù mình cũng biết cơ bản một số ngôn ngữ khác [không hạn chế C/C++] là vì trong hầu hết các trường hợp, thời gian phát triển quan trọng hơn hiệu quả. Nếu bạn làm nhanh sẽ được nhiều và có lẽ chỉ ở bước đưa ra sản phẩm bạn mới thực sự cần đến hiệu suất. Hơn nữa, Python có một cộng đồng rất lớn và các thư viện hỗ trợ nhiều vô kể nên bạn có thể làm rất nhiều thứ

Trong bài viết này mình sẽ nói về Cython thứ giúp code Python của bạn nhanh hơn nhiều lần để hạn chế điểm yếu đang chạy chậm của Python thuần. Theo định nghĩa từ infoworld,  "Cython là siêu bộ của Python biên dịch thành C, Cython kết hợp sự dễ dàng của Python và tốc độ của mã gốc". Tạm dịch Cython là một thay thế của python có thể biên dịch thành C, Cython kết hợp sự đơn giản của Python và tốc độ của C

Bài viết sẽ chia làm 2 phần chính, ở phần đầu mình sẽ giới thiệu một số cú pháp đơn giản của Cython và phần sau mình sẽ thử làm một ví dụ để so sánh tốc độ với Python thuần túy

Cython - Phần mở rộng C cho Python

Nếu bạn muốn code cú pháp dễ dàng như Python và hiệu suất cao như C thì Cython là lựa chọn của bạn. Bạn có thể sử dụng Python để viết các tiện ích mở rộng C cho Python. Mã Python của bạn sẽ được dịch sang mã C/C++ và được tối ưu hóa. Nó sẽ cung cấp cho bạn hiệu suất cao và bạn có thể sử dụng nó trong các dự án Python của mình.  

1. Cài đặt Cython

Lưu ý rằng bạn sẽ cần một trình biên dịch C dựa trên hệ điều hành bạn đang sử dụng, cái này có thể tự google nhé, mình sẽ không hướng dẫn ở đây. Sau đó, bạn cần cài đặt Cython như bên dưới

pip install Cython

2. Loi ích từ khai báo biến tĩnh [tĩnh]

Nếu bạn để ý rằng Python sẽ rất dễ dàng, bạn thực sự cần khai báo kiểu dữ liệu cho biến nhưng ở C/C++ thì đó lại là điều kiện bắt buộc. Điều này là một trong rất nhiều nguyên nhân làm cho C/C++ có hiệu quả tốt hơn. Bạn có thể tạm hiểu theo cách này, nếu bạn định nghĩa càng rõ ràng thì máy đỡ mất thời gian càng hiểu nghĩa từng dòng mã của bạn điều này đồng nghĩa với việc giúp máy xử lý nhanh hơn. D.  

Với Cython, bạn có thể thêm khai báo kiểu tĩnh cho các biến và hàm của bạn. Nó sẽ cung cấp cho bạn hiệu suất tốt hơn đấy. Bạn có thể sử dụng giống với mã C như int, float, double,

3. Khai báo một biến trong Cython

cdef int i = 10

Về cơ bản câu lệnh trên có nghĩa là bạn đang khai báo một biến số nguyên i  [kiểu int]

4. Khai báo một hàm trong Cython

cdef int square [int x]:

return x ** 2

Đoạn mã này khai báo một hàm có tên square lấy một tham số x có kiểu int và trả về một giá trị x**2 cũng là kiểu int

Có ba kiểu khai báo hàm là def, cdef và cpdef

  • def will only call from code Python
  • cdef only call from code Cython
  • cpdef then could be called both from C and Python

Ở phần tiếp theo ta sẽ thử làm ví dụ để so sánh nhé @@

Làm mã Python nhanh hơn với Cython

1. Tính giai đoạn thừa trong Python

Mã thử với python thuần như sau nhé

def factorial[n]:

    if  n >= 1:

        return n * factorial[n - 1]

    return 1

>>> Hãy làm nó nhanh hơn theo cách của Cython nhé. Đ.

2. Tạo một tệp. pyx

Facize 1 file fastfac. pyx with the content as after

________số 8

    if  n >= 1:

cdef int i = 100

    return 1

Hàm này sẽ trả về một giá trị có kiểu dữ liệu dài và tham số truyền vào cũng là kiểu dài

3. Tạo một tập tin thiết lập

Bây giờ chúng ta cần tạo một file setup. py to translate Cython to C with content as after

cdef int i = 102

cdef int i = 103

cdef int i = 104

4. Biên dịch code [biên dịch]

Để thực hiện biên dịch công việc, ta chạy dòng lệnh sau,

cdef int i = 105

trong đó, --inplace là tham số tạo một đối tượng tệp [. so] được hiện ra trong thư mục đang làm việc

5. So sánh các tốc độ

Bước cuối cùng là so sánh tốc độ =]]

cdef int i = 106

cdef int i = 107

cdef int i = 108

cdef int i = 109

cdef int square [int x]:0

cdef int square [int x]:1

cdef int square [int x]:2

=> Bạn thấy nó nhanh thế nào rồi chứ, thử chạy trên máy mình đi nhé. Lưu ý là code này mình đang dùng python 3 nhé, nếu có lỗi chắc bạn đang xài python 2x đó. Đ.

Kết luận

Với vài dòng lệnh, bạn đã làm cho mã Python của mình chạy nhanh hơn nhiều rồi đấy. Bài viết là một giới thiệu cơ bản kèm theo ví dụ, bạn có thể làm nhiều thứ hơn tùy theo nhu cầu của bạn. Nếu muốn làm nhiều thứ hơn hãy thử đọc docs của nó, link mình để ở phần tham khảo bên dưới nhé

Nếu bài viết hữu ích với bạn thì hãy cho mình một đánh giá tốt nhé. Thank you quan tâm. Chúc bạn học tốt

Người giới thiệu

https. // con trăn. đọcthedocs. io/vi/mới nhất/src/tutorial/cython_tutorial. html

https. //vừa phải. com/mathematicallygifted/cython-use-it-to-speed-up-python-code-with-examples-cd5a90b32fc7

Chủ Đề