Làm thế nào để làm chậm máy tính của bạn (cho mục đích thử nghiệm)? [đóng cửa]


20

Như hầu hết mọi người đồng ý, khuyến khích các nhà phát triển tạo mã nhanh bằng cách cung cấp cho họ các máy chậm không phải là một ý tưởng hay . Nhưng có một điểm trong câu hỏi đó. Máy dev của tôi rất nhanh, và vì vậy tôi thỉnh thoảng viết mã không hiệu quả, nhưng điều đó chỉ trở nên rõ ràng khi chạy nó trên máy của người khác.

Một số cách tốt để tạm thời làm chậm một máy dev tăng áp là gì? Khái niệm "tốc độ" bao gồm một số yếu tố, ví dụ:

  • Xung nhịp CPU.
  • Số lượng lõi CPU.
  • Dung lượng bộ nhớ và bộ nhớ cache của bộ xử lý.
  • Tốc độ của các xe buýt khác nhau.
  • Đĩa I / O.
  • GPU.
  • v.v.

34
Bỏ nút "Turbo" ... không, đợi đã.
LennyProgrammer

6
Đây là gốc rễ của vấn đề của bạn: "Không hiệu quả". thay đổi thói quen mã hóa của bạn
Darknight

16
@Darknight: Không, không phải vậy. Bạn cần phải làm đầu tiên nó phải, sau đó làm cho nó nhanh chóng nếu cần thiết . Để biết những gì cần tối ưu hóa, bạn phải kiểm tra và tìm ra phần có vấn đề. Làm mọi thứ nhanh nhất có thể ngay từ đầu là lãng phí thời gian của bạn - và có thể lãng phí khi làm đúng .
Joonas Pulakka

1
Vâng, tôi một phần đồng ý. Tuy nhiên nếu bạn có thói quen mã hóa hiệu quả để bắt đầu; sau đó là "làm cho nó hoạt động đúng", bạn có thể dành ít thời gian hơn sau đó "làm cho nó nhanh hơn".
Đêm tối

4
@Darknight: Tôi nghĩ rằng @Joonas đang hỏi một câu hỏi rất hợp lý. Ý tưởng chỉ cần "thay đổi thói quen mã hóa của bạn" là không thực tế. Dưới đây là một ví dụ: ( stackoverflow.com/questions/926266/ trên ) VÀ, ý tưởng rằng bạn chỉ có thể đặt thời gian trên máy chậm hơn mà không cần IDE giả định rằng đủ để tìm lỗi hiệu suất. Rất nhiều người nói về hồ sơ, nhưng thực hiện nó (thành công) lại là một vấn đề khác. Điều thực sự sẽ giúp tôi (và những người khác tôi nghĩ) là những gì Joonas đang yêu cầu.
Mike Dunlavey

Câu trả lời:


39

Chạy thử nghiệm của bạn trong một máy ảo với bộ nhớ hạn chế và chỉ có một lõi.

Những cỗ máy cũ mà con người vẫn có thể có bây giờ chủ yếu là những thứ thuộc thời đại Pentium 4. Điều đó không thực tế - tôi đang sử dụng một mình ngay bây giờ. Hiệu suất lõi đơn trên nhiều PC hiện tại thường không tốt hơn nhiều và có thể tệ hơn. Hiệu năng RAM quan trọng hơn hiệu năng CPU đối với nhiều thứ dù sao đi nữa và bằng cách hạn chế một chút khắc nghiệt hơn so với P4 1GB cũ, bạn sẽ bù đắp cho điều đó một chút.

Không, nếu bạn sẵn sàng chi tiêu một chút, hãy mua một chiếc netbook. Chạy thử nghiệm trên đó.


1
Hoặc một máy tính xách tay cũ.

Vấn đề với các máy ảo là không ai trong số họ (AFAIK) hỗ trợ cổng IEEE 1394 (firewire). Một số phần mềm của tôi sử dụng máy ảnh được kết nối với firewire, vì vậy ...
Joonas Pulakka

thiết bị thật cho phép bạn chỉ định bất kỳ thiết bị PCI nào cho VM
Javier

