2013-03-04 41 views
18

Tôi muốn tăng tốc thời gian biên soạn các dự án C++ của mình. Họ có khoảng 3 dòng mã. Tất nhiên, tôi không cần phải biên dịch mọi dự án, nhưng đôi khi có nhiều tệp nguồn được sửa đổi bởi người khác và tôi cần phải biên dịch lại tất cả chúng (ví dụ: khi ai đó cập nhật tệp nguồn ASN.1) .Tăng tốc thời gian biên dịch với SSD

Tôi đã đo rằng việc biên soạn một dự án giữa (không liên quan đến tất cả các tệp nguồn) mất khoảng ba phút. Tôi biết đó không phải là quá nhiều, nhưng đôi khi nó thực sự nhàm chán chờ đợi cho một biên dịch ..

Tôi đã cố gắng để chuyển mã nguồn vào một SSD (cũ OCZ Vertex 3 60   GB) mà, điểm chuẩn, nó từ Nhanh gấp 5 đến 60 lần so với HDD (đặc biệt là đọc/ghi ngẫu nhiên). Dù sao, thời gian biên dịch là gần như giống nhau (có thể 2-3 giây nhanh hơn, nhưng nó phải là một cơ hội).

Có thể di chuyển thùng Visual Studio sang SSD sẽ cấp tăng thêm hiệu suất?

Chỉ cần hoàn thành câu hỏi: Tôi có Xe đạp W3520 @ 2,67 GHz và 12   GB DDR3 ECC.

+1

