2009-09-13 12 views
9

Tôi hiện đang tham gia một lớp toán ở trường gọi là "Máy tính khoa học" và giáo sư nói với chúng tôi rằng C là ngôn ngữ phổ biến nhất được sử dụng cho máy tính khoa học, và tôi tự hỏi chính xác giáo sư này là như thế nào?C có thực sự được sử dụng cho nhiều máy tính khoa học không?

+3

Bạn cũng có thể quan tâm http://stackoverflow.com/questions/38239/practices-for-programming-in-a-scientific-environment. – dmckee

+0

[This] (http://scicomp.stackexchange.com/questions/5159/do-i-need-to-learn-c) và [câu hỏi tương tự] (http://scicomp.stackexchange.com/questions/5135/soft-question-where-does-python-fit-into-the-picture) thường được thảo luận tại [Computational Science] (http://scicomp.stackexchange.com). Đối với bất cứ ai tình cờ gặp chủ đề này, nó đáng xem. – Damien

Trả lời

23

Trong doanh nghiệp của tôi (vật lý hạt), chúng tôi chuyển khá nhiều từ fortran 77 thành C++ và python. Những người trong chúng tôi chăm sóc về lập trình đều biết c, nhưng nó chỉ được viết cho các ứng dụng thích hợp (bảng DAQ nhúng, trình điều khiển mục đích đặc biệt, ...).

Nhưng việc học c sẽ cung cấp cho bạn nền tảng vững chắc để lập trình và hiếm khi sinh lời để tranh luận với các giáo sư.

+7

"và hiếm khi có lợi nhuận để tranh luận với các giáo sư" ... lol –

+0

+1 Tôi đã viết một cái gì đó tương tự (đến từ một nhà vật lý hạt trong đào tạo ;-). –

7

Từ những gì tôi đã nghe Fortran là rất phổ biến cho các mục đích khoa học, nhưng C là mục đích chung đủ cho một số nó là một giải pháp tốt cho hầu hết mọi loại lập trình.

11

Tôi không nghĩ rằng câu trả lời của giáo sư của bạn đang phục vụ bạn tốt ngay cả khi nó là chính xác.

Theo kinh nghiệm của tôi với tư cách là nhà tư vấn cho máy tính khoa học và hệ thống dữ liệu C chắc chắn được sử dụng rất nhiều, nhưng Fortran và C++ cũng vậy. Python là ngôn ngữ kịch bản thường được sử dụng nhiều nhất.

Tôi nghĩ rằng điều này sẽ thay đổi. Các thỏa thuận lớn bây giờ là tính toán song song và điều này là đau đớn (MPI bất cứ ai?) Trong các ngôn ngữ truyền thống tôi đã đề cập. Suy đoán của tôi là rất nhiều sự song song sẽ (và nên) được chuyển sang các máy ảo: Java hoặc .NET; tức là, tôi nghĩ rằng sự song song phải là công việc của JIT. Cho dù điều đó sẽ được kích hoạt, ví dụ: Fortress hoặc một trong các ngôn ngữ truyền thống, tôi không biết. Intel đang đẩy parallel tools cho C/C++, nhưng tôi tự hỏi nếu một cái gì đó như Terracotta có thể tốt hơn trong thời gian dài (tôi chưa từng nghe ai trong cộng đồng khoa học đã thử nó --- tài chính lớn, nhưng họ không mở).

Nếu câu hỏi là bạn nên học cách làm gì trong khoa học, thì điều đầu tiên tôi muốn nói là bạn có nhiều khả năng được tuyển dụng kỹ năng khoa học hơn là kỹ năng lập trình của bạn. trạng thái xin lỗi của rất nhiều mã khoa học, để biết thêm về điều này, hãy xem this SO topic). Nếu bạn sẽ được thuê cho kỹ năng lập trình của bạn (có thể là HPC), sau đó xem xét rằng theo ý kiến ​​của giáo sư này, những người có thể đã lỗi thời cho các dự án mới hơn trong tương lai không xa. Nó sẽ không làm tổn thương để biết một số Python, mặc dù, bao gồm NumPy.

