CPU có thường xuyên mắc lỗi tính toán không?


22

Trong Ghi chú của Dijkstra về Lập trình có cấu trúc , ông nói rất nhiều về khả năng chứng minh của các chương trình máy tính như là các thực thể trừu tượng. Như một hệ quả tất yếu, ông nhận xét cách kiểm tra là không đủ. Ví dụ, ông chỉ ra một thực tế là không thể kiểm tra hàm nhân f (x, y) = x * y cho bất kỳ giá trị lớn nào của x và y trên toàn bộ phạm vi của x và y. Câu hỏi của tôi liên quan đến linh tinh của anh ấy. nhận xét về "phần cứng tệ hại". Tôi biết bài tiểu luận được viết vào những năm 1970 khi phần cứng máy tính kém tin cậy hơn, nhưng máy tính vẫn không hoàn hảo, vì vậy đôi khi chúng phải mắc lỗi tính toán . Có ai biết mức độ thường xuyên xảy ra hoặc nếu có bất kỳ số liệu thống kê về điều này?



Đây là trang wikipedia về lỗi Pentium FDIV , được đề cập bởi hai câu trả lời hiện có.
Cascabel

Chúng tôi nhận được mà không có bất kỳ loại sao lưu hoặc kiểm tra lỗi nào đối với các hoạt động CPU cơ bản, vì vậy chúng tôi có thể dễ dàng ước tính giới hạn trên cho tần suất của các lỗi tính toán thoáng qua ngẫu nhiên. Hầu hết các hướng dẫn CPU liên quan đến toán học (trong việc tính toán địa chỉ cho các hoạt động bộ nhớ cũng như tính toán) và các CPU hiện đại đang thực hiện hàng tỷ hoạt động mỗi giây, gọi nó là> 1e14 hoạt động mỗi ngày. Nếu 1 trong 10 lỗi toán học có ảnh hưởng rõ ràng đến chương trình (có thể là ước tính thấp) và chúng tôi không thấy các lỗi đó hàng ngày, tỷ lệ lỗi cơ bản cho ALU phải là <1e-13 và tôi sẽ đoán <1e-15.
Russell Borogove

@NickC: bạn đang ám chỉ rằng không có gì thực tế về câu hỏi này? Vì vậy, bạn nghĩ rằng câu hỏi liệu phần cứng có hoạt động hay không không quan trọng? Thế còn khi thực sự quan trọng liệu chương trình có hoạt động tốt hay không (lập trình thời gian thực cứng chỉ là lý thuyết, hay quá tiên tiến cho mọi người trên trang này?)? Còn phần cứng mà một người dùng có thể đánh cắp các khóa từ những người dùng khác vì thông tin bị rò rỉ qua kênh bên thì sao? Chết tiệt, tôi muốn có một nút downvote cho ý kiến.
Longpoke

1
@Longpoke Tôi cũng vậy.
Nicole

Câu trả lời:


14

Lỗi thực tế / thực tế trong thiết kế của CPU sang một bên, tôi nghĩ rằng bạn đang tìm kiếm Câu hỏi SO này: Tia vũ trụ. Xác suất họ sẽ ảnh hưởng đến một chương trình là gì . Tôi không thể nhận được báo giá từ nó vì SO bị chặn lại tại nơi làm việc ở đây ( thở dài ).

Bỏ qua những điều trên, tôi dường như nhớ lại rằng có một số lỗi tính toán của FPU trong những Pentium đầu tiên, vì vậy chúng chắc chắn không thể sai được.

Tôi không có bằng chứng cứng trong tay, nhưng ruột của tôi nói với tôi rằng bạn có lẽ nên quan tâm nhiều hơn về các bit của Cache / RAM / Đĩa bị hỏng sau đó tính toán không chính xác.


40
SO bị chặn tại nơi làm việc? Có ai đó trong công ty của bạn đang cố gắng phá hoại phát triển phần mềm?
Nicole

3
Bạn nói rằng như thể đó chỉ là một người và họ chưa thành công ...;)
Dan McGrath

9
Tôi không bao giờ có thể hiểu được lý do của việc chặn các trang web SFW ở cấp độ công ty. Vì các công cụ tìm kiếm là một công cụ cực kỳ có giá trị, bạn sẽ có thể xem thông tin mà chúng mang lại.
Tim Post

@Dan, bỏ chặn nó. Bạn sẽ có thể thực hiện đường hầm https đến nhà.

