2014-05-10 16 views
6

Câu hỏi này đã đưa ra:game tối ưu hóa hiệu suất phỏng vấn

Bạn đang tìm kiếm ách tắc trong trò chơi của bạn, nhưng không có gì bạn đang thay đổi đang thực hiện các trò chơi bất kỳ nhanh hơn, có thể là bất cứ điều gì trong các đường ống GPU hoặc CPU. Không có gì là spiking, và sự chậm chạp dường như được phân phối trên khắp mọi nơi. Bạn sẽ làm gì tiếp theo?

Tôi đã bị lúng túng. Nó là một câu hỏi lừa? Khi khắc phục các vấn đề về độ hoàn hảo, tôi luôn cho rằng đây là điểm mà tại đó bạn cần phải cân nhắc mọi thứ trở lại. Tôi không nghĩ rằng đó là phân bổ mem, như là hiển thị trong CPU perf.

+0

Tôi không hoàn toàn chắc chắn đây là về chủ đề cho SO. Nhưng chúng ta sẽ thấy nó như thế nào ... – Mysticial

+0

Tôi có lẽ sẽ tái tạo trên phần cứng khác nhau. Không chắc đó là những gì họ đang tìm kiếm. –

+1

Rõ ràng là bạn đã tìm thấy giải pháp - "Tôi sẽ đăng câu hỏi lên SO và chờ kết quả" ... tôi cũng đoán câu trả lời đó sẽ thất bại trong cuộc phỏng vấn của bạn. –

Trả lời

0

Có thể đây là suy nghĩ về các thuật toán hiệu quả hơn. "Micro-optimization" có giới hạn của nó; bạn hoàn toàn có thể tối ưu hóa một loại bong bóng, ví dụ, nhưng để có được tốc độ thực sự lớn, bạn sẽ tạo ra một thuật toán sắp xếp khác.

Ngoài ra, trong trò chơi, bạn có thể giới thiệu các loại điều chỉnh chất lượng/tốc độ (hoặc độ chính xác/tốc độ) có thể điều chỉnh khác nhau. Thông thường, tất cả các trò chơi đều có một số cài đặt thay đổi mức chi tiết đồ họa.

0

Bạn đang tìm kiếm ách tắc trong trò chơi của bạn, nhưng không có gì bạn thay đổi đang thực hiện các trò chơi bất kỳ nhanh hơn, có thể là bất cứ điều gì trong các đường ống GPU hoặc CPU. Không có gì là tăng đột biến và tốc độ chậm xuất hiện ở mức được phân phối ở khắp mọi nơi.

Nó có vẻ giống như định nghĩa của Uniformly Slow Code. Giả sử nó thực sự có ý nghĩa gì (và không phải một số nút thắt I/O hoặc tạo các đối tượng không cần thiết trong một vòng lặp hoặc một số sự lựa chọn kém cho các cơ sở dữ liệu hoặc các thuật toán, v.v.).

Để làm cho mã chậm hơn thống nhất nhanh hơn, bạn thường phải đi ngược lại các thực tiễn tốt và đó là lý do tại sao tôi thường ngừng tối ưu hóa mã của mình khi mã này chạy chậm. (Tôi cho rằng "ngừng tối ưu hóa" không phải là câu trả lời hay tại cuộc phỏng vấn ...)

Một cách để làm cho mọi việc nhanh hơn là xác định chuỗi hoạt động nhỏ phù hợp, thu thập chúng lại với nhau ở một nơi và sau đó cải thiện theo cách thủ công các điều; loại "thủ công nội tuyến" các hoạt động này sau đó thực hiện đơn giản hóa cấp cao trên mã xuất hiện. Nó đòi hỏi trực giác tốt nơi mà điều này có thể đáng làm và hiểu biết tuyệt vời về mã liên quan. This answer calls it bunching and horizontal optimization.

Một điều khác có thể đáng xem xét nếu thực sự của bạn có mã chậm nhất là Andrei Alexandrescu's optimization tips.

3

Tôi đã yêu cầu thêm thông tin. "Chậm" là một chỉ báo kém về hiệu suất kém và phân loại một triệu chứng hơn là một triệu chứng. Ví dụ, bạn có thể mô tả "chậm" như con người:

  • tốc độ khung hình thấp
  • nghèo đáp ứng với đầu vào
  • đáp ứng cao và tốc độ khung hình trơn tru, nhưng trò chơi cơ khí chậm (ví dụ:: Các cầu thủ và các đối tượng di chuyển trơn tru nhưng rất chậm)
  • Trong trường hợp của các trò chơi trên mạng, rõ ràng lag mạng