+0

Đây là một khái niệm thú vị. Không phải trường hợp trong doanh nghiệp của tôi vừa nãy --- phần lớn việc crunching lớn của chúng tôi là IO bị ràng buộc hoặc gần như vậy (rất nhiều tra cứu bảng dữ liệu và viết kết quả ở nhiều giai đoạn) --- nhưng rất thú vị. Ngay bây giờ chúng tôi song song trên cơ sở từng tệp đầu vào và chạy trên các cụm được ghép lỏng lẻo. Quả cầu pha lê của tôi có mây, nên tôi không thể nói khi nào có thể thay đổi. – dmckee

4

Rất nhiều "máy tính khoa học" được xử lý trong Mathematica, Matlab và các công cụ tương tự khác.

Vâng ... dưới mui xe, Matlab được viết bằng C hoặc C++, tôi nghĩ, nhưng nhiều phần của Mathematica được viết bằng Mathematica. Để chắc chắn, vì lý do lịch sử, và cũng bởi vì đặc điểm nội tại của C, nhiều thư viện phần mềm máy tính khoa học và công nghệ cao và được viết bằng C/C++.

Tôi nghi ngờ C/C++ sẽ tiếp tục tận hưởng lợi thế cho nhiều ứng dụng hiệu suất cao và thời gian thực. tối ưu hóa các vòng chặt chẽ, và để giao tiếp với các thành phần khác nhau, chúng là các phần vật lý của trang bị, hoặc các phần tử phần mềm chẳng hạn như ví dụ các khuôn khổ tính toán song song.

Như dmckee đã chỉ ra, nghiên cứu về c cung cấp nền tảng tốt cho lập trình ở quy mô lớn, ít nhất là lập trình thủ tục. Nó cũng có các ứng dụng thực tế, do đó, ý kiến ​​của giáo sư của bạn có một số ủng hộ mạnh mẽ vào thời điểm này. Nhưng làm!tiếp tục thách thức, trân trọng, sự khôn ngoan nhận được từ các giáo sư và người lớn tuổi, hiểu rằng đôi khi giống như những bậc thầy zen tốt, họ đặt bạn vào một con đường, không quá nhiều cho điểm đến mà là cho du lịch/quá trình.

+2

Vâng tất cả các đại số tuyến tính nặng nâng trong Matlab được giao cho LAPACK, được xây dựng trên Fortran. Vì vậy, bằng cách sử dụng Matlab bạn ngầm sử dụng mã biên dịch Fortran cho hầu hết các hoạt động tốn thời gian. –

+0

@TimLin FWIW, các thường trình FFT của MATLAB là mã C được tạo ra bởi mã nguồn OCaml, ví dụ. –

1

C được sử dụng rộng rãi trong lập trình. Hầu hết các lập trình viên của chúng tôi đã từng viết mã trong C, đặc biệt là khi chúng tôi đang học đại học. Đó chỉ là tùy chọn giáo sư của bạn, tôi đoán :-)

5

Đối với tin sinh học và sinh học tính toán, C rất phổ biến.

1

C có thực sự được sử dụng cho nhiều máy tính khoa học không?

Tính toán khoa học bao gồm nhiều thứ khác nhau và do đó, nhiều ngôn ngữ lập trình khác nhau được sử dụng cho máy tính khoa học.

Theo truyền thống, máy tính khoa học có nghĩa là tính toán hiệu suất cao và bị giới hạn phạm vi đối với đại số tuyến tính và một số phương pháp phổ (ví dụ: FFT) và hầu hết được thực hiện ở Fortran. Kể từ đó, bề rộng của máy tính khoa học đã mở rộng rất nhiều với nhiều người đang xem xét tính toán kỹ thuật (ví dụ: dữ liệu massing, vẽ đồ thị, tạo mẫu) nằm trong cùng một nhóm và những người khác chọn các dạng tính toán hiệu suất cao như tính toán biểu tượng.

