Transferul de conservare viperă
Folosind dreapta aritmetică la stânga: "8 + 2 = 0, transferul 1", "7 + 2 + 1 = 0, transferul 1", "6 + 3 + 1 = 0, transferul 1" și așa mai departe până când suma finală. Cu toate acestea, știm că nu a primit încă ultima cifră a rezultatului, nu știm prima cifră la stânga, până când vom Hai să trecem prin fiecare cifră în calcule, deplasarea transferul fiecărei cifre la celălalt la stânga ei. Astfel, adăugarea a două numere de n-biți va avea nevoie de timp proporțional cu n, chiar dacă mașina pe care le folosim, este capabil de a efectua mai multe calcule simultan.
În ceea ce privește electronică, folosind biți (cifre binare), acest lucru înseamnă că, chiar dacă avem la dispoziție n vipere cu un singur bit, avem încă nevoie să-și petreacă timp proporțional cu n, pentru a permite transferul de răspândire de la un capăt la celălalt număr. Atâta timp cât o facem,
1. Noi nu știm rezultatul adăugării. 2. Nu știm dacă rezultatul adăugării este mai mică sau mai mare decât un anumit număr (de exemplu, nu știm dacă va fi pozitiv sau negativ).
Transferul sumator accelerat poate reduce întârziere. În principiu, întârzierea poate fi redusă astfel încât să fie proporțională cu logn. dar pentru un număr mare nu este cazul, deoarece chiar și atunci când sunt aplicate de transport accelerat, distanța pe care semnalul se deplasează de-a lungul crește cip proporțional cu n și crește timpul de propagare prin același raport. După ce vom obține numerele cu dimensiuni variind de la 512 biți la 2048-biți, care sunt necesare pentru a-cheie de criptare publică. accelerată transferul de mai mult nu ajută.
Am crezut că rezoluția de întârziere până la sfârșitul transferului, sau transferuri de conservare, aparține lui John von Neumann. [3]
Aici este un exemplu de adăugare binare:
Aritmetică păstrarea de transfer funcționează lăsând binar, rămân în continuare pentru a lucra la baza 2. Se calculează cifra sumă de cifre ca
Înregistrarea este neconvențională, dar rezultatul este încă ambiguu. Mai mult, sumatoarele de date n (aici, n = 32 sumator), rezultatul poate fi calculat după trecerea printr-o intrare sumator (per generator de ceas), deoarece fiecare cifră a rezultatului este independent de orice alta, fie.
În cazul în care vipera este necesară pentru a adăuga două numere și se calculează rezultatul, adăugarea de conservare a transferului nu este potrivit, deoarece rezultatul rămâne convertibile înapoi în binar, iar acest lucru înseamnă că transferul nu a fost încă răspândit de la dreapta la stânga. Dar, în aritmetica întreg mare, adiția este o operație foarte rar, iar sumatoare menținând în același timp de transfer este de obicei folosit pentru acumularea sumelor parțiale ale multiplicatorului.
Agregatorii de reținere transferențiale
Să presupunem că avem doi biți de memorie pentru fiecare cifră a rezultatului, atunci putem folosi reprezentarea binară redundantă. memorarea valorilor 0, 1, 2 sau 3 în fiecare poziție digitală. Acest lucru se datorează faptului că rezultatele noastre cu păstrarea transferului poate fi adăugat la mai mult de un număr binar fără a inunda capacitatea noastră de memorie: dar atunci ce?
Cheia pentru înțelegerea este că, în timpul fiecare adăugare parțială vom adăuga trei biți:
- 0 sau 1, din numerele pe care le adăugăm.
- 0 dacă numărul în memoria noastră este 0 sau 2, sau 1 dacă este 1 sau 3.
- 0 dacă cifra din dreapta este 0 sau 1, sau 1 dacă este 2 sau 3.
Cu alte cuvinte, vom lua numărul poziției de transfer la dreapta, și se transferă numărul de transfer la stânga, precum și în plus tradiționale; dar cifra de transfer, care se trece la stânga este rezultatul calculului precedent, mai degrabă decât cea actuală. În timpul fiecărui ciclu al generatorului, transferurile sunt deplasate doar un singur pas înainte, mai degrabă decât n trepte ca un adaos tradițional.
Deoarece semnalele nu se mișcă până în prezent, generatorul poate bifa mai rapid.
La sfârșitul calculului rămâne necesitatea de a converti rezultatul în binar, care este de fapt înseamnă pur și simplu instrument de a merge tot drumul prin numărul, cât și în vipera tradițional. Dar dacă am făcut 512 adăugiri în timpul executării de multiplicare 512-biți, mare preț această transformare finală este, de fapt împărțit în toate 512 adăugiri, astfel încât fiecare plus poartă numai 1/512 prețurile ridicate ale finale plus „normale“.
La fiecare etapă de adăugare a transferului conservare
- Știm rezultatul adăugării imediat.
- Noi încă nu știu dacă rezultatul adăugării este mai mare sau mai mică decât un număr dat (de exemplu, noi nu știm dacă este pozitiv sau negativ).
Acest ultim punct este dezavantajoasă atunci când este utilizat cu sumatoarele pentru efectuarea multiplicarea modulare de transfer de conservare (multiplicare după împărțirea, stocarea doar restul). Dacă nu putem ști dacă rezultatul intermediar este mai mare sau mai mică decât modulele, cum putem ști scădea module sau nu?
multiplicare Montgomery. care depinde de cea mai din dreapta cifră a rezultatului este una dintre soluțiile; care este mai similar cu sine, cu adaos de conservare a transferului, acesta produce costuri de regie fixe, astfel încât secvența de înmulțiri Montgomery economisește timp, dar nu singur. Din fericire, exponentiala, care este de fapt o secvență de multiplicări, este operațiunea cea mai comună în criptografie cheie publică.
prin transfer de conservare Aparatul constă din n sumatoare complete. fiecare dintre care calculează o sumă unică de biți și un bit de transport bazat în întregime pe intrare biții respectivi de trei numere. Din aceste trei n numere de biți a. b și c. produce o sumă ps parțială și de transfer mutat sc:
psi = ai ⊕ bi ⊕ ci = a_ \ oplus B_ \ oplus C_> sci = (ai ∧ bi) ∨ (AI ∧ CI) ∨ (∧ ci bi) = (a_ \ pană b _) \ vee (a_ \ C_ pană) \ vee (B_ \ pană c _)>
Suma totală poate fi calculată apoi:
- Shear secvența de transfer sc lăsat de un singur loc.
- Adăugarea 0 la stanga (cel mai semnificativ bit) a parțiale ps secvență sum.
- Folosind un sumator cu transfer de serie pentru adăugarea celor două împreună și producția rezultată de valoarea n + 1-bit.
Când pliate lungul a trei sau mai multe numere, utilizarea de retinere sumatorul transferențial urmat de viperă succesive este mai rapid decât utilizarea a două sumatoare cu transfer de serie. Acest lucru se întâmplă deoarece vipera de serie poate calcula suma de biți fără a aștepta bit de transport de calcul anterior, și, astfel, are o întârziere egală cu cea în sumatoarele n plin. Sumatorul calculează un transfer păstrând toate valorile lor de ieșire în paralel și, astfel, are aceeași întârziere ca un sumator. Astfel, timpul de calcul total (în unități de timp întârziere adăugarea completă) pentru reținerea transferului sumator plus Sumatorul cu transferul serial este egal cu n + 1, în timp ce pentru două sumatoare consecutive ar trebui să fie 2n.