2010-02-25 35 views
8

Trong khi hồ sơ ứng dụng của tôi bằng cách sử dụng Pix, tôi nhận thấy rằng GPU đang chuyển (ở chế độ DX10) phần lớn thời gian của nó ở chế độ chờ đợi cho một tài nguyên không có sẵn. (Và luôn luôn là trong hàng với CPU (ví dụ nếu CPU đang xử lý khung X, GPU cũng đang xử lý khung X) cho vấn đề này)Tài nguyên Contention

Một số lưu ý:

1) Ứng dụng GPU hạn chế (CPU cơ bản là nhàn rỗi (20% sử dụng CPU trong cảnh nặng nề nhất))

câu hỏi của tôi là:

1) làm thế nào để tôi phải giải thích những kết quả này? Trong Pix mỗi khung ở phía GPU tôi thấy 2-3 thanh màu đỏ nhỏ (theo như tôi biết có nghĩa là tài nguyên không có sẵn) và sau đó là một thanh màu xám trung bình/lớn (có nghĩa là GPU nhàn rỗi). CPU ở phía bên kia có một số thao tác, một thanh rỗng lớn và sau đó một số thao tác khác (đang đợi cái gì?)

Một lưu ý khác, khi GPU ở chế độ nhàn rỗi, CPU đang hoạt động. (Ngược lại là không hợp lệ rõ ràng)

2) Cuộc gọi nào có thể khiến tài nguyên không khả dụng?

MAP với DISCARD được xem xét một cuộc gọi chặn?
Truy vấn để lấy DESC của đối tượng?
Chia sẻ hiệu ứng đổ bóng được coi là tranh chấp?
Điều gì khác?

khung chung của tôi là:

41 DrawPrimitives/DrawIndexedPrimitives (hầu hết các đối tượng là instance)
7/8 Khóa vào một bộ đệm đỉnh với loại bỏ
9 thay đổi pixel shader/vertex
1 setrendertarget

Cảm ơn!

P.S. Ảnh chụp màn hình của pix

http://img191.imageshack.us/img191/6800/42594100.jpg

Nếu tôi sử dụng một lệnh gọi vẽ duy nhất (với tải gpu giống nhau (ví dụ như một động cơ hạt với hạt x hoặc một đối tượng instance)) thay vì các trò chơi đầy đủ tôi nhận được một đầy đủ màu xanh thanh và GPU đúng 2-3 khung phía sau CPU ...

EDIT: Tôi đang tập trung ngày càng nhiều vào Khung hiệu ứng có thể là nguyên nhân của vấn đề này. Tôi chia sẻ một hiệu ứng giữa nhiều đối tượng hơn để tiết kiệm bộ nhớ và thời gian để tạo ra chúng. Đây có phải là an toàn để giả định mà không tranh chấp?

+0

hum, chạy pix, bạn có thể không cô lập cuộc gọi nào đang buộc xả không? – Bahbar

Trả lời

1

gì nói đến cái tâm với các thông tin được cung cấp:

  • Bạn có sử dụng đệm đôi với vsync? Có lẽ cả hai đều đang chờ đợi cho backbuffer để trở thành có sẵn. Hãy thử ba bộ đệm hoặc bản trình bày ngay lập tức.
  • Bạn đã thử khóa bộ đệm đỉnh bằng chiến lược vòng tròn NOOVERWITE thay vì 8 lần DISCARD? Có thể có quá nhiều áp lực bộ nhớ cho GPU để tái phân bổ bộ đệm mới cho việc hủy bỏ của bạn. Ngoài ra, một số phần cứng không cho phép loại bỏ cùng một bộ đệm đỉnh nhiều hơn X lần trước khi nó được hiển thị.
  • Vì bạn đang chia sẻ cùng một hiệu ứng, các tham số cũng được chia sẻ?
+0

1) Đã thử tất cả các loại, ngay lập tức/đôi/ba bộ đệm. Không thay đổi 2) Tôi loại bỏ bộ đệm một lần cho mỗi khung ở mức tối đa. (có 8 bộ đệm) 3) Mhn .... không, các thông số được tách biệt vì chúng là một lớp logic riêng biệt. – feal87