CPU'lar ne sıklıkla hesaplama hataları yapar?


22

Dijkstra'nın Yapısal Programlama Üzerine Notlarında, bilgisayar programlarının soyut varlıklar olarak kullanılabilirliği hakkında çok konuşur. Bunun bir sonucu olarak, testin nasıl yapılmayacağını anlatıyor. Örneğin, f (x, y) = x * y çarpım işlevini tüm x ve y aralıklarında x ve y büyük değerleri için test etmenin imkansız olacağına dikkat çekiyor. Benim sorum onun misc ile ilgilidir. "berbat donanım" hakkında açıklamalar. Yazının 1970'lerde bilgisayar donanımının daha az güvenilir olduğu zamanlarda yazıldığını biliyorum, ancak bilgisayarlar hala mükemmel değil, bu yüzden bazen hesaplama hataları yapmaları gerekiyor . Bunun ne sıklıkta olduğunu veya bu konuda istatistik olup olmadığını bilen var mı?



İşte Pentium FDIV hata , şu anda mevcut iki cevap tarafından belirtilen wikipedia sayfası .
Cascabel

Temel CPU işlemlerinde herhangi bir yedekleme veya hata kontrolü olmadan geçiyoruz, böylece rasgele geçici hesaplama hatalarının sıklığı için üst sınır kolayca tahmin edilebilir. CPU talimatlarının çoğu matematiği içerir (hesaplama ve hafıza işlemleri için adreslerin hesaplanmasında) ve modern CPU'lar saniyede milyarlarca işlem yapıyor, bunu günde 1 - 14 işlem olarak adlandırıyorlar. 10 matematik hatalarından 1'i program üzerinde belirgin bir etkiye sahip olacaksa (muhtemelen düşük bir tahmin) ve bu tür hataları günlük olarak görmüyorsak, ALU için temel hata oranı <1e-13 olmalı ve ben <1e-15 olacağını tahmin ediyorum.
Russell Borogove

@NickC: Bu soru hakkında pratik hiçbir şeyin olmadığını mı ima ediyorsunuz? Yani donanımın işe yarayıp yaramadığı sorusunun önemli olmadığını mı düşünüyorsunuz? Programın düzgün çalışıp çalışmadığı gerçekten önemli olduğunda ne olur (gerçek zamanlı programlama sadece teorik mi yoksa bu sitedeki insanlar için çok mu gelişmiş?)? Yan kanaldan sızan bilgiler nedeniyle bir kullanıcının diğer kullanıcılardan anahtar çalabileceği donanımdan ne haber? Kahretsin, yorumlarınız için bir zayıf düğme olsaydı.
Longpoke

1
@ Longpoke Me de.
Nicole,

Yanıtlar:


14

İşlemcinin tasarımındaki gerçek / gerçek hatalar bir yana, bu soruyu aradığınızı düşünüyorum . Soru: Kozmik Işınlar. Bir programı etkilemelerinin olasılığı nedir ? Ondan alıntı alamıyorum, çünkü burada işte tekrar SO engellendi ( iç çekiş ).

Yukarıdakileri görmezden geldiğimde, erken Pentiumlarda bazı FPU hesaplama hataları olduğunu hatırlıyor gibiyim, bu yüzden kesinlikle yanılmazlar.

Elimde kesin bir kanıt yok, ancak bağırsaklarım muhtemelen Önbellek / RAM / Disk parçalarının bozulmasından ve hesaplama işleminin yanlış olmasından endişe duymanız gerektiğini söylüyor .


40
SO iş yerinde engellendi mi? Şirketinizdeki biri yazılım geliştirmeyi sabote etmeye çalışıyor mu?
Nicole

3
Diyelim ki sadece bir kişimiş ve henüz başarılı olamamışlar ...).)
Dan McGrath

9
SFW sitelerini kurumsal düzeyde engellemenin gerekçesini asla anlayamadım. Arama motorları son derece değerli bir araç olduğundan, gereken onlar verim bilgileri görebilecektir.
Tim Post

@Dan, engelini kaldır. Eve https tüneli yapabilmelisiniz.

4
Sistemi atlayarak yakalanmak sadece fesih sebebiydi. ABD'ye taşındım ve yeni bir iş buldum.
Dan McGrath