4
Bị bắt khi bỏ qua hệ thống chỉ là lý do để chấm dứt. Tôi chuyển đến Mỹ và có một công việc mới.
Dan McGrath

6

Một vấn đề lớn trong việc trả lời câu hỏi này hiện nay là các nhà sản xuất CPU bọc lỗi cho chip trong NDA (Thỏa thuận không tiết lộ). Intel làm điều này, IIRC.

Nhiều nhà sản xuất ít bí mật đưa ra các chỉnh sửa cho bảng dữ liệu, nhưng không cho bạn biết điều gì đã thay đổi, vì vậy trừ khi bạn thích so sánh tất cả 300 trang, bạn sẽ gặp khó khăn khi nói.

Đã có rất nhiều hướng dẫn tồi trong CPU, xem báo cáo nhân Linux mà nó tìm thấy khi khởi động là thú vị vừa phải.

Rất liên quan là Google giấy về lỗi bộ nhớ, chúng phổ biến hơn bạn nghĩ. "Lỗi DRAM trong tự nhiên: Nghiên cứu thực địa quy mô lớn" Schoeder, Pinheiro và Weber Xuất bản lần đầu trên ACM SIGMETRICS vào năm 2009. Tái bản trong Truyền thông của ACM tháng 2 năm 2011

Tất cả những lỗi bộ nhớ này có ý nghĩa gì đối với bạn, đó là nếu không có bộ nhớ ECC, bạn sẽ nhận được các phép tính sai.


5

Quay lại khi tôi làm việc cho một nhà cung cấp phần cứng, người ta khẳng định rằng không có CPU nào được chế tạo là không có lỗi. Và đó chỉ là lỗi logic. Thông thường, nhà sản xuất tìm thấy hầu hết trong số họ và hô hấp chip hoặc tìm các cài đặt BIOS hoạt động xung quanh chúng. Nhưng ngoài thực tế, những thứ như tia vũ trụ thỉnh thoảng lật một chút trong bộ nhớ (và bộ nhớ thường có các bit chẵn lẻ hoặc mạch SECDED để cứu thịt xông khói của bạn), luôn có một cơ hội hữu hạn rằng một bit sẽ được đọc không chính xác. Lưu ý rằng các bit không phải là số 0 và số logic thực sự, nhưng những thứ ồn ào như điện áp và dòng điện và có nhiễu hữu hạn trong hệ thống luôn có khả năng sẽ đọc được một bit sai. Vào thời xưa (với tư cách là một lập trình viên ứng dụng), tôi đã tìm thấy một vài lỗi CT -both thuộc loại logic xấu và của đơn vị X trong CPU Y đôi khi mang lại cho tôi loại kết quả xấu, thời gian để có được những kẻ CTNH để thay thế một loạt chip. Các mạch thực tế trôi theo thời gian và sử dụng, và nếu thiết bị của bạn đã sẵn sàng để thất bại, bạn có thể bắt đầu nhận các lỗi bit, đặc biệt là nếu bạn đang ép xung hoặc vượt quá phạm vi hoạt động được đề xuất.

Đây là một vấn đề thực sự đối với siêu máy tính, trong đó các tính toán liên quan đến các hoạt động của dấu phẩy động 1e18 trở lên được dự tính.


3

Nội dung sau đây có thể là về lỗi tính toán trong GPU.

Khi có đủ thời gian, Intel i7-3610QM và Nvidia GeForce GTX 660 sẽ không đồng ý với nhau theo cùng một hướng dẫn. (cuda 5.5, tính toán_20, sm_20)

Vì vậy, một người còn lại để kết luận rằng một trong hai người mắc lỗi.

Trong một tiêu chuẩn nghiên cứu khả thi mô phỏng hạt tôi nhận thấy rằng sau một nghìn lần biến đổi độ chính xác gấp đôi (các phép biến đổi bao gồm sin, cos, phép nhân, phép chia, phép cộng và phép trừ) bắt đầu xuất hiện.

Tôi sẽ cung cấp cho bạn một đoạn trích số nhỏ để so sánh (số thứ nhất luôn là CPU, GPU thứ hai)

-1.4906010142701069
-1.4906010142701074

-161011564.55005690
-161011564.55005693

-0.13829959396003652
-0.13829959396003658

-16925804.720949132
-16925804.720949136

-36.506235247679221
-36.506235247679228

-3.3870884719850887
-3.3870884719850896

(lưu ý rằng không phải mọi chuỗi biến đổi đều gây ra lỗi)

Mặc dù lỗi tối đa gần như không đáng kể (0.0000000000000401%)nhưng nó vẫn tồn tại và góp phần gây ra lỗi tích lũy.

