2012-08-06 43 views
9

Tôi chỉ mới bắt đầu học C++ AMP và tôi đã có được một vài ví dụ mà tôi đã tạo bằng VS 2012 RC, nhưng tôi thấy rằng hiệu suất của GPU chậm hơn CPU. Ví dụ, các ví dụ của Kate Gregory: http://ampbook.codeplex.com/releases/view/90595 (liên quan đến cuốn sách sắp tới của cô http://www.gregcons.com/cppamp/). Họ đã được cô ấy chứng minh trong một bài giảng mà tôi đã xem ở đó cô ấy đã đạt được hiệu suất cải thiện ~ 5x cho ví dụ chương 4 bằng cách sử dụng GPU của máy tính xách tay của mình (tôi tin rằng cô ấy nói nó là 6650) so với CPU (không chắc CPU cô ấy có). Tôi đã thử nghiệm các ví dụ bản thân mình và trên một vài cấu hình hệ thống (như dưới đây) Tôi đã luôn luôn tìm thấy CPU được nhanh hơn. Tôi cũng đã thử nghiệm các ví dụ khác và tìm thấy giống nhau. Tôi có làm điều gì sai? Có lý do nào cho hiệu suất chậm hơn mong đợi không? Có ai có một ví dụ mà chắc chắn sẽ hiển thị GPU được nhanh hơn?C++ AMP với GPU nhanh hơn CPU

  • Hệ thống 1: Intel i7 2600K với đồ họa onboard (Tôi hy vọng điều này là chậm hơn)
  • Hệ thống 2: Intel i7 2630QM với Intel HD có thể chuyển đổi với AMD 6770 (Tôi đã cho nó chạy trong chế độ hiệu suất để nó phải được sử dụng 6770)
  • Hệ thống 3: Intel i5 750 với 2xCrossfire AMD HD 5850

Ví dụ về kết quả: Kết quả dự án chapter4 trong 1.15ms CPU, GPU 2.57ms, 2.55ms GPU lát gạch.

Sửa:

Doh, tôi nghĩ rằng tôi chỉ tìm thấy lý do tại sao - các giá trị cho kích thước của ma trận cô đã sử dụng trong bài giảng là khác nhau. Mẫu trên trang web sử dụng M = N = W = 64. Nếu tôi sử dụng 64, 512 và 256 như cô ấy đã làm trong bài giảng thì tôi nhận được hiệu suất tăng 5x tương ứng.

+0

Tôi tự hỏi liệu [Kate Gregory] (http://stackoverflow.com/users/203458/kate-gregory) có đang đọc cái này không. –

+1

Nếu bạn đọc nó Kate thì tôi nghĩ sẽ tốt hơn khi cập nhật mã trực tuyến để sử dụng các kích thước ma trận được sử dụng trong bài giảng (http://channel9.msdn.com/Events/TechEd/Europe/2012/DEV334) - Tôi đã nghĩ rằng có một cái gì đó sai với VS của tôi hoặc cài đặt dự án là lý do tại sao tôi đã không nhìn thấy bất kỳ cải tiến :) – CarbonTwelve

+4

Tại sao mọi người bỏ phiếu để đóng này là "tắt chủ đề"? Điều gì về C++ AMP, CPU, GPU và Visual Studio là "tắt chủ đề" cho Stack Overflow? –

Trả lời

7

Dường như câu hỏi bao quát của bạn là TẠI SAO việc di chuyển mọi thứ sang GPU không phải lúc nào cũng mang lại lợi ích cho bạn. Câu trả lời là thời gian sao chép. Hãy tưởng tượng một tính toán mất một thời gian proprotional để n bình phương. Sao chép mất một thời gian tỷ lệ thuận với n. Bạn có thể cần một số lượng lớn n trước khi dành thời gian để sao chép vào và ra khỏi GPU có giá trị lớn hơn bởi thời gian được lưu để tính toán ở đó.

Cuốn sách đề cập đến điều này một cách ngắn gọn trong các chương đầu, và Chương 7 và 8 là tất cả về hiệu suất và tối ưu hóa. Chương 7 đang được cắt giảm thô; Chương 8 sẽ sớm có mặt ở đó. (Mã của nó đã có trên Codeplex - nghiên cứu điển hình về giảm.)

Tôi vừa kiểm tra cập nhật mã chương 4 sử dụng số bắt đầu Tech Ed thay vì số đã có trước đó. Ma trận nhỏ hơn mất quá nhiều thời gian cho bản sao đến/từ GPU; những cái lớn hơn mất quá nhiều thời gian để trở thành một bản demo tốt. Nhưng hãy thoải mái chơi với các kích thước. Làm cho chúng lớn hơn kể từ khi bạn không nhớ một hoặc hai "không khí chết", và xem điều gì xảy ra.

+1

Tôi biết chi phí của thời gian sao chép, câu hỏi của tôi về cơ bản chỉ là lý do tại sao mã tôi sử dụng không nhân rộng các kết quả với cùng một nền tảng. Hóa ra mã không giống hệt nhau, đó là lý do tại sao. Cảm ơn bạn đã cập nhật mã. – CarbonTwelve

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