Các ngôn ngữ như Python, R, Mathematica và MATLAB thường được sử dụng cho máy tính kỹ thuật. Các ngôn ngữ như C, C++ và Fortran vẫn được sử dụng để thu thập số. Các ngôn ngữ như OCaml được sử dụng để tính toán biểu tượng quy mô lớn.

0

Từ kinh nghiệm làm việc trong các phòng thí nghiệm và viện nghiên cứu khác nhau, tôi sẽ nói việc học ngôn ngữ máy tính chỉ cung cấp cho bạn nền tảng và giới thiệu về lập trình. C hoặc Java sẽ là một ngôn ngữ thuận lợi để chọn làm giới thiệu, vì vậy giáo sư của bạn là chính xác để mở rộng nhất định.

Có thể áp dụng kiến ​​thức của bạn bằng 1 ngôn ngữ cho ngôn ngữ khác là chìa khóa để thành công trong môi trường làm việc tính toán/phát triển. Khi bạn di chuyển qua các công ty/viện/nhóm phòng thí nghiệm khác nhau, bạn sẽ thấy rằng mỗi người trong số họ sẽ có sở thích riêng về ngôn ngữ/phần mềm. Việc có thể học những điều mới một cách nhanh chóng là quan trọng hơn là cố gắng ghi nhớ cú pháp của một ngôn ngữ cụ thể.

Tất nhiên, nếu bạn chọn ngôn ngữ bạn chọn cho một dự án, hãy chọn 1 ngôn ngữ có thư viện mà bạn cần.

1

Là một phần mềm xây dựng lập trình viên chuyên nghiệp cho các nhà khoa học và kỹ sư tôi có thể nói rằng gần như tất cả các phương pháp số của chúng tôi được viết bằng C. Vì vậy, trong trường hợp của chúng tôi chắc chắn là sự thật. Chúng ta có các túi C++ và Fortran. Xét về mặt hiệu suất, khó có thể đánh bại được mã C và trình biên dịch tốt. Rất, rất hiếm khi chúng ta có thể hòa nhập vào hội đồng.

Nhưng thế giới đã thay đổi rất nhiều. Python là một ngôn ngữ tuyệt vời - IMHO ngôn ngữ đẹp nhất và có thể gọi các thư viện gốc. Sau đó, có R một lần nữa một nguồn ngôn ngữ giải thích nhưng với một thư viện lớn các phương pháp số tất cả các biên soạn C hoặc C + +. Sau đó, thêm tất cả các phương thức tăng tốc phần cứng mới như openCL và nhiều ràng buộc ... C hoặc Fortran không còn là câu trả lời duy nhất nữa. Nhưng đối với số CPU truyền thống, việc crunching C và ASM là tốt nhất trong lớp.

0

Có, ANSI C kèm theo MPI.

Thỉnh thoảng mọi người muốn sử dụng "mục tiêu C", điều đó có nghĩa là họ đặt chức năng vào các phương thức của lớp học lớn và mọi kiểm tra của nó sẽ chạy trên lõi riêng biệt. Lưu ý rằng đây không phải là C++, nhưng "C với các đối tượng". Không có tính năng C++ nào được sử dụng ngoại trừ mô hình đối tượng phương thức.Đây chỉ là gói cùng C cũ vào "mô hình đối tượng hợp lý", cho phép sử dụng các lớp trung gian và vân vân.

Ví dụ điển hình ở trên: LAMMPS.

Charm ++ là một cách hay để có được "C cũ tốt theo cách hiện đại".

Trên ngọn đồi khác của các ngôn ngữ khoa học là LISP, Haskell và các nhóm meta-lang khác. Đây là một thế giới lập trình khoa học "mềm" khác, nơi mà thời gian không phải là vấn đề, mà là sự tồn tại của câu trả lời.