Bây giờ lỗi này có thể là do sự khác biệt trong việc thực hiện một trong các thư viện nội tại. Thật vậy, có vẻ như GPU thích làm tròn hoặc cắt bớt nơi CPU làm tròn. Thật kỳ lạ, điều này dường như chỉ xảy ra trên các số âm.

Nhưng vấn đề là các hướng dẫn giống hệt nhau không nhất thiết được đảm bảo để trả về kết quả giống hệt nhau, ngay cả trên các máy kỹ thuật số.

Tôi hy vọng điều này đóng góp.

EDIT dưới dạng sidenote: Trong trường hợp lỗi số học GPU, điều này (ctrl + f "GPU đầu tiên có hỗ trợ bộ nhớ ECC") cũng có thể được quan tâm, mặc dù không nhất thiết liên quan đến các lỗi ở trên.


Tính toán điểm nổi có thể khác nhau dựa trên nơi chúng được lưu trữ. Các thanh ghi FPU bên trong của một số CPU có chiều dài khác với RAM, do đó tùy thuộc vào nơi nó tải các toán tử từ đó, nó có thể đi đến các kết quả khác nhau. Để biết thêm thông tin, tôi khuyên bạn nên float-point-gui.de . Tuy nhiên, đây không phải là lỗi tính toán - đó là do thiết kế làm thế nào các mỹ phẩm điểm nổi đang hoạt động.
Philipp

2
Đối với những người không biết về cách thức hoạt động của toán học FP, chỉ cần làm rõ nhận xét của Philipp, những khác biệt này rất có thể đúng (vì sự khác biệt của chúng không phải do lỗi phần mềm hoặc lỗi phần cứng). Sự khác biệt có thể là do triển khai phần mềm hoặc triển khai phần cứng. Người ta phải sử dụng khái niệm epsilon của máy cố định để xác định xem đây có phải là lỗi không: en.wikipedia.org/wiki/Machine_epsilon (về cơ bản hằng số này mô tả chính xác một thao tác FP phải như thế nào)
Thomas Eding

1

Xét về những gì bạn coi là "CPU" thực tế (đơn vị thực thi, đường ống..ect) thì điều đó không bao giờ xảy ra. Có một vấn đề được biết đến với một trong những hương vị Pentium một thời gian trước, nhưng đó là vấn đề duy nhất mà tôi từng nghe nói. Bây giờ, nếu bạn xem xét các bộ chip được tích hợp trong bộ xử lý hoặc ít nhất là cùng một bao bì như bộ điều khiển USB, bộ điều khiển TSEC, bộ điều khiển DMA hoặc bộ điều khiển bộ nhớ thì có rất nhiều lỗi. Tôi nghi ngờ có bất kỳ loại dữ liệu thống kê về điều đó mặc dù.


0

Một vấn đề "phần cứng tệ hại" khác cần xem xét trong bối cảnh này là phần cứng dấu phẩy động vốn đã "mất": nó có độ chính xác hạn chế và với số lượng đủ lớn (xem lại trích dẫn Dijkstra ban đầu), bạn sẽ không thể phân biệt giữa xx + 1, hoặc thậm chí x + 1000000. Bạn có thể nhận được các thư viện dấu phẩy động chính xác "vô hạn", nhưng chúng chậm và cuối cùng vẫn bị giới hạn bởi bộ nhớ khả dụng.

Nói tóm lại, Dijkstra đã làm việc trong lĩnh vực lý thuyết và phần cứng / phần mềm thực sự không phù hợp với lý tưởng lý thuyết rất tốt. (Hãy nhớ rằng, "máy Turing" ban đầu đã chỉ định một băng giấy vô hạn.)


2
Điều này không nhất thiết có hiệu lực chứng minh, mặc dù, đó là bối cảnh của câu hỏi. Giới hạn trên của các loại tổn thất này có thể, và thường được tính toán chính xác theo lý thuyết. Nói cách khác, các chương trình vẫn có thể được chứng minh chính xác trong phạm vi sai số được xác định trước. Trong một số lĩnh vực nhất định, tôi cho rằng bất kỳ ai không xem xét các vấn đề này sẽ không thực hiện đúng công việc của mình!
Elias Vasylenko

(1 - .7) * 100 nên là 30 mặc dù JavaScript sẽ trả về 30.000000000000004đó một lỗi. Cho dù đó là phần cứng hay phần mềm, tôi không chắc chắn.
Giăng
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.