Bạn có thể quan tâm đến [this] (http://www.joelonsoftware.com/items/2009/03/27.html). Joel kết luận nó không thực sự hữu ích. – BoBTFish

+2

Chuyển mọi thứ không liên quan đến includers từ tệp tiêu đề sang tệp triển khai. Giảm #include chỉ thị trong mã của bạn, đặc biệt là trong các tệp tiêu đề đến mức tối thiểu cần thiết. Điều đó thường tăng tốc thời gian xây dựng dự án spaghetti bởi nhiều thứ tự độ lớn. –

+2

@BoBTFish: Một nên lưu ý rằng bài viết này hơi cũ (SSD hiện nay là 3 thế hệ vượt ra ngoài những gì ông đã sử dụng) và thẳng thắn, khá vô lý tổng thể, quá. Anh chàng này tiêu tốn $$$ vì 30 giây xây dựng lại thời gian là "quá chậm", sau đó nhét SSD vào máy tính xách tay cũ để tránh lãng phí thời gian dev quý giá (và lãng phí hai ngày thiết lập nó) và tự hỏi tại sao biên dịch CPU hoàn toàn sổ ghi chép cũ đó không nhanh hơn. Thật khó để coi trọng vấn đề đó. – Damon

Trả lời

7

Việc biên dịch/liên kết C++ bị giới hạn bởi tốc độ xử lý, không phải là HDD I/O. Đó là lý do tại sao bạn không thấy tăng tốc độ biên dịch. (Di chuyển trình biên dịch/trình liên kết nhị phân sang SSD sẽ không làm gì cả. Khi bạn biên dịch một dự án lớn, trình biên dịch/liên kết và thư viện cần thiết được đọc vào bộ nhớ một lần và ở lại đó.)

Tôi đã thấy một số tăng tốc nhỏ chuyển thư mục làm việc sang SSD hoặc ramdisk khi biên dịch các dự án C (tốn ít thời gian hơn nhiều so với các dự án C++ sử dụng nhiều mẫu, v.v.) nhưng không đủ để làm cho nó đáng giá.

+5

Tốc độ xử lý rất quan trọng với việc tối ưu hóa được bật (chênh lệch 10%), nhưng trên một bản dựng không được tối ưu hóa, SSD thực sự nhanh hơn khoảng 3-4 lần so với đĩa cứng. Tất nhiên thư mục tệp tạm thời nơi trình biên dịch đặt các tệp trung gian cũng phải có trên SSD. Và sau đó, đĩa phải được hỗ trợ cắt tất nhiên, hoặc đó là một chuyến đi rất ngắn. – Damon

+2

Tất cả điều này phụ thuộc rất nhiều vào môi trường xây dựng của bạn và các thiết lập khác. Ví dụ. trên máy chủ biên dịch chính của tôi, tôi có 96GiB RAM và 16 lõi. Các hdd là khá chậm, nhưng điều đó không thực sự quan trọng như về tất cả mọi thứ được lưu trữ trong bộ nhớ RAM. Trên máy tính để bàn của tôi (nơi tôi cũng biên dịch đôi khi) Tôi chỉ có 8Gib ram, và 6 lõi. Làm việc xây dựng song song tương tự có thể được tăng lên rất nhiều, bởi vì 6 trình biên dịch chạy song song ăn đủ bộ nhớ cho sự khác biệt tốc độ ssd là rất đáng chú ý. – PlasmaHH

+0

@PlasmaHH Có lẽ bạn nên đặt câu trả lời này thay vì nhận xét, câu hỏi này sẽ được hưởng lợi từ việc có nhiều hơn một POV. – us2012

24

Điều này phụ thuộc rất nhiều vào môi trường xây dựng của bạn và các thiết lập khác. Ví dụ, trên máy chủ biên dịch chính của tôi, tôi có 96   GiB RAM và 16 lõi. HDD là khá chậm, nhưng điều đó không thực sự quan trọng như về tất cả mọi thứ được lưu trữ trong bộ nhớ RAM.

Trên máy tính để bàn của tôi (nơi tôi cũng biên dịch đôi khi) Tôi chỉ có 8   Gib RAM và sáu lõi. Làm cùng một công trình song song có thể tăng tốc rất nhiều, vì sáu trình biên dịch chạy song song ăn đủ bộ nhớ cho sự khác biệt về tốc độ SSD rất đáng chú ý.

Có nhiều điều ảnh hưởng đến thời gian xây dựng, bao gồm tỷ lệ giữa CPU và I/O ". Theo kinh nghiệm của tôi (GCC trên Linux), chúng bao gồm:

  • Tính phức tạp của mã. Rất nhiều metatemplates làm cho nó sử dụng nhiều thời gian CPU hơn, nhiều mã giống như C hơn có thể làm cho I/O của các đối tượng được tạo ra (chi tiết) chi phối hơn
  • Cài đặt trình biên dịch cho các tệp tạm thời, như -pipe cho GCC.
  • Tối ưu hóa đang được sử dụng. Thông thường, việc chọn lọc nhiều hơn, CPU càng hoạt động thống trị.
  • Xây dựng song song. Việc biên dịch một tệp đơn tại một thời điểm sẽ không bao giờ tạo ra đủ I/O để lấy đĩa cứng chậm nhất hiện nay tới bất kỳ giới hạn nào. Biên dịch với tám lõi (hoặc nhiều hơn) cùng một lúc tuy nhiên có thể.
  • Hệ điều hành/tệp đang được sử dụng. Dường như một số hệ thống tập tin trong quá khứ đã bị nghẹn trên mẫu truy cập cho nhiều tệp được xây dựng song song, về cơ bản đặt nút cổ chai I/O vào mã hệ thống tệp, chứ không phải phần cứng cơ bản.
  • RAM có sẵn để lưu vào bộ đệm. Hệ điều hành tích cực hơn có thể đệm I/O của bạn, tốc độ HDD càng ít quan trọng. Đây là lý do tại sao đôi khi một số make -j6 có thể chậm hơn make -j4 mặc dù có đủ số lõi nhàn rỗi.

Để làm cho nó ngắn gọn: Nó phụ thuộc vào đủ thứ để làm "có, nó sẽ giúp bạn" hoặc "không, nó sẽ giúp bạn không" đầu cơ thuần túy, vì vậy nếu bạn có khả năng dùng thử , làm đi. Nhưng đừng dành quá nhiều thời gian cho nó, mỗi giờ bạn cố gắng cắt thời gian biên dịch thành một nửa, hãy cố gắng ước tính tần suất bạn (hoặc đồng nghiệp của bạn nếu bạn có) có thể xây dựng lại dự án và cách liên quan đến thời gian có thể được lưu.

+0

+1, chi tiết tuyệt vời! – us2012

+2

+1 cho '-pipe': tối ưu hóa tốt nhất là cắt giảm công việc –

+0

+1 cho đường ống từ tôi. Tôi đã sử dụng tùy chọn đó YEARS trước đây, nhưng bằng cách nào đó đã quên nó tồn tại. –

4

Tôi thấy rằng việc biên soạn một dự án khoảng 1 triệu dòng C++ tăng tốc khoảng 2 lần khi mã trên SSD (hệ thống cótám lõi, 12   GB RAM). Trên thực tế, hiệu năng tốt nhất mà chúng tôi có được là với một SSD cho hệ thống và hệ thống thứ hai cho nguồn - không phải là quá trình xây dựng nhanh hơn nhiều, nhưng hệ điều hành đáp ứng nhiều hơn trong khi xây dựng lớn đang được tiến hành.

Điều khác tạo ra sự khác biệt lớn là cho phép xây dựng song song. Lưu ý rằng có hai tùy chọn riêng biệt mà cả hai cần phải được kích hoạt:

  • menu cụTùy chọndự án và giải pháp → số lượng tối đa của dự án song song xây dựng
  • tính Project → C++/Tổng quátBiên dịch đa bộ xử lý

Bộ xử lý đa xử lý tion không tương thích với một vài cờ khác (bao gồm cả xây dựng lại tối thiểu, tôi nghĩ) để kiểm tra cửa sổ đầu ra cho cảnh báo. Tôi thấy rằng với cờ biên dịch MP đặt tất cả các lõi đã đạt gần 100% tải, vì vậy bạn có thể ít nhất thấy CPU đang được sử dụng tích cực.

-2

Tôi đã thay thế ổ đĩa cứng của mình bằng một SSD hy vọng rằng nó sẽ giảm thời gian biên dịch của dự án C++ của tôi. Đơn giản chỉ cần thay thế ổ đĩa cứng bằng SSD không giải quyết được vấn đề và thời gian biên dịch với cả hai đều gần như giống nhau.

Tuy nhiên, sau thất bại ban đầu, tôi đã thành công trong việc đẩy nhanh quá trình biên dịch khoảng sáu lần.

Các bước sau đã được thực hiện để tăng tốc độ biên dịch.

  1. tắt ngủ đông: "powercfg -h off" trong cửa sổ lệnh

  2. tắt ổ indexing trên ổ C

  3. thu nhỏ tập tin trang đến 800 phút/tối đa 1024 (đó là bước đầu đặt thành kích thước được quản lý hệ thống là 8092).

+0

Hệ thống nào? Windows 32 bit? Windows Vista 32-bit? –

0

Một điểm không được đề cập là khi sử dụng ccache và bản dựng song song cao, bạn sẽ thấy lợi ích khi sử dụng SSD.

Các vấn đề liên quan