6

Bugünlerde bu soruyu cevaplamada büyük bir sorun, CPU üreticilerinin bir NDA (Gizlilik Beyanı Anlaşması) yongası için verdiği notu sarmasıdır. Intel bunu yapar IIRC.

Daha az sayıda gizli üretici, veri sayfasında düzeltmeler yapar, ancak size neyin değiştiğini söylemeyin, bu yüzden 300 sayfayı karşılaştırmaktan hoşlanmıyorsanız, söylemekte zorlanacaksınız.

CPU'larda birçok kötü talimatlar vardı, açılışta buldukları Linux çekirdeği raporunu izlemek ilginç.

Google'ın bellek hatalarıyla ilgili makalesi çok alakalı, sandığınızdan daha yaygın. "Vahşi Alanda DRAM hataları: Büyük Ölçekli Bir Saha Çalışması" Schoeder, Pinheiro ve Weber Başlangıçta ACM SIGMETRICS'te 2009 yılında yayınlandı. ACM'nin İletişiminde Yayınlandı

Tüm bu bellek hatalarının sizin için anlamı şudur: ECC belleği olmadan, yine de yanlış hesaplamalar alacaksınız.


5

Bir donanım satıcısı için çalıştığımda, daha önce hiçbir CPU'nun hatasız olmadığı iddia edildi. Ve bu sadece mantıksal hatalar. Genellikle üretici çoğunu bulur ve yongaları ya da çevrelerinde çalışan BIOS ayarlarını bulur. Ancak, kozmik ışınlar gibi şeyler zaman zaman hafızada bir miktar kapanır (ve hafızada pastırmayı kurtarmak için genellikle parite bitleri veya SECDED devre vardır), her zaman bir bitin yanlış okunması her zaman sonlu bir şanstır. Bitlerin gerçek mantıksal sıfırlar ve olanlar olmadığını, ancak voltaj ve akımlar gibi gürültülü şeyler olduğunu ve sistemde sonlu gürültü verildiğini her zaman yanlış bir bitin okunma şansının bulunduğunu unutmayın. Eskiden (bir uygulama programcısı olarak), kötü mantık türünün yanı sıra, CPU Y'deki X ünitesinin bir kaç HW hatası buldum, bazen bana kötü bir sonuç türü veriyor. HW elemanlarının çip çeşitlerinin yerini alma zamanı. Gerçek devreler zaman ve kullanımla sürüklenir ve sizinki başarısız olmaya hazırlanıyorsa, özellikle overclock yapıyorsanız veya önerilen çalışma aralığını aştıysanız, bit hataları almaya başlayabilirsiniz.

Süper hesaplama için 1e18 veya daha fazla kayan nokta işlemlerini içeren hesapların tasarlandığı gerçek bir konudur.


3

Aşağıdaki içerik GPU’lardaki hesaplama hatalarıyla ilgili olabilir.

Yeterli zaman verildiğinde, Intel i7-3610QM ve Nvidia GeForce GTX 660 aynı talimatlar verildiğinde birbirleriyle aynı fikirde olmayacaklar. (cuda 5.5, hesap_20, sm_20)

Böylece, ikisinden birinin hata yaptığı sonucuna varılmaya başlandı.

Bir parçacık simülasyonu sırasında fizibilite incelemesi testi sırasında, binlerce veya daha fazla çift hassas dönüşümün (günah, cos, çarpma, bölme, toplama ve çıkarma dahil dönüşümler) hataların sürünmeye başladığını fark ettim.

Size karşılaştırmanız için küçük bir sayı pasajı vereceğim (ilk sayı her zaman CPU, ikinci GPU)

-1.4906010142701069
-1.4906010142701074

-161011564.55005690
-161011564.55005693

-0.13829959396003652
-0.13829959396003658

-16925804.720949132
-16925804.720949136

-36.506235247679221
-36.506235247679228

-3.3870884719850887
-3.3870884719850896

(her dönüşüm dizisinin bir hata vermeyeceğini unutmayın)

Maksimum hata neredeyse göz ardı edilebilir olmakla birlikte, (0.0000000000000401%)halen mevcuttur ve kümülatif hataya katkıda bulunur.