3
Có thể là một công việc cho Xen - máy ảo không có máy chủ O / S, nhưng bản thân nó là lớp trên cùng. Có một lịch sử Unix, nhưng bây giờ có thể hỗ trợ các hệ điều hành độc quyền. Nhưng tôi chưa bao giờ sử dụng nó và không biết bạn có thể kiểm soát được bao nhiêu đối với hiệu suất và tài nguyên của một VM cụ thể.
Steve314

1
+1 Một VM có khả năng điều chỉnh cao và cung cấp chính xác môi trường mà bạn muốn thử nghiệm. Tôi sử dụng VMWare cho mục đích này.
Gary Rowe

11

Cách để phát hiện ra sự kém hiệu quả của thuật toán là lập hồ sơ mã cho bạn. Cách để sử dụng quá mức bộ nhớ là trước tiên hãy hiểu mục tiêu của bạn sử dụng bao nhiêu bộ nhớ, sau đó thiết kế phù hợp và thường xuyên kiểm tra trong môi trường đó.

Nếu bạn đang viết mã luồng, kiểm tra trên nhiều máy có tốc độ CPU khác nhau sẽ giúp làm nổi bật các lỗi liên quan đến thời gian cụ thể trong xử lý luồng của bạn, nhưng việc kiểm tra đơn vị logic của luồng xử lý là bắt buộc.


1
Không, hồ sơ sẽ không bắt được thuật toán không hiệu quả. Nó sẽ cho bạn biết chương trình đang sử dụng thời gian ở đâu nếu bạn cần tăng tốc chương trình, nhưng không phải nếu bạn cần tăng tốc.
David Thornley

Tôi nghĩ rằng tôi đang thiếu sự phân biệt ở đây. Nếu bạn có nghĩa là hồ sơ sẽ không cho bạn biết NẾU bạn đang tối ưu phụ, chỉ là nơi bạn đang sử dụng chu kỳ CPU của mình, thì tôi đồng ý. Điều đó cần kinh nghiệm để đưa ra đánh giá đó.
Michael Shaw

4
@David Thornley & @Ptolemy: Tôi nghĩ rằng điểm kém của thuật toán hoặc điểm nóng mã là thứ yếu của vấn đề cốt lõi: "Có quá chậm hay không?" Đó là chủ quan, nhưng đó cũng là câu hỏi quan trọng nhất. Nếu nó không cảm thấy chậm trong thực tế, vậy thì nếu thuật toán của bạn không hiệu quả thì sao? Nó làm những gì nó cần làm! Hoặc nếu chương trình cảm thấy quá chậm bất kể thuật toán tối ưu cao, thì bạn có thể phải thay đổi cách tiếp cận (kiến trúc? Ngôn ngữ lập trình? Một cái gì đó!) Hoàn toàn. Có các thuật toán tối ưu cao không phải là lý do cho sự chậm chạp của chương trình :-)
Joonas Pulakka

1
Để tiết lộ tính không hiệu quả của thuật toán, hãy sử dụng các bộ dữ liệu có kích thước lũy tiến để thử nghiệm.
rwong

10

Bất cứ điều gì bạn làm để làm chậm máy của bạn có thể sẽ là một hack.

Dưới đây là một vài gợi ý:

  • Sử dụng máy ảo
  • Hồ sơ mã trên máy của bạn, tìm kiếm các nút cổ chai
  • Sử dụng máy cũ để "kiểm tra hiệu suất"

@matt điều đó có nghĩa là gì?
johnny

1
@johnny: Ý tôi là tôi đang bỏ phiếu vì Jason đã đề xuất hồ sơ ứng dụng, hy vọng sẽ tìm được nguồn cổ chai hiệu suất mà không cần phải chuyển sang hệ thống chậm hơn.
Matt Ellen


4

Nhận ra đây là một câu hỏi khá cũ, nhưng đối với bất kỳ ai khác trong tình huống này; bạn có thể thử CPUKiller. Về cơ bản, đây là một ứng dụng nhỏ mà bạn có thể định cấu hình để tiêu thụ các% bộ xử lý khác nhau. http://www.cpukiller.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.