2016-04-21 14 views
7

Tôi có theo dõi code để nghiên cứu.Loại dữ liệu Aparapi

Chức năng tính toán của tôi tạo ra kết quả không mong muốn khi chạy trên aparapi.

Có vấn đề gì với mã của tôi hay aparapi không?

Kết quả là;

Result  Num   Expected 
2026982348 406816880 40681688012 
2026982516 406816881 40681688180 
2026982594 406816882 40681688258 
2026982662 406816883 40681688326 
2026982830 406816884 40681688494 
2026982898 406816885 40681688562 
2026982966 406816886 40681688630 
2026983044 406816887 40681688708 
2026983212 406816888 40681688876 
2026983280 406816889 40681688944 
2026983338 406816890 40681689002 
2026983506 406816891 40681689170 
2026983584 406816892 40681689248 
2026983652 406816893 40681689316 
2026983820 406816894 40681689484 
2026983888 406816895 40681689552 
2026983956 406816896 40681689620 
2026984134 406816897 40681689798 
2026984202 406816898 40681689866 
2026984270 406816899 40681689934 

Chỉnh sửa: Nếu tôi đặt đúng JTP hoặc CPU, tôi nhận được kết quả thực (kết quả == mong đợi) nhưng trên chế độ GPU có sự cố. Tôi đang sử dụng cuối năm 2013 macbook pro võng mạc với cửa sổ 10.

Chỉnh sửa2: Dòng trả về của phương pháp tính toán của tôi gây ra sự cố. Nếu tôi trả lại Long.MAX_VALUE, nó hoạt động. Nhưng (long) tc * 100 (hoặc ((long) tc) * 100) không đưa ra (ví dụ. 40681688900)

+1

Tại sao phải giảm giá? Rõ ràng là có một vấn đề ... – Hyperion

Trả lời

2

Tôi nghĩ bạn nên xem lại mã của bạn kiểm tra đối với Aparapi Java Kernel Guidelines, expecially chú ý đến hạn chế khácHãy coi chừng Of Side Effects phần.

Hãy nhớ giữ mã của bạn đơn giản nhất có thể.

Tìm mã của bạn, theo phương pháp calculate mà bạn sử dụng rộng rãi toán tử mô-đun (%). Tôi sẽ đề nghị bạn đăng nhập mỗi phép tính để có thể so sánh những gì bạn nhận được trong chế độ JTP và những gì bạn nhận được trong chế độ GPU, để tìm hiểu xem có một số vấn đề với nhà điều hành này không.

EDIT: Trong phương pháp tính toán, bạn sử dụng biến int để giữ các giá trị, có thể giữ số cho đến 2^31-1, cụ thể là 2147483647 được gọi là Integer.MAX_VALUE. Nếu bạn thực hiện int value=2147483647; value++;, bạn sẽ nhận được kết quả là 2147483648 được gọi là Integer.MIN_VALUE.

Bạn có thể thử chương trình của mình với số khởi đầu thấp hơn hoặc thay đổi khai báo biến của bạn thành dài, có thể giữ Long.MAX_VALUE, cụ thể là 2^63-1.

Cả giá trị dài và int đều được Aparapi hỗ trợ.

+0

Nếu bạn chạy mã trong JTP hoặc chế độ CPU, bạn có thể thấy tôi đang nhận được đầu ra đúng. Mặt khác, tôi có vấn đề với phép nhân. Ví dụ. Tôi có số 406816889 và tôi sẽ nhận được 4068168894 nếu tôi làm num * 10 + 4, nhưng num * 100 + 44 sẽ không cung cấp 40681688944 trên chế độ GPU. Có lẽ có một tràn? – Hyperion

+0

Đối với chỉnh sửa của bạn, số của tôi tối đa 9 chữ số, do đó, nó không phải là vấn đề. Nhưng kết quả của tôi là 11 chữ số và tôi giữ chúng trong một thời gian dài:/ – Hyperion

+0

Bạn đã thử gỡ lỗi mã thông qua nhật ký hoặc biến đang xem? – abarisone

1

Xin chào, tôi là người duy trì chính tại số Aparapi.com mới và kho lưu trữ github mới. Chúng tôi hoạt động tích cực hơn tại nhà dự án mới và thậm chí có khoảng một tá bản phát hành ở trung tâm maven. Bạn có thể cân nhắc chuyển sang Aparapi mới.

Với điều đó, tôi là nhà phát triển tại Aparapi mới và đã chạy thử nghiệm này và xác nhận đó là lỗi Aparapi hợp pháp. Tôi sẽ xem xét những gì đang gây ra lỗi và hy vọng có thể sửa lỗi cho bạn trước khi phát hành tiếp theo. issue has been reported here nếu bạn muốn theo dõi nó. Hãy nhớ điều này cho dự án Aparapi mới để sửa lỗi không có khả năng hiển thị trong dự án Aparapi cũ hơn.

+0

Thx rất nhiều! Tôi đăng một cái gì đó về vấn đề này. – Hyperion

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