Şimdi bu hata, iç kütüphanelerden birinin uygulanmasındaki bir farktan kaynaklanıyor olabilir. Gerçekten de, GPU, CPU'nun yuvarlandığı yeri aşağı yuvarlamayı ya da kısaltmayı tercih ediyor gibi görünüyor. Merakla da, bu sadece olumsuz sayılar üzerinde gerçekleşiyor gibi görünüyor.

Ancak mesele, aynı talimatların, dijital makinelerde bile aynı sonuçları getirmesinin kesin olarak garanti edilmemesi gerektiğidir.

Umarım bu katkıda bulunmuştur.

Bir kısaltma olarak EDIT: GPU aritmetik hataları söz konusu olduğunda, bu (ctrl + f "ECC Bellek Desteğine Sahip İlk GPU") da yukarıdaki hatalarla ilgili olmamakla birlikte ilgi çekici olabilir.


Kayan nokta hesaplamaları, nerede depolandıklarına bağlı olarak farklı şekilde ortaya çıkabilir. Bazı CPU'ların dahili FPU kayıtları RAM'den farklı bir uzunluğa sahiptir, böylece operatörleri nereden yüklediğine bağlı olarak farklı sonuçlara ulaşabilir. Daha fazla bilgi için floating-point-gui.de'yi tavsiye ederim . Bununla birlikte, bu bir hesaplama hatası değildir - kayan nokta aritmetik çalışmasının nasıl çalıştığının tasarımı gereğidir.
Philipp

2
FP matematiğinin nasıl çalıştığını bilmeyenler için, sadece Philipp'in sözünü açıklığa kavuşturmak için, bu farklılıklar çok iyi olabilirdi (farklarında olduğu gibi yazılım hataları veya donanım hataları nedeniyle değil). Farklılıkların yazılım uygulamaları veya donanım uygulamaları nedeniyle olması muhtemeldir. Bunların buggy olup olmadığına karar vermek için sabit bir makine epsilon kavramını kullanması gerekir: en.wikipedia.org/wiki/Machine_epsilon (esas olarak bu sabit, tek bir FP işleminin ne kadar hassas olması gerektiğini
açıklar

1

Asıl "CPU" (yürütme birimleri, boru hattı ... vb.) Ne düşündüğünüz açısından hiç olmaz. Bir süre önce Pentium tatlarından biriyle ilgili bilinen bir sorun vardı, ama bu duyduğum tek şey. Şimdi, işlemcilerin içine yerleştirilmiş yonga kümelerini veya en azından aynı USB denetleyicileri, TSEC, DMA denetleyicisi veya bellek denetleyicisi gibi aynı paketlemeyi düşünürseniz, orada çok fazla hata var. Bununla ilgili herhangi bir istatistiksel veri olduğundan şüpheliyim.


0

Bu bağlamda göz önünde bulundurulması gereken bir diğer "kötü donanım" sorunu, kayan nokta donanımının doğal olarak "kayıp" olduğudur: kesin bir kesinlike sahiptir ve yeterince büyük sayılarla (orijinal Dijkstra alıntılarına bakın) arasında xve x + 1veya hatta x + 1000000. "Sonsuz" hassas kayan nokta kitaplıkları elde edebilirsiniz, ancak bunlar yavaş ve nihayetinde hala kullanılabilir bellek ile sınırlıdır.

Kısacası, Dijkstra teori alanında çalışıyordu ve gerçek donanım / yazılım teorik ideallere pek uymuyordu. (Unutmayın, orijinal "Turing makinesi" sonsuz bir kağıt kaseti belirtti.)


2
Bu ille de, sorunun bağlamı olarak, provability'yi etkilemez. Bu tür kayıplardaki üst sınırlar teorik olarak kesin olarak hesaba katılabilir ve çoğu zaman hesaba katılır. Başka bir deyişle, programlar önceden belirlenmiş bir hata payı dahilinde hala doğru olabilir. Bazı alanlarda, bu sorunları dikkate almayan kişilerin işlerini düzgün yapmamasını düşünürüm!
Elias Vasylenko

(1 - .7) * 100 gerektiğini JavaScript dönecektir olsa 30 yaşında olmak 30.000000000000004hangi olan bir hata. Donanım veya yazılım olup olmadığına şahsen emin değilim.
John
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.