Tất cả những vấn đề này có nguyên nhân tiềm năng và các giải pháp khác nhau:

  • thấp nhưng phù hợp tốc độ khung hình có thể là do sự thiếu hiệu quả trong vòng lặp trò chơi của bạn. Đơn giản chỉ cần chạy hồ sơ yêu thích của bạn có thể chỉ ra rằng số lượng lớn thời gian được chi tiêu trong một đoạn mã cụ thể. Trong một trò chơi tôi đã viết, ví dụ, tôi phát hiện ra rằng FPS thấp là kết quả của một vòng lặp xấu tính toán khoảng cách giữa các thực thể nhiều lần mà không cần bộ nhớ đệm. Trong một trò chơi khác, tôi phát hiện ra rằng cấu trúc dữ liệu tôi đang sử dụng để thực hiện tra cứu trên địa hình là O(N) thay vì O(1) (python stdlib ... ick). Bạn không thể chẩn đoán một vấn đề bạn không thể nhìn thấy, và hồ sơ là hàng phòng thủ đầu tiên.
  • Phản hồi kém có thể do một số thứ. Nếu FPS cao nhưng các điều khiển chậm chạp để phản hồi, API mà bạn đang sử dụng để truy cập các điều khiển có thể chỉ đơn giản là xấu. Một số bộ điều khiển có thể có trình điều khiển crappy có thể giết phản ứng. Nó thậm chí có thể là vòng lặp trò chơi của bạn: bạn có thể chỉ đơn giản là không được kiểm tra đầu vào từ bộ điều khiển đủ thường xuyên (có lẽ bạn không kiểm tra trên mỗi đánh dấu). Trong một trong những trò chơi nói trên, tôi đã gặp vấn đề khi một số hành động nhất định có hiệu ứng bị trì hoãn: bạn sẽ sử dụng một mục và trò chơi sẽ phản hồi một nửa giây sau đó. Nó chỉ ra rằng vấn đề là do khách hàng thực hiện một chuyến đi khứ hồi đầy đủ đến máy chủ để thực hiện hành động, xác minh rằng nó đã xảy ra và chờ cho máy chủ phát lại rằng mục đã được sử dụng. Đơn giản chỉ cần có hành vi diễn ra ngay lập tức trên máy khách khắc phục vấn đề.
  • Cơ chế trò chơi chậm có thể cho biết rằng hằng số trò chơi không được đặt đủ cao. Nếu mọi thứ đều trơn tru và đẹp đẽ nhưng mọi thứ chỉ chuyển động rất chậm, thì có thể vận tốc hoặc tốc độ mặc định không đủ.
  • Độ trễ mạng có thể do bất kỳ số thứ nào: bộ định tuyến bạn kết nối có thể bị lỗi, VPS bạn đang phát triển có thể nằm trên máy chủ đang bị DDoS, bạn có thể đang sử dụng giao thức quá mức (nhưng đồng nhất) trò chuyện, hoặc bạn chỉ đơn giản là gửi quá nhiều dữ liệu qua dây. Trong một phần mềm mô phỏng tôi đã viết ở trường đại học, các tính toán được thực hiện trên một số máy tính mạnh mẽ trong phòng thí nghiệm, trong khi các hình ảnh hóa đang được chạy trên MBP của tôi trong ký túc xá của tôi. Hóa ra số lượng dữ liệu mà tôi gửi từ phòng thí nghiệm đến ký túc xá của tôi là đủ để làm quá tải các thiết bị chuyển mạch mạng rẻ tiền trong tòa nhà và thả các gói tin, dẫn đến độ trễ khủng khiếp nhưng đầu ra log hoàn toàn hợp lý.

Vì vậy, tôi đoán câu trả lời ở đây là để người phỏng vấn mô tả các triệu chứng đầy đủ hơn. @ Ali của câu trả lời là rất tốt, nhưng nó có thể là có một vấn đề sắc thái hơn trong tầm tay đòi hỏi một số dỗ dành để chẩn đoán.

0

giai thoại:

tôi có thể cho bạn biết vấn đề là gì mà không thực sự biết câu trả lời cho câu hỏi; p

cuộc gọi directx luộm thuộm. quá nhiều đồ vật. đặc biệt là xấu trên một số trò chơi dx9 cũ, kể từ dx9 cần thiết để thực hiện một cuộc gọi trực tiếp mới cho mọi đối tượng. hoặc một cái gì đó như thế, câu chuyện đi. về cơ bản dẫn đến cpu chờ nhàn rỗi cho gpu để xử lý tất cả các tin nhắn.

mặc dù không giải quyết được mọi vấn đề, nhưng mặc dù nó đáng được đề cập đến như một phần thông tin xen kẽ, p không nhìn thấy nó trong các nhận xét khác.

gần giống như có quá nhiều trình tạo pixel, ngoại trừ ít nhất gpu hoạt động ở mức 100% với khối lượng: D tốt cho chiên trứng tráng. (Cũng có thể, sử dụng tắc tiết kiệm hiệu quả và sau đó thêm một khối lượng của các pixel shader để mô hình đó là một ý tưởng BAD)

tôi hy vọng bạn sẽ nhìn thấy sự hài hước trong này; p

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