Tối ưu hóa thư viện Ansi C cho DSP


8

Tôi chưa quen với DSP? Đâu là một nguồn tài nguyên tốt cho các thuật toán DSP nguồn mở?

MATLAB rất tuyệt trong việc tạo protos nhưng một khi chúng ta chuyển sang mã hóa C, sẽ mất thời gian và cuối cùng chúng ta đã phạm quá nhiều sai lầm. Tôi đoán rằng phải có kho lưu trữ mã C tốt để triển khai các bộ lọc khác nhau, v.v ... Bất kỳ con trỏ nào cũng tốt.


1
Bạn chắc chắn cần phải mang lại một chút tập trung cũng như công phu trong câu hỏi của bạn. Bạn có thực sự lo lắng về Tốc độ thực hiện hoặc tạo và phần mềm độc lập? phạm vi (Ứng dụng) và mục tiêu là gì? Bạn đang cố gắng so sánh Matlab với C so với xyz? hoặc bạn đã thực sự quyết định trong C và cần tài nguyên ở đó? Any pointers are good- nói chung là một dấu hiệu thiếu nghiên cứu trước về phía bạn.
Dipan Mehta

Câu trả lời:


4

Phần # 1: Về việc so sánh:

Không có câu trả lời chung chung nào cho sự thay thế nhanh hơn cho Matlab. Tất cả phụ thuộc vào nền tảng bạn sử dụng.

@Hilmar asnwer chỉ ra các tính năng như SIMD - có thể có trong C. Nhưng nó sẽ yêu cầu hỗ trợ lan truyền lắp ráp cùng với C.

Đây là một so sánh rộng hơn:

  1. Nếu bạn đang làm việc trên một máy tính có mục đích chung (như x86 hoặc PPC), tôi đoán không có gì tốt hơn (và nhanh hơn) so với C.

  2. Nếu bạn đang làm việc trên phần cứng DSP chuyên dụng, (hoặc nền tảng nhúng như ARM) so với lắp ráp gốc sẽ vượt xa và C có thể không phù hợp với nó. (Mặc dù C có thể là sự cân bằng hợp lý giữa việc tạo phần mềm linh hoạt so với tốc độ thực hiện.

  3. Nếu bạn đang so sánh C với C ++, không giống như nhận thức chung - C ++ có thể được thực hiện tối ưu trong hầu hết bối cảnh với một số tính năng lập trình tốt hơn.

  4. Đối với các công cụ tiện dụng khác - bạn có thể xem một số công cụ tạo tập lệnh khác như TCL hoặc Lua. Đây chắc chắn là tốt hơn so với cấp thấp hơn nhưng có thể thỏa hiệp tốc độ.

Phần # 2: Tài liệu tham khảo

Tôi đoán rằng phải có kho lưu trữ mã C tốt để triển khai các bộ lọc khác nhau, v.v.

  1. OpenCV - có lẽ là tốt nhất cho các ứng dụng thị giác máy tính.

  2. ImLab 2.3 - là một ứng dụng đồ họa mã nguồn mở miễn phí cho Xử lý hình ảnh khoa học chạy trong Windows, Linux và nhiều hệ thống UNIX khác. Nó hỗ trợ nhiều cửa sổ, kiểu dữ liệu bao gồm số nguyên 32 bit, số thực 32 bit và số phức. Nó được triển khai trong C ++ và cả C để cung cấp một cách rất đơn giản để thêm các chức năng mới. Nó có nhiều hoạt động hình ảnh và hỗ trợ một số định dạng tập tin.

  3. ImageLib : là một thư viện lớp C ++ cung cấp xử lý hình ảnh và các phương tiện liên quan. Tập hợp chính của các lớp cung cấp nhiều loại hình ảnh và vectơ, với các mô đun bổ sung hỗ trợ lượng tử vô hướng và vectơ, biến đổi wavelet, biến đổi DCT và các hoạt động biểu đồ đơn giản.

  4. CImage - Thư viện xử lý ảnh mẫu C ++

  5. Thư viện Camellia là một thư viện Xử lý hình ảnh & Thị giác máy tính mã nguồn mở. Được viết bằng C, nó là đa nền tảng (Unix / Linux, Windows) và mạnh mẽ. Nó đã bao gồm rất nhiều chức năng để xử lý hình ảnh (lọc, toán học hình thái, ghi nhãn, cong vênh, vẽ, dự án / backproject, chuyển đổi màu sắc, tải / lưu hình ảnh, v.v.), hầu hết chúng đều được tối ưu hóa tốc độ cao. Nó cũng là tài liệu doxygen và các ví dụ về việc sử dụng được cung cấp.

  6. VXL : Thư viện C ++ cho nghiên cứu và triển khai thị giác máy tính

  7. Thư viện khoa học GNU (GSL) là một thư viện số cho các lập trình viên C và C ++

  8. Thư viện hạt nhân toán học Intel® (Intel® MKL) là một thư viện toán học điện toán gồm các thói quen toán học được xâu chuỗi rộng rãi, tối ưu hóa cho các ứng dụng đòi hỏi hiệu năng tối đa. Các hàm toán học cốt lõi bao gồm BLAS, LAPACK, ScaLAPACK1, bộ giải thưa thớt, biến đổi Fourier nhanh, toán học vectơ, v.v.

  9. Bạn có thể tham khảo cuốn sách: Recepies Numerical in C - và mã ví dụ.

tìm nhiều hơn từ đây: http://www.cs.cmu.edu/~cil/v-source.html


4

Điều khó hiểu là ANSI C không phải là một ngôn ngữ tốt cho DSP thời gian thực. Nhiều tính năng mà chip DSP thực không thể xử lý được trong ANSI C. Chúng bao gồm bộ tạo địa chỉ, địa chỉ ngược bit, địa chỉ vòng tròn, SIMD, phân đoạn bộ nhớ, nhiều bus, loại dữ liệu phân đoạn, nhân phân số, toán học điểm cố định nhất định, Vòng lặp không chi phí, v.v ... Do đó, hầu hết các trình biên dịch cho DSP đều có một bộ mở rộng ngôn ngữ (#pragma, trình biên dịch nội tuyến, từ khóa mới, v.v.). Tuy nhiên, đây không phải là ANSI và không thể mang theo được.

Viết bộ lọc FIR điểm cố định đơn giản trong ANSI C có thể dễ dàng hiệu quả hơn 10 lần so với sử dụng các phần mở rộng hoặc mã lắp ráp thích hợp.


0

Bạn có thể kiểm tra đặt sản phẩm coder MATLAB. Điều này cho phép bạn tạo mã C trực tiếp từ mã MATLAB của bạn mà không phải lo lắng về việc giới thiệu các lỗi của con người.

http://www.mathworks.co.uk/products/matlab-coder/?s_cid=HP_MI_matlabcoder

Tuy nhiên, nó chỉ hỗ trợ một tập hợp con của ngôn ngữ và yêu cầu giấy phép riêng, nhưng nó có thể phù hợp với nhu cầu của bạn.

Liên kết sau đây hữu ích để tìm tập hợp con được hỗ trợ của Hàm

http://www.mathworks.co.uk/help/toolbox/eml/ug/bq1h2z7-11.html


0

Ceemple là một môi trường tính toán kỹ thuật JIT C ++ nhanh chóng, bao gồm một số thư viện C / C ++ được tối ưu hóa cho máy tính kỹ thuật, do đó bạn có thể thực hiện cả việc tạo mẫu và triển khai nhanh trong Ceemple. Có sẵn (miễn phí) từ http://www.ceemple.com .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.