2009-05-28 31 views
10

Có cách nào, để tối ưu hóa thời gian liên kết trong MS Visual studio C++ (2005)? Chúng tôi đang sử dụng Xoreax Incredibuild để tăng tốc biên dịch, nhưng không có gì cho liên kết.Làm thế nào để tăng tốc thời gian liên kết C++

Hiện tại, mọi liên kết mất khoảng 30 giây. Khi tôi bật liên kết gia tăng, mất khoảng 35-40 giây. (Không có vấn đề gì nếu tôi biên dịch dự án có hoặc không có sự hoài nghi)

Có cách nào, cách liên kết hồ sơ và xem phải mất bao lâu? Hoặc bất kỳ công cụ để liên kết paralel? Hoặc bất kỳ lời khuyên cho tối ưu hóa mã để tăng tốc độ liên kết?

Cảm ơn trả lời Ludek Vodicka


Edit:

Cám ơn trả lời đầu tiên, và thông tin bổ sung:

  • Tổng số các chương trình Tối ưu hóa và sinh mã liên kết thời gian đã tắt .
  • Thành ngữ PIMPL đã được sử dụng khi có thể
  • các thư viện tĩnh khác đã được đưa vào thông qua #pragma comment (lib, "pathToLib"). (Bảo trì cũng vì dễ dàng hơn]
  • HW: quad Q6600 core, 8GB ram, 3x WD Raptor RAID 0. Windows Vista 64bit
+0

30 giây âm thanh không nhiều đối với tôi. Nếu bạn phát triển hợp lý, bạn có thường xuyên thực hiện một chu trình biên dịch/liên kết không? Có thể cứ 10-30 phút nếu bạn nhanh. Liệu nó có thực sự quan trọng nếu bạn phải đợi 30 giây ở đó không? – lothar

+0

Giai đoạn biên dịch song song mất bao lâu? Bạn thường xây dựng bao nhiêu mục tiêu mỗi lần? Nếu giai đoạn biên dịch mất 10 giây và bạn chỉ xây dựng một mục tiêu, tôi không có nhiều thông cảm cho tình huống của bạn. :) – bk1e

+0

Khi phát triển các tính năng mới, chúng tôi biên dịch mỗi 10-20 phút như bạn đã nói, nhưng khi tìm kiếm và sửa lỗi, nó có thể là từng phút ;-( Việc biên soạn toàn bộ dự án mất khoảng 2 phút và xây dựng một mục tiêu. chỉ có một tập tin thay đổi, biên dịch fil mất khoảng 3 giây và liên kết khoảng 35 giây ;-( –

Trả lời

8

Tôi không biết bất kỳ công cụ liên kết song song nào; Tôi biết rằng Incredibuild không cho phép nó.

Công cụ lớn nhất trong hộp công cụ để tránh thời gian liên kết là mức trừu tượng thích hợp. Nếu thời gian liên kết của bạn dài, có thể là do các đối tượng biết quá nhiều về các đối tượng khác. Việc tách chúng là các giao diện trừu tượng quan trọng (có lẽ bằng cách sử dụng mô hình PIMPL), hoặc mặc dù các phương thức khác như truyền sự kiện.

Chi phí cho việc liên kết các dự án thông qua Dự án phụ thuộc cũng khá cao.Nếu nền tảng đích của bạn chỉ là Win32, hoặc chủ yếu, bạn có thể xem xét sử dụng một tiêu đề để liên kết các thư viện phụ thuộc của bạn thông qua #pragma comment (lib, "pathToLib").

+0

Thiết lập một sự phụ thuộc thông qua các thuộc tính của Project | Linker | Đầu vào hoặc thông qua các nhận xét pragma là giống nhau. k chống lại (tôi nghĩ rằng nó được sử dụng để trong các phiên bản cũ), nó chỉ yêu cầu xây dựng đầu tiên trước khi thứ hai. –

7

Nếu bạn có thể sống mà không có sự tối ưu hóa, tắt hệ mã liên kết thời gian (loại bỏ chuyển đổi/GL hoặc trong các thuộc tính c/C++ -> Tối ưu hóa -> Tối ưu hóa toàn bộ chương trình. Đối với trình liên kết loại bỏ/ltcg hoặc sử dụng Thiết lập thế hệ mã thời gian liên kết), điều này sẽ làm cho trình biên dịch chậm hơn.

Tôi đã xem các dự án mất hàng giờ để xây dựng với/GL +/LTCG, chỉ vài giây mà không cần (ví dụ: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/750ed2b0-0d51-48a3-bd9a-e8f4b544ded8)

+0

có.điều đó tăng tốc thời gian liên kết, nhưng làm chậm thời gian biên dịch –

1

Bạn đã cân nhắc cải thiện phần cứng chưa?
Bạn có sử dụng ổ đĩa cứng vật lý riêng biệt để xây dựng không? Bạn sử dụng loại ổ đĩa nào?

Như một gợi ý chung: hãy ném vào một số bộ nhớ, lấy Velociraptor, chỉ đặt nguồn và tạo thư mục ở đó, đo lại. Nếu điều đó giúp, hãy xem xét RAID 0.

Tôi đã nghe báo cáo rằng nâng cấp từ lõi XP lên lõi W2K3 cải thiện thời gian xây dựng đáng kể, có lẽ do quản lý bộ nhớ và bộ nhớ đệm tốt hơn.

Là một đề xuất thay đổi mã của bạn, bạn có thể di chuyển một số chức năng vào một DLL và liên kết song song. Nhưng tôi không thực hiện thay đổi như vậy chỉ để cải thiện thời gian xây dựng.

0

Có một số gợi ý thiết lập chung về Improving link time with IncrediBuild

Bạn cũng có thể bỏ qua liên kết của libs tĩnh, nơi bạn sẽ không phân phối chúng sử dụng IncrediLink

Chúng tôi thấy rằng bổ sung một bước ký bài build sẽ ngừng IncrediBuild từ làm việc trên các dự án sau đây, thêm một bình luận cho bài viết xây dựng được cho là để giúp

rem IncrediBuild_AllowOverlap 

Xem IncrediBuild_AllowOverlap doc

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