Nachrichten

Printt II ScStr - Geschichte

Printt II ScStr - Geschichte

Princeton II

(ScStr: dp. 1370; 1. 177'6", T. 32'8"; dr. 25'9"; s. 8 k., a. 4 8"
58 ct. Sg., 6 32-pdr. Wagen.)

Die zweite Princeton, ein Klipper-gebautes Schiff, wurde im Juni 1851 im Boston Navy Yard auf Kiel gelegt; Launehel im Oktober 1851

gesponsert von Lt. Edward R. Thompson und Eommissionel 18. Mai 1852 in Boston, Comdr. Sidney Smith Lee im Kommando.

Einige der verwendbaren Hölzer des ersten Princeton wurden in den neuen Rumpf des zweiten Princeton integriert. Nach Fertigstellung des Rumpfes in Boston fuhr Princeton am 1. Mai 1852 nach Baltimore, wo ihre Maschinen bei Vulcan Iron Works installiert wurden. Neue Kessel und Propeller wurden hinzugefügt, aber die ursprünglichen Motoren des "Ericsson Semi Eyelinder"-Designs wurden beibehalten. Sie blieb bis zum 18. November in Baltimore, bevor sie nach Norfolk abfuhr und am selben Tag ankam.

Princeton wurde für den Dienst mit Commodore Perry's Squadron im Fernen Osten ausgerüstet und segelte am 18. November 1852 von Baltimore aus, um sich mit Mississippi vor Annapolis zu treffen. Auf dem Weg die Chesapeake Bay hinunter bekam sie Kesselprobleme und blieb in Norfolk, während Mississippi ohne sie weiterfuhr. Sie wurde am 1. Januar 1853 in Norfolk außer Dienst gestellt.

Von Juli bis September 1853 diente Princeton als Flaggschiff der Eastern Squadron unter dem Kommando von Commodore Shubriek, die für den Schutz der Fischerei vor der Küste von Nova Seotia verantwortlich war. Als nächstes kehrte Princeton nach Abschluss dieses Auftrags nach New York zurück, wo sie bis zum 31. Oktober 1854 blieb und dann zum Dienst im Golf von Mexiko und auf den Westindischen Inseln aufbrach. Sie kehrte am 10. Juni 1855 nach Norfolk zurück und wurde in Ordinarius untergebracht.

1857 wurde Princeton nach Philadelphia gebracht, wo sie bis zum 9. Oktober 1866 als Empfangsschiff stationiert und dann verkauft wurde.


Printt II ScStr - Geschichte

Eine Konstellation zwischen Fische und Stier und als Widder dargestellt. In der griechischen Mythologie war Widder ein Widder mit. Goldenes Vlies von Hermes an Nephele, die verlassene Frau eines Königs Thessaliens, um ihre beiden Kinder vor dem Zorn ihrer Stiefmutter Ino zu retten. Mit Nepheles Tochter Helle und ihrem Sohn Phrysux auf dem Rücken flog Widder in die Luft und steuerte auf das Königreich Kolchis am Ostufer des Schwarzen Meeres zu. Während der Widder die Meerenge überquerte, die Europa von Asien trennte, stürzte Helle ins Wasser und ertrank. Danach war die Meerenge in der Antike als Hellespont bekannt und wird heute Dardanellen genannt.

Während Phryxus noch an Bord war, setzte Widder seinen Flug nach Osten fort. Als er in Kolchis endlich in Sicherheit war, tötete Phryxus den Widder als Opfer für Jupiter. Das goldene Vlies des Widders wurde dann in einen heiligen Hain gelegt, der von einem schlaflosen Drachen bewacht wurde.

Die Nachricht vom Schicksal des Widders erreichte Thessalien und veranlasste schließlich Jasons Expedition auf der Suche nach dem goldenen Vlies. Dementsprechend beauftragte der junge Held den Schiffsbaumeister Argos, ein für die Reise geeignetes Schiff zu bauen. Das nach seinem Erbauer Argo benannte Schiff trug Jason und seine Gefährten, die Argonauten, auf einer der abenteuerlichsten und bekanntesten Reisen der Antike und konnte es mit der Aufregung von Odysseus' langem Kampf um die Rückkehr nach Ithaka und der Spannung von Noah aufnehmen. s 40 Tage in der Arche. Tatsächlich haben einige Studenten der frühen Literatur aus der Ähnlichkeit der Namen der beiden Schiffe und aus parallelen Vorfällen in ihren Geschichten geschlossen, dass die Saga der Argo von Genesis' Bericht über die Arche inspiriert wurde.

(ScStr: t. 820 1. 201' T. 27'10" dph. 15'8" dr. 16' s. 12 k. cpl. 90 a. 4 8" sb., 1 30-pdr. Pr, I 12-pdr. r.)

Der erste Widder wurde 1861 in Sunderland, England, auf der Werft von James Laing in Deptford auf Kiel gelegt. Erbaut während des amerikanischen Bürgerkriegs in der Hoffnung, dass sie von Personen gekauft werden würde, die die Blockade der Union Navy gegen den Süden durchbrechen wollten, wurde dieser Schraubendampfer mit Eisenhülle 1862 fertiggestellt und später in diesem Jahr an Frederic Peter Obicino aus London verkauft. England. Sie wurde anscheinend irgendwann im Jahr 1863 an die kubanische Firma V. Mala &. Fie weiterverkauft. von Havanna.
Fast keine Aufzeichnungen über ihre Karriere als Blockadeläuferin scheinen überlebt zu haben, aber wir wissen, dass Widder in dieses riskante Geschäft eingestiegen ist, denn ein Bericht der Konföderierten über Baumwollexporte zwischen dem 1. November 1862 und dem 31. von Wilmington, NC, oder Charleston, SC Die Anzahl ihrer Reisen in den Süden ist unbekannt und in einem Fall endeten ihre Bemühungen, die Konföderation zu versorgen, am 28. März 1863.

Kurz nach Mitternacht drehten Wachen auf dem Schraubendampfer Stettin, der selbst ein ehemaliger Blockadeläufer war, nach seiner Gefangennahme den von Blockaden entdeckten Widder vor Bull's Bay, S.C., und versuchte, mit einer Ladung Schnaps durch die Blockade zu schlüpfen. Das Schraubenkanonenboot der Union lichtete sofort den Anker und nahm die Verfolgung auf. Als die Läuferin in Reichweite war, eröffnete Stettin das Feuer auf Widder und setzte die Verfolgung fort, bis das Untiefenwasser sie zum Ankern zwang. Bei Tagesanbruch sah Stettins Kommandant, der amtierende Meister Edward F. Devens, dass seine Beute am südlichen Ende der Petrel Bank an Land gelaufen war. Sofort ließ er zwei Boote zu Boden, und "... übernahm das Kommando persönlich... ging an Bord und nahm sie als Preis für die US-Regierung in Besitz." Da der Blockadeläufer achtern auf Grund lief, ließ Devens ihre Ladung nach vorn verlagern, und der gestrandete Dampfer schwebte mit der steigenden Flut frei.

Devens brachte Widder über Charleston nach Port Royal, wo Konteradmiral Samuel Francis Du Pont erklärte, dass sie „... Er befahl ihr nach Norden, um sie vor einem Admiralsgericht zu entscheiden, und da Devens krank war, trennte er ihn von Stettin und übertrug ihm den Preis für die Reise nach Boston, wo sie am 20. Mai 1863 von der Marine verurteilt und dort gekauft wurde.

Während Aries für den Dienst in der Union Navy ausgerüstet wurde, erbeutete Lt. Charles W. Read, CSN, im Preis Clarence, die Barke, Tacony verlagerte seine Besatzung zu ihr als besseres Schiff und eine Kreuzfahrt nach Norden und vor der New Englands Küstenlinie, an der er die Schifffahrt der Union terrorisierte und die Küstenstädte im Norden erschreckte. Um das Geschrei der verängstigten Bürger nach Schutz vor diesem "rebellischen Piraten" zu stillen, schickte Marineminister Gideon Welles eine Reihe von Kriegsschiffen auf die Verfolgung des Handelsräubers und versprach, dass sich der Widder ihnen bald anschließen würde. Bevor der Widder jedoch zur See bereit war, näherten sich andere Kriegsschiffe der Union Read und zwangen ihn, seine Streitmacht aufzugeben. Widder wurde am 25. Juli 1863 bei der Boston Navy Yard in Dienst gestellt, Acting Vol. Lt. Edward F. Devens im Kommando.

Am Tag ihrer Indienststellung segelte der Schraubendampfer nach Port Royal, S.C., mit 200 Mann, Marinesoldaten, um Konteradmiral John A. Dahlgren beim Aufbau seiner Streitkräfte für einen erneuten Angriff auf Fort Wagner zu unterstützen, das die seewärtigen Zugänge zu Charleston bewachte. Nachdem sie ihre Passagiere von Bord gegangen war, machte sie sich wieder auf den Weg zur Festung Monroe, Virginia, mit der Nachricht, dass Dahlgrens Kohle erschöpft sei und dass "... ein Nachschub nicht zu früh weitergeleitet werden kann". Von Hampton Roads ging Aries nach New York, wo sie 200 weitere Männer für das South Atlantic Blockading Squadron an Bord nahm, bevor sie wieder nach Süden fuhr

Nachdem sie diesen Ersatz in Port Royal abgeliefert hatte, schiffte sie etwa 100 Passagiere ein – meistens entweder Matrosen, die zu krank waren, um in einer Kampfzone zu bleiben, oder Männer, deren Dienstzeit abgelaufen war. Während ihrer Reise nach Norden stieß sie jedoch am 27. August vor Cape Lookout, North Carolina, auf einen furchtbaren Sturm und erlitt beim Kampf gegen die Wellen einen Motorschaden. Der Wind war so stark, dass Comdr. John J. Almy – der kommandierende Offizier von Connecticut, der am 1. September zufällig auf den behinderten Widder stieß – beschrieb das Wetter als schlechter „... "Der kommandierende Offizier eines anderen Kriegsschiffs der Union, Pocahantas, erklärte, dass" ... wenn der Hurrikan ... mit unverminderter Kraft noch viel länger andauerte, hätte dieses Schiff [Pocahontas] ihn nicht überleben können ... Connecticut nahm Aries im Schlepptau und fuhr über Beaufort nach Hampton Straßen, auf denen sie am 6. ankamen. Zwei Tage später kam der Schraubendampfer Daylight an und schleppte Aries zur Reparatur nach Baltimore.

Anfang November, als die Werftarbeiten auf Aries sich dem Abschluss näherten, befahl der Marineminister Gideon Welles Devens, mit ihr in die Gewässer vor Wilmington, N.C. Ihre erste Aktion in diesem neuen Auftrag begann am 6. Dezember bei Tagesanbruch, als einer ihrer Ausguckte in Western Bar in der Nähe von Smith's Island, N.C., einen auf Grund gelaufenen Dampfer entdeckte.

Der Widder machte sich sofort auf den Weg und steuerte auf den gestrandeten Blockadeläufer zu, der sich bald als der neue britische, eisengepanzerte, schraubengetriebene Dampfer Ceres herausstellte, der Bermuda am 3. Nacht vom 5. und 6. Als das Untiefenwasser Widder dazu zwang, zu hieven, ließ Devens zwei Boote zu Wasser, die weiter zu den lodernden Ceres fuhren.

Beim Einsteigen in den Preis machten sich die Bootsgruppen mit Feuereimern an die Arbeit, um die Flammen zu löschen, und hielten trotz Feuer von südlichen Batterien an Land an der Aufgabe fest. Inzwischen brachen die für die Boote verantwortlichen Offiziere in die Kapitänskajüte ein und fanden eine, die sehr wertvolle Informationen enthielt.
In dieser Nacht ließ die steigende Flut Ceres wieder flottmachen, und am frühen Morgen konnten Beobachter auf den Blockaden sehen, wie sie seewärts trieb. Eine Bootsbesatzung aus Maratango bestieg die Prise und verankerte sie in sicherem Wasser, und mit Männern aus Widder,

Violet und Connecticut löschten die restlichen Feuer. Widder schleppte dann den ehemaligen Blockadeläufer nach Beaufort, der ersten Station des Preises auf einer Reise über die Hampton Roads nach Washington, um eine Reihe von Papieren zu erhalten
zur Entscheidung zurückgekehrt.

Nachdem er Ceres nach Beaufort gebracht hatte, kehrte Widder zum Blockadedienst vor Wilmington zurück. In der Morgendämmerung des 20. Dezembers sahen Männer an Bord des Schiffes Dampf aus einem fremden Schiff aufsteigen, das etwa vier Meilen entfernt östlich im Südosten lag. Kurz darauf erschien der Gouverneur der Blockade der Union, Buckingham, und schloss den möglichen Preis, während Widder sich der Verfolgung anschloss. Als sie sich den Untiefen näherte, ankerte Widder in vier Faden Wasser und schickte ein bewaffnetes Boot mit einem Entertrupp zum Blockadeläufer.

Sie erfuhren, dass die Fremde die Blockade-Läuferin der Konföderierten Antonica war, die zuvor unter den Namen Lamar und Herald beträchtliche Berühmtheit erlangt hatte, als sie ein Katz-und-Maus-Spiel mit Blockaden des Bundes spielte, während sie Schmuggelware in südliche Häfen transportierte und jedes Mal beladen aufs Meer flüchtete mit zwischen 1.000 und 1.200 Ballen Baumwolle. In der Nacht zuvor hatte sie die Rolle der Maus übernommen, als sie auf Grund gelaufen war, als sie versuchte, mit einer Ladung, die hauptsächlich aus trinkbaren Spirituosen bestand, in den Cape Fear River zu schlüpfen. Nachdem sich kurze Versuche, sich freizumachen, als vergeblich erwiesen hatten, befahl Kapitän W. F. Adair, der Kommandant des Dampfers, seiner Mannschaft, ihr Schiff zu verlassen und mit Booten zum nächsten Land zu fahren, in der Hoffnung, die Küste vor Tagesanbruch zu erreichen. Sie wurden jedoch vom Gouverneur der Blockade der Union, Buckingham, entdeckt und von diesem Dampfer und dem Bundesschlepper Violet gefangen genommen.

Männer von Widder und mehreren anderen Unionsschiffen blieben die nächsten Tage an Bord der Antonia und mühten sich vergeblich ab, den Preis wieder flottzumachen. Als steigendes Wasser im gestrandeten und beschädigten Dampferrumpf deutlich machte, dass die Bemühungen unmöglich gelingen konnten, verließen die Bundessegler an Heiligabend endgültig das Schiff.

Das nächste Abenteuer des Widders fand am Ende der ersten Woche des Jahres 1864 statt. Kurz nach Tagesanbruch am 7. Januar, während sein Schiff in der Einfahrt von Little River, NC, Devens war, entdeckte "... die USS Montgomery auf der Jagd nach ihr ...« Der Widder machte sich sofort auf den Weg, um sich der Verfolgung anzuschließen, und gewann an dem Fremden. Das Wetter war schlecht und gegen 8.20 Uhr legte sich dichter Nebel und versteckte den fliehenden Dampfer. Als sie etwas mehr als eine Stunde später aufhörte, war die Verfolgungsjagd erheblich näher als bei ihrer letzten Begegnung. Widder eröffnete das Feuer, und ihr Schuss fiel dicht am Ziel. Diese Genauigkeit veranlasste den Blockadeläufer, " . . nach Westen . . . " zu schleppen.
jemals lief der Dampfer in der Nähe von North Inlet, in der Nähe von Georgetown, S.C. auf Grund und ihre Besatzung flüchtete ans Ufer. Der Widder ging schnell vor Anker, um nicht selbst zu stranden, und "... schickte sofort zwei bewaffnete Boote an Bord des Dampfers und holte ihn aus." Hohe Brandung vereitelte ihre Bemühungen, die Beute wieder flottzumachen, also setzten die Besatzungen der Boote das Schiff in Brand und kehrte zu Widder mit der Nachricht zurück, dass der Blockadeläufer der konföderierte Dampfer Dare war. Unglücklicherweise überschwemmte der zweite Kutter des Widders während der Expedition in der Brandung, was zur Gefangennahme von zwei seiner Offiziere und sieben Mannschaften durch konföderierte Truppen führte. Ein Boot von Montgomery kenterte auch mit dem Verlust von 2 Offizieren und 14 Männern, die inhaftiert waren.

Am Abend des 10. Januar erreichte Lt. Devens den Befehl, seine Boote zu schicken, um Iron Age zu helfen, die an diesem Morgen auf Grund gelaufen war, als sie versuchten, den gestrandeten Blockadeläufer Bendigo in der Nähe von Lockwoods Folly Inlet wieder flottzumachen. Gegen Mitternacht empfingen ihre Boote – zusammen mit einigen aus Minnesota, Daylight und Gouverneur Buckingham – die Offiziere und Männer des zum Scheitern verurteilten Schraubendampfers der Union.

Am folgenden Morgen, dem 11. Januar, verfolgte Aries gemeinsam mit Minnesota, Daylight, und Gouverneur Buckingham den Blockadeläufer Ranger, der mit einer Fracht aus Newcastle upon Tyne, England, in den Cape Fear River eindrang. Die Nordschiffe trieben den Dampfer auf Grund, wo sie von ihrer Besatzung zurückgelassen wurde. Ihre Bemühungen, Ranger als Beute wieder flottzumachen, wurden jedoch von südlichen Scharfschützen gestoppt, "... deren Feuer ihre [Rangers) Decks vollständig beherrschte". Da es unmöglich war, Ranger in Besitz zu nehmen, verbrannten die Matrosen der Union sie.

Während dieser Aktionen wurde schwarzer Rauch in Richtung Shallotte Inlet entdeckt. Widder, der in der Nacht zuvor in diesem Viertel von ihrer Station abgezogen worden war, wurde geschickt, um Nachforschungen anzustellen. Bald stieß sie auf "...einen gut aussehenden Doppelpropeller-Blockadeläufer, der Ceres ähnelte, gestrandet und brennend zwischen Tubb's und Little River Inlets..." Noch einmal hinderten Scharfschützen des Südens die Unionsparteien daran, den Dampfer zu besteigen, die Flammen zu löschen und die Beute in Besitz zu nehmen.

Am nächsten Tag, nachdem sich die Schützen zurückgezogen hatten, gelang es Devens, das Schiff zu entern und erfuhr, dass es sich um Vista handelte, ein Schwesterschiff von Ceres. Schwere Schäden an ihrem Rumpf machten es jedoch unmöglich, den Blockadeläufer wieder flottzumachen, und ihre beiden Anker waren seine einzige Beute.

Die nächste lebhafte Aktion des Widders kam zwei Monate später. Am 14. März fuhren sie und der Staat Georgia einen großen, langen und niedrigen Seitenraddampfer an der Westspitze von Oak Island in der Nähe der Western Bar vor Wilmington an Land. Ihre Annäherung an den nicht identifizierten potenziellen Preis – der dem kürzlich gefangenen Blockadeläufer A. D. Vance aus North Carolina ähnelte – wurde durch Beschuss von Batterien der Südküste beendet.

Den Großteil des Frühlings und Sommers war Widder außer Gefecht, um Reparaturen zu unterziehen, aber sie kehrte im September vor Wilmington zum Dienst zurück. Am 28. Oktober unterstützte sie Eolus und Calypso bei der Eroberung des englischen Dampfers Lady Sterling. In der Nacht zum 6. November entdeckte der Widder ". . . . . einen fremden Dampfer . . . . . ., nahm sofort die Verfolgung auf, eröffnete das Feuer auf den Fremden und warf Raketen nach Osten, die seinen Kurs anzeigten. Trotzdem trotz Unterstützung bei der Verfolgung durch Marantanza und Eolus und der Blockadeläufer waren kurzzeitig gestrandet, eine steigende Flut und eine geschickte Seemannschaft ermöglichten es dem Dampfer, in Wilmington in Sicherheit zu kommen.

Am 3. Dezember beschoss Aries zusammen mit fünf anderen Schiffen die Blockade des Dampfers Ala, den die Unionsblockadeurin Emma auf Marshall Shoal, Smith's Island, NC, auf Grund getrieben hatte, „... ..."

Jahrelange Arbeit und die ausdauernde Langeweile der Matrosen, die die Kriegsschiffe der Union im Blockadedienst bemannten, erwürgten schließlich die Konföderation. Nicht nur, dass immer mehr Blockadebrecher zerstört und gefangen genommen wurden, sondern gemeinsame Heer-Marine-Operationen entrissen dem Süden einen Seehafen nach dem anderen. Als das Jahr 1864 zu Ende ging, blieb nur noch ein wichtiger Hafen in der Hand der Konföderierten, Wilmington, wo Widder seit dem Eintritt in die Unionsmarine fast ausschließlich gedient hatte. Und zu dieser Zeit waren die Pläne für einen amphibischen Angriff auf Fort Fisher weit fortgeschritten, das dieses letzte Zentrum der südlichen maritimen Aktivität bewachte.

Aries war in der Reservedivision einer riesigen Einsatzgruppe, die Beaufort am 18. Dezember verließ und in Richtung der Mündung des Cape Fear River unterwegs war. Truppen gingen an Heiligabend an Land und bedrohten Fort Fisher ernsthaft, aber der Armeekommandant, Generalmajor Benjamin F. Butler, befürchtete, dass seine Truppen mit den südlichen Streitkräften, die die konföderierten Werke verteidigten, nicht fertig werden könnten. Daraufhin befahl er seinen Männern, wieder einzuschiffen.

Unzufrieden mit Butlers Mangel an Entschlossenheit, drängte Konteradmiral David Dixon Porter – der Kommandant der Seestreitkräfte in der Operation – Washington zu einem erneuten Angriff. Anfang Januar 1865 wurde eine mächtige Streitmacht für einen neuen Versuch gegen Fort Fisher versammelt. Widder, obwohl wieder der Reservedivision zugeteilt, half am 13. bei der Landung der Truppen und unterstützte die Truppen, sobald sie an Land waren, die nächsten zwei Tage. Die Verteidiger kapitulierten schließlich am 15. und schlossen den Süden von jeglicher ausländischer Hilfe ab. Die Konföderation war nun dem Untergang geweiht.

Nachdem er für den Rest des Januars und den ganzen Februar die Aufräumarbeiten in der Nähe von Wilmington unterstützt hatte, verließ Aries am Morgen des 5. März Hampton Roads und machte sich auf den Weg nach Key West, Florida, um sich der East Gulf Blockading Squadron anzuschließen. Als sie jedoch die Gewässer von Florida erreichte, musste sie aufgrund ihrer Maschinen bis Mai im Hafen bleiben und repariert werden. Sie wurde dann zur See geschickt, um vor Havanna, Kuba, zu kreuzen, um Stonewall abzufangen, falls dieser konföderierte Raider versuchen sollte, ins Meer zu entkommen. Nachdem Stonewalls kommandierender Offizier, Captain Thomas Jefferson Page, vom Ende des Krieges erfuhr und sein Schiff den spanischen Behörden übergeben hatte, kehrte Aries nach Key West zurück. Am 1. Juni wurde sie nach Boston beordert, wo sie am 14. des Monats im Boston Navy Yard außer Dienst gestellt wurde.

Der Dampfer wurde am 1. August 1865 in Boston öffentlich an Sprague, Soule &. Co. versteigert und am 12. August 1865 als SS Aries dokumentiert. Sie behielt ihren ursprünglichen Namen während einer langen Karriere im Handelsdienst bei, der Fracht zwischen den Häfen von Philadelphia und Neuengland beförderte. Sie wurde 1908 zur Verschrottung verkauft.


Одробные сведения о Korky 99-4A поршень, 6 в, резиновый - без перевода

Der beste Toilettenkolben, den ich je benutzt habe. Bevor ich es gekauft habe, habe ich das Standardmodell verwendet. Wann immer wir eine Verstopfung hatten (was oft vorkam), dauerte es von 2 Stunden bis zur ganzen Nacht, bis ich die Verstopfung gelöst hatte. Im schlimmsten Fall müsste ich es über Nacht stehen lassen und es am nächsten Morgen erneut versuchen. Nicht mit diesem Toilettenkolben. Bei richtiger Anwendung kann ich die Toilette aufgrund des starken Luft- / Wasserdrucks und der Saugkraft des Korky Beehive Max Toilettenkolbens in 5 bis 10 Minuten statt in mehreren Stunden befreien. Ich kann diesen Toilettenkolben wärmstens empfehlen und er bekommt von mir perfekte 5 Sterne. Sie werden nicht enttäuscht sein!

Bester Toilettenkolben auf dem Markt

Der beste Toilettenkolben, den ich je benutzt habe. Bevor ich es gekauft habe, habe ich das Standardmodell verwendet. Wann immer wir eine Verstopfung hatten (was oft vorkam), dauerte es von 2 Stunden bis zur ganzen Nacht, bis ich die Verstopfung gelöst hatte. Im schlimmsten Fall müsste ich es über Nacht stehen lassen und es am nächsten Morgen erneut versuchen. Nicht mit diesem Toilettenkolben. Bei richtiger Anwendung kann ich die Toilette dank des starken Luft- / Wasserdrucks und der Saugkraft des Korky Beehive Max Toilettenkolbens in 5 bis 10 Minuten statt in mehreren Stunden befreien. Ich kann diesen Toilettenkolben wärmstens empfehlen und er bekommt von mir perfekte 5 Sterne. Sie werden nicht enttäuscht sein!

Kaufen Sie diesen Stil und diese Marke für Toiletten.

Jahrelang habe ich den Kolben mit flachem Boden verwendet und hatte mehrmals Probleme, eine Toilette vom Netz zu trennen. Dann habe ich recherchiert und herausgefunden, dass ich den falschen Stil verwende. Dieses Modell funktioniert super.

Sieht von sehr guter Qualität aus, sicher funktioniert es gut, musste es noch nicht benutzen, keine Eile, da alles gut funktioniert. Schlagt den runden Kolben aus, der in der vorliegenden Schüssel-Schlüssellochform nicht funktioniert. Dieser Korky sollte die Arbeit bei Bedarf erledigen.

роверенная окупка: Да | остояние товара: novые | родавец: max_warehouse


Printt II ScStr - Geschichte

hex3_hex0[ 6: 0] // hex3_hex0[ 6: 0] //HEX1 zuweisen =

hex3_hex0[14: 8] //HEX2 zuweisen =

hex3_hex0[22:16] //HEX3 zuweisen =

hex3_hex0[30:24] HEX4 zuweisen = 7'b1111111 HEX5 zuweisen = 7'b1111111 HEX3 zuweisen = 7'b1111111 HEX2 zuweisen = 7'b1111111 HEX1 zuweisen = 7'b1111111 HEX0 zuweisen = 7'b1111111 //====== ================================================ / / Audiocontroller für AVALON Bus-Master //======================================= =============== // berechnet DDS für Sinuswelle und füllt Audio-FIFO // liest Audio-FIFO und schleift es zurück // MUSS (in Qsys) Audio Config-Modul konfigurieren: // - - Line-In zum ADC // -- Deaktivieren Sie beide Bypass-Optionen // Das audio_input_ready-Signal geht für einen // Zyklus hoch, wenn neue Audio-Eingangsdaten vorliegen // -- // 32-Bit-Daten sind an // right_audio_input, left_audio_input / / Jeder Schreibvorgang erfordert 32-Bit-Daten auf // right_audio_output, left_audio_output reg [31:0] bus_addr // Avalon-Adresse // siehe // ftp://ftp.altera.com/up/pub/Altera_Material/15.1/University_Program_IP_Cores/ Audio_Video/Audio.pdf // für Adresskabel [31:0] audio_base_address = 32'h00003040 // Avalon Adresskabel [31:0] au dio_fifo_address = 32'h00003044 // Avalon Adresse +4 Offset Draht [31:0] audio_data_left_address = 32'h00003048 // Avalon Adresse +8 Draht [31:0] audio_data_right_address = 32'h0000304c // Avalon Adresse +12 Reg [3: 0] bus_byte_enable // Vier-Bit-Byte-Lese-/Schreibmaske reg bus_read // High beim Anfordern von Daten reg bus_write // High beim Schreiben von Daten reg [31:0] bus_write_data // Daten zum Senden an Avalog-Bus-Draht bus_ack // Avalon-Bus hebt an dies, wenn fertig, Draht [31:0] bus_read_data // Daten von Avalon-Bus-Reg. [30:0] Timer-Reg. [3:0] Zustandsdraht state_clock Draht-Reset // SW[9] deaktiviert die Zustandsmaschine, so dass // HPS abgeschlossen ist Steuerung des Audio-Interfaces Assign Reset =

SCHLÜSSEL[0] | SW[9] // aktuelle freie Wörter im Audiointerface reg [7:0] fifo_space // Debug-Prüfung des Leerzeichens zuweisen LEDR = fifo_space // Audioeingang/-ausgang vom Audiomodul FIFO reg [15:0] right_audio_input, left_audio_input reg audio_input_ready wire [15:0] right_audio_output, left_audio_output // Für Audio-Loopback oder Filterung right_audio_output = SW[1] zuweisen? right_filter_output : right_audio_input zuweisen left_audio_output = SW[0]? decimated_filter_300_out : left_audio_input // DDS-Update-Signal zum Testen von Reg [31:0] dds_accum // DDS-LUT-Draht [15:0] sine_out // Update-Phasenakkumulator // Synchronisierung mit Audiodatenrate (48 kHz) mit Audio_input_ready-Signal immer @(posedge CLOCK_50) begin //CLOCK_50 // Fout = (sample_rate)/(2^32)* // dann Fout=48000/(2^32)*(2^25) = 375 Hz if (audio_input_ready) dds_accum >24) // Ende des Lesens bus_read 8'd2) begin // state 8'd0) begin // state =0 fprintf(' .b%1d (18''sd%d), ', i,fix(2^16*b(i)) ) else fprintf(' .b%1d (-18'' sd%d), ', i, fix(-2^16*b(i)) ) end end for i=2:length(a) if a(i)>=0 fprintf(' .a%1d (18''sd%d), ', i, fix(2^16*a(i)) ) else fprintf(' .a%1d (-18''sd%d), ', i , fix(-2^16*a(i)) ) end end fprintf(' .state_clk(CLOCK_50), ') fprintf(' .audio_input_ready(audio_input_ready), ') fprintf(' .reset(reset) ') fprintf(') //Endfilter ') disp(' ') */ // === Ende ===================== ===============


Online-MBI®-Plattform als Wissensaustauschstrategie zwischen biobasierter Industrie und Universität in Kolumbien

Investigadores Icesi: Nelson Caicedo (CoI), María Francisca Villegas (CoI)

Dieser Vorschlag baut auf früheren Forschungskooperationen zwischen dem ICESI, das wegweisend für die Ausbildung im Bereich Bioverfahrenstechnik in Kolumbien ist, und der UCL Biochemical Engineering im Vereinigten Königreich, der größten akademischen Bioverfahrensgruppe der Welt, auf. Es wird das etablierte modulare Training für das Bioprocess Industries Program (MBI®) von UCL nutzen, um ein neues eMBI-Modul in der industriellen Biotechnologie (IB) zu erstellen, zu teilen und zu implementieren, das in kritischen Phasen während der Materialentwicklung mit Levepan, einem national anerkannten ., erprobt und konsultiert wird IB-basiertes Unternehmen. Mit diesem eMBI-Modul erwarten wir eine Konsolidierung der Forschungskapazitäten, die derzeit durch das Anfang des Jahres vergebene Newton-Caldas Institutional Links Stipendium entwickelt werden, da hierfür sowohl Wissen als auch technologische Ausbildung zukünftiger Generationen erforderlich sind.

IB gilt als wirtschaftlicher Motor in den Bereichen Gesundheit, Biokraftstoffe und erneuerbare Chemikalien sowie im Lebensmittel- und Agrarsektor durch die Nutzung erneuerbarer Quellen. Länder mit großen natürlichen und biologischen Ressourcen wie Kolumbien haben ein enormes Potenzial, diese nachhaltig zu nutzen. Daher ist eine synergetische Zusammenarbeit zwischen Industrie, Wissenschaft und Regierung erforderlich, um die nationale Forschungskapazität, technologische Entwicklung und Innovation zu stärken. UCL und ICESI haben eine gemeinsame Forschungsarbeit begonnen, die wir durch diesen Vorschlag auf den Wissensaustausch und den Aufbau einer Ausbildungskapazität ausweiten möchten, die von der Industrie unterstützt wird. Das Projekt ist so konzipiert, dass es autark sein kann und mittel- und langfristig auch andere Engineering-Themen abdecken kann.

Mitarbeiter: UCL - Levapan

Finanzierer: RAE – Minciencias

Fechas: März 2017 - März 2019

Esta dirección de correo electrónico está protegida gegen Spambots. JavaScript für die Visualisierung erforderlich.

Esta dirección de correo electrónico está protegida gegen Spambots. JavaScript für die Visualisierung erforderlich.


Bphs Santhanam Vol 2

Dieses Dokument wurde vom Benutzer hochgeladen und er hat bestätigt, dass er die Berechtigung zum Teilen hat. Wenn Sie Autor sind oder das Urheberrecht an diesem Buch besitzen, melden Sie uns bitte mit diesem DMCA-Berichtsformular. DMCA melden

Überblick

Mehr Details

16. DaSAS(FEr.I]ODSIOF PLANETS '

Vimsottari, Attottsrl' Shodasottari, Paochottari, Dwiraptatisama,Shasti' lhbbdt&r, Chaturshitisama, bayani,Shotttlslr$igaoa'Kalachakra,Chara,Sthira, KCndts,BrahmgrahaMandook,"Rasdawarsi,Yogardik,Shoola odhyr, Alhtavargpr Pachaka, Tara Das88und Illustrationen und llhntrative Diagramme, die das Dase Psrlodr.

Allgemeine Prinzipien, cffoctgoof the Darer of the Sun' thc Moon, Mrn, Rahu, Jupiter, Saturn' Mcrcury' Kctu rad Vonus in the Yimsottari Dasa System' of Efrectsaccorauspiclousncsand unaurpiciousness andphccmcntrinotics,cminthinthc. .48, UNTERSCHEIDENDE WIRKUNG DER NAKSHATRA DASA ODER DER DASASO DER HERREN VON (YIMSHOTTARIDASA'OF YARIOUSHOASES Jto ,t

Auswirkungen des Dasas der Herren des 2., 3., 4., 5., 6., 7., 8., 5., 5., 11. und 12. Haus. Besondere Bemerkungen über die unglücklichen und glücksverheißenden Dasas der Herren des 6., 8. und 12. – der zweitgrössten Gesänge eines Geburtshoroskops.

je nach Würden und Würden, Stärke und Disposition der Antardasalords mit Rücksicht auf den Aszendenten und den Herrn des Dasa. Abhilfemaßnahmen, um die bösen Auswirkungen des Antar abzuwehren. dasas.

gI. AUSWIRKUNGEN DER ANTARDASAS IN DAS.4 VON SATURN 691 Auswirkungen der Antardasasvon Saturn,Merkur, Ketu, Yenus,Sonne, Mond, Mars und Jupiter nach Würden und Schmach, Stärke und Disposition der Antardasa-Herren in Bezug auf die Ascendantand der Herr des Dasa. Heilmittel, um die bösen Auswirkungen der Antarmeasures Dasas abzuwehren. 58. AUSWIRKUNGEN VON QUECKSILBER

Auswirkungen der Antardasas von Merkur, Ketu, Venus. Sonne, Mond, Mars, Rahu, Jupiter und Saturrr nach Würden, Demütigungen, Stärke und Disposition der Antardas-Lords in Bezug auf den Aszendenten und den Herrn des Dasa. Abhilfemaßnahmen zur Abwehr der bösen Auswirkungen des Antar. dasas. 59. AUSWIRKUNGEN DER ANTARDASAS IN DAS.7 VON KETA 717 Auswirkungen der Antardasas von Ketu, Venus, der Sonne, dem Mond, Mars, Rahu, Jupiter, Saturn und Mercur-v in Übereinstimmung mit den Würden, Demütigungen, Stärke und Disposition der Antardasalords mit Hinweis auf den Asccndantand Lord des Dasa, Abhilfemaßnahmen, um die bösen Auswirkungen des Antardasa abzuwehren.

492 49. AUSWIRKUNGEN DER KALACHAKRA DASA Auswirkungen der Dasa von Rasis im Besitz der Sonne, des Mondes, des Mars, des Merkur, des Jupiter, der Venus und des Saturn. Die Wirkungen von Dasason sind die Grundlage der Navamsa jedes Rasi.

50. AUSWIRKUNGEN VON TIIE CHARA ETC., DASAS

Allgemeine Grundsätze in Bezug auf die Beurteilung der Auswirkungen der Dasa-Rasis gemäß der Stärke ihrer Herren, Disposition von Übeltätern und Wohltätern in Bezug auf die Dasa-Rasi bei der Geburt und zum Zeitpunkt des Beginns der Dasa, Badhaka-Häuser für die beweglichen, festen und dualen Rasis und ihre Einfluss auf die Wirkungen des Dasa. Auswirkungen des Dasa eines Planeten in einem feindlichen Rasi, Auswirkungen des Dasa-Rasens abhängig von ihren Bedingungen. 51. AUSARBEITEN VON ANTARDASAS VON PLANETEN . UND RI.S/S IN VIMSOTTARI ET'C. DASA-SYSTEME

Berechnungsmethode von Antardasas von Planeten unter den Vimsottari, Chara und Kendra Dasa usw. Berechnungsmethode von Antardasas von rasis und der Ordnung von tlreir Antardasas, Illustration und Illustrative Charts, Tabelle von Antardasas von Planeten unter dem VimsottariSi, Stamm.Methode der Berechnung von Antardasasof raris das Kala Chakra Dasa-System. 52. WIRKUNGEN DER ANTARDASAS IN DER DASA DER SONNE NACH VIMSOTTARI DASA SYSTEM 627 Wirkungen der Antardasasas der Sonne, des Mondes, Mars Rahu, Jupiter, Saturn, Merkur, Ketu und Venus, glückverheißende und ungünstige Wirkungen entsprechend den Würden und Unwürdigkeiten der Antardas Hinweis auf den Aszendenten und den Herrn des Dasa.

493 Rcmediale Maßnahmen, um den bösen Cffier abzuwehren:$der Antardasas.

53. WIRKUNG DER ANTARDASAS IN DER DASA DES TR,IOON

Auswirkungen der Antardasas des Mondes, U"r.. iutru, Jupiter, Saturn, Merkur, Ketu, Venus und der Sonne gemäß Würden und Demütigungen, Stärke und Dispositionen des Antardasa-Herrn in Bezug auf den Aszendenten und den Herrn des Dasa die bösen Auswirkungen der Antardasas.

54. WIRKUNG DES ANTARDASASIN DER DASA DES MARS

Auswirkungen der Antardasas von Mars, Rahu, Jupiter, Saturn, Merkur, Ketu, Venus, der Sonne und des Mondes nach Würden und Demütigungen, Entwicklung und Disposition der Antardasalords mit Hinweisen auf den Aszendenten und den Herrn des Dasa Erleichterung von den Eyil-Effekten der Antardasas. .55. AUSWIRKUNGEN IN DER ANTARDASA^SOF RAHU

Auswirkungen der Antardasas von Rahu, Jupiter, Saturn, Merkur, Ketu, Venus, Sonne, Mond und Mars nach Würde und Demütigung, Stärke und Disposition, der Antardasa-Lords in Bezug auf den Aec€ndant und den Lord des Dasa. Abhilfemaßnahmen zur Linderung der bösen Auswirkungen von Antardasas. 56. WIRKUNGEN DER ANTARDASAS VON JUPITER Wirkungen der Antrdasas von Jupiter, Saturn, Merkur' Ketu, Venus, Sonne, Mond, Mars und Rahu in

@, AUSWIRKUNGEN VON TTTEANTARDASAS IN DER DASA VON''ENAS NO Auswirkungen der Antardasas von Venus, Sonne, Mond, Mars, Rahu, Jupiter, Saturn, Meniury und Ketu nach Würden und Demütigungen, Stärke und Disposition der Antardasalords mit Bezug auf die Aszendent und der Herr des Dasa. Abhilfemaßnahmen zur Abwehr der bösen Auswirkungen der Antar. dasas. 61, WIRKUNGEN VON PRATYANTAR ANTARDASAS VON PLANETEN

Berechnungsmethode des Pratyantar Dasa mit einem Beispiel. Auswirkungen des Pratyantar Dasa der neun Planeten in den Antardasas von Sonne, Mond, Mars, Rahu, Jupiter, Saturn, Merkur, Ketu und Venus. Tabellen mit Perioden aller Pratyantar Dasas zum Nachschlagen.

62, AUSWIRKUNGEN DER SOOKSHMANTAR DASAS IN DEN PRATYANTARDASAS THETIARIOUS PLANETS 770 Berechnungsmethode des Sookshma Dasa im Pratyantar Dasa der Planeten mit einem Beispiel. Auswirkungen des SookshmaDasa im Pratyantar Dasa von Sonne, Mond, Mars, Rahu, Jupiter, Saturn, Merkur, Ketu und Venus.

63, WIRKUNG VON PRANA DASAS IN DER SOOKSHMA' DASA DER VARTOUSPLINETS ?85 Berechnungsmethode von Prana Dasa von Planeten mit einem Beispiel. Wirkungen des Prana Dasasin des SookshmaDasas der Sonne, des Mondes, des Mars, Rahu Jupiter, Saturn, Merkur, Ketu und Venus.

64. AUSWIRKUNGEN DER ANTARDASAS IN DER KALACHAKRA DASA

Berechnungsmethode des Antardasasof rasis im Dasaof a rasi unter dem Kala Chakra Dasa System mit einem Beispiel und Tabellen, die die ,

65. WIRKUNGEN VON DASASOF R. SISIN ARIESAMSA 835 Wirkungen von Dasas von Rosinen Widder, Stier, Zwillinge, Krebs, Löwe, Jungfrau, Waage, Skorpion, Schütze, Steinbock, Wassermann und FischeAmsas' 66. ,4SHTAKAVARGA

l. Bedeutung, Bedeutung und Nützlichkeit des Ashtaka's die Auswirkungen eines Geburts-Varga-Schemas, um Horoskope zum Zwecke der Vorhersage richtig einzuschätzen. Definition von Karana und Sthana. r '(Punkte) von ungünstigen Orten, die von Bindus, Sonne, Mond, Mars, Merkur, Jupiter, Saturn und Aszendent markiert sind. Venus, Saturn und der Aszendent. Illustrativechartsfor all the planets' 67. TNKONA SODHANA (BRICHTUNG) IM 867 ASHTAKAVARCA SCHEME Notwendigkeit der Trikona-Berichtigung' Methode der rloingthe rcctification.Illustrativechartsof Ashtaka, Rurgut aller acht Planeten (einschließlich rurgut aller acht Planeten) mit Bindui (Punkten) und Rekhas (Linien) markiert in ihnen gemäß den vorgeschriebenen Regeln Illustration (mit einer Illustrationstafel) der Durchführung der trikona rectificatio[ in tbe Ashtakavargasof the Sunetc.

PindaSadhana' Wirkungen des Aslttakavarga des Mars-Hinweise auf die etwa günstigen oder ungünstigen Wirkungen Chakra Sodhana Eka :fq


Der Entwurf und die Analyse paralleler Algorithmen

Dieses Dokument wurde vom Benutzer hochgeladen und er hat bestätigt, dass er die Berechtigung zum Teilen hat. Wenn Sie Autor sind oder das Urheberrecht an diesem Buch besitzen, melden Sie uns bitte mit diesem DMCA-Berichtsformular. DMCA melden

Überblick

Mehr Details

Entwurf und Analyse paralleler Algorithmen Selim G . Akl Queen's U nioersity Kingston, Ontario, Kanada

Prentice Hall, Englewood Cliffs, New Jersey 07632

BIBLIOTHEK ff C O h K i E S S Library of C0ngres.s Cataloging-in-Publication Data

„Ich, Akl. S e l i m G. T h e d e s i g n u n d a n a l y s l s o f p a r a l l e l a l g o r i t h m e / by S e l m G. A k l . P. cm. B i b l i o g r a p h y : p. I n c l u d e s Index. I S B N 0-13-200056-3 1 . P a r a l l e l p r o g r a m m i n g (C o m p u t e r s c i e n c e) 2. A l g o r i t h m s . I. Titel. OA76.6.A38 1989 004'.35--dci9

Redaktions-/Produktionsleitung, Ann Mohan Coverdesign: Lundgren Graphics Ltd. Herstellungskäufer: Mary Noonan

01989 von Prentice-Hall, Inc. Eine Abteilung von Simon & Schuster Englewood Cliffs, New Jersey 07632

Alle Rechte vorbehalten. Kein Teil dieses Buches darf ohne schriftliche Genehmigung des Herausgebers in irgendeiner Form oder auf irgendeine Weise reproduziert werden.

Gedruckt in den Vereinigten Staaten von Amerika 1 0 9 8 7 6 5 4 3 2 1

ISBN 0-33-23005b-3 Prentice-Hall International (UK) Limited, London Prentice-Hall of Australia Pty.Limited, Sydney Prentice-Hall Canada Inc., Toronto Prentice-Hall Hispanoamericana, S.A., Mexiko Prentice-Hall of India Private Limited, Neu-Delhi Prentice-Hall of Japan, Inc., Tokyo Simon & Schuster Asia Pte. Ltd., Singapur Editora Prentice-Hall do Brazil, Ltda., Rio de Janeiro

Für Theo, dass es sich lohnt.

VORWORT xi EINFÜHRUNG 1

1 .I Der Bedarf an parallelen Computern, 1 1.2 Rechenmodelle, 3 1.2.1 SISD-Computer, 3 1.2.2 MISD-Computer, 4 1.2.3 SIMD-Computer, 5 1.2.3.1 Shared-Memory (SM) SIMD-Computer, 7 1.2.3.2 Interconnection-Network SIMD-Rechner, 12 1.2.4 MIMD-Rechner, 17 1.2.4.1 MIMD-Rechner programmieren, 19 1.2.4.2 Spezialarchitekturen, 20 1.3 Algorithmen analysieren, 21 1.3.1 Laufzeit, 21 1.3.1.1 Zählen Schritte, 22 1.3.1.2 Unter- und Obergrenzen, 22 1.3.1.3 Beschleunigung, 24 1.3.2 Anzahl der Prozessoren, 25 1.3.3 Kosten, 26 1.3.4 Sonstige Maßnahmen, 27 1.3.4.1 Fläche, 27 1.3.4.2 Länge, 28 1.3.4.3 Periode, 28 1.4 Ausdrücke von Algorithmen, 29 1.5 Oranisierung des Buches, 30 1.6 Probleme, 30 1.7 Bibliographische Bemerkungen, 33 1.8 Literatur, 33

2.1 Einführung, 39 2.2 Das Problem und eine untere Schranke, 39 2.2.1 Lineare Ordnung, 39 2.2.2 Rang, 40 2.2.3 Selektion, 40 2.2.4 Komplexität, 40 2.3 Ein sequentieller Algorithmus, 41 2.4 Erwünschte Eigenschaften für parallele Algorithmen , 43 2.4.1 Anzahl der Prozessoren, 43 2.4.2 Laufzeit, 44 2.4.3 Kosten, 44 2.5 Zwei nützliche Verfahren, 45 2.5.1 Senden eines Datums, 45 2.5.2 Berechnen aller Summen, 46 2.6 Ein Algorithmus für Parallel Auswahl, 49 2.7 Probleme, 53 2.8 Bibliographische Bemerkungen, 54 2.9 Literatur, 56

3.1 Einführung, 59 3.2 Ein Netzwerk zum Zusammenführen, 60 3.3 Zusammenführen nach dem CREW-Modell, 64 3.3.1 Sequential Merging, 64 3.3.2 Paralleles Zusammenführen, 65 3.4 Zusammenführen nach dem EREW-Modell, 69 3.5 Ein besserer Algorithmus für das EREW-Modell, 73 3.5.1 Ermitteln des Medians zweier sortierter Folgen, 74 3.5.2 Schnelles Zusammenführen im EREW-Modell, 76 3.6 Probleme, 78 3.7 Bibliographische Bemerkungen, 82 3.8 Literatur, 82

SORTIEREN 4.1 4.2 4.3 4.4 4.5 4.6

Einführung, 85 Ein Netzwerk zum Sortieren, 87 Sortieren auf einem linearen Array, 89 Sortieren nach dem CRCW-Modell, 93 Sortieren nach dem CREW-Modell, 96 Sortieren nach dem EREW-Modell, 98 4.6.1 Simulationsverfahren CREW SORT, 98 4.6.2 Sortieren nach konfliktfreiem Zusammenführen, 99 4.6.3 Sortieren nach Auswahl, 99

4.8 Bibliographische Bemerkungen, 107 4.9 Literaturhinweise, 108

5.1 Einführung, 1 1 2 5.2 Durchsuchen einer sortierten Sequenz, 11 3

5.2.1 EREW-Suche, 113 5.2.2 CREW-Suche, 114 5.2.3 CRCW-Suche, 118 5.3 Durchsuchen einer Zufallssequenz, 11 9

5.3.1 Suche auf SM SIMD-Computern, 119 5.3.1.1 EREW 120 5.3.1.2 ERCW 120 5.3.1.3 CREW 120 5.3.1.4 CRCW 120 5.3.2 Suche in einem Baum, 119 5.3.2.1 Abfragen, 119 5.3.2.2 Wartung, 125 5.3.3 Suchen in einem Netz, 128 5.3.3.1 Abfragen, 128 5.3.3.2 Pflege, 132 5.4 Probleme, 132 5.5 Bibliographische Bemerkungen, 135 5.6 Literatur, 136

ERZEUGUNG VON PERMUTATIONEN UND KOMBINATIONEN 141 6.1 Einführung, 141 6.2 Sequentielle Algorithmen, 142

Permutationen lexikographisch erzeugen, 143 Permutationen nummerieren, 145 Kombinationen lexikographisch erzeugen, 147 Kombinationen nummerieren, 148 Permutationen I n parallel erzeugen, 150 Wenige Prozessoren, 157 Kombinationen parallel erzeugen, 158 6.4.1 Ein schneller Kombinationsgenerator, 158 6.4.2 Ein adaptiver Kombinationsgenerator, 162 Probleme, 163 Bibliographische Bemerkungen, 166 Literatur, 167

7.1 Einführung, 170 7.2 Transposition, 170 7.2.1 Mesh-Transponierung, 171 7.2.2 Shuffle-Transponierung, 175 7.2.3 EREW-Transponierung, 177 7.3 Matrix-für-Matrix-Multiplikation, 178 7.3.1 Mesh-Multiplikation, 179 7.3.2 Würfelmultiplikation , 181 7.3.3 CRCW-Multiplikation, 187 7.4 Matrix-durch-Vektor-Multiplikation, 188 7.4.1 Linear-Array-Multiplikation, 188 7.4.2 Baummultiplikation, 190 7.4.3 Faltung, 191 7.5 Probleme, 193 7.6 Bibliographische Bemerkungen, 194 7.7 Referenzen , 195

8.1 Einführung, 200 8.2 Lösen von Systemen linearer Gleichungen, 201 8.2.1 Ein SIMD-Algorithmus, 201 8.2.2 Ein MIMD-Algorithmus, 203 8.3 Auffinden von Wurzeln nichtlinearer Gleichungen, 206 8.3.1 Ein SIMD-Algorithmus, 206 8.3.2 Ein MIMD-Algorithmus , 209 8.4 Partielle Differentialgleichungen lösen, 21 2 8.5 Eigenwerte berechnen, 21 5 8.6 Probleme, 221 8.7 Bibliographische Bemerkungen, 225 8.8 Literatur, 226

BERECHNUNG VON FOURIER-TRANSFORMATIONEN 231 9.1 Einführung, 233 9.1.1 Die schnelle Fourier-Transformation, 231 9.1.2 Eine Anwendung der FFT, 233 9.1.3 Parallele Berechnung der DFT, 233 9.2 Direkte Berechnung der DFT, 233 9.2.1 Berechnung der Matrix W 234 9.2.2 Berechnung der DFT, 235 9.3 Ein paralleler FFT-Algorithmus, 238 9.4 Probleme, 242 9.5 Bibliographische Bemerkungen, 246 9.6 Literatur, 246

10.1 Einführung, 251 10.2 Definitionen, 251 10.3 Berechnen der Konnektivitätsmatrix, 254 10.4 Finden verbundener Komponenten, 256 10.5 All-Pairs Shortest Paths, 257 10.6 Berechnen des Minimum Spanning Tree, 261 10.7 Probleme, 266 10.8 Bibliographische Bemerkungen, 271 10.9 Referenzen, 272

1 1 .I Einführung, 278 11.2 Ein Inklusionsproblem, 279 11.2.1 Punkt in Polygon, 280 11.2.2 Punkt in planarer Unterteilung, 283 11.3 Ein Schnittproblem, 285 11.4 Ein Näheproblem, 287 11.5 Ein Konstruktionsproblem, 288 11.5. 1 Untere Schranke, 289 11.5.2 Sequentielle Lösung, 291 11.5.3 Mesh of Trees-Lösung, 292 11.5.4 Optimale Lösung, 296 11.6 Probleme, 302 11.7 Bibliographische Bemerkungen, 306 11.8 Referenzen, 306

DURCHFAHREN VON KOMBINATORISCHEN RÄUMEN 310

12.1 Einführung, 31 0 12.2 Sequential Tree Traversal, 31 2 12.3 Grundlegende Entwurfsprinzipien, 31 7 12.3.1 Der minimale Alpha-Beta-Baum, 318 12.3.2 Berechnungsmodell, 319 12.3.3 Ziele und Methoden, 320 12.4 Der Algorithmus, 323 12.4.1 Verfahren und Prozesse, 323 12.4.2 Semaphoren, 323 12.4.3 Score-Tabellen, 324 12.5 Analyse und Beispiele, 327 12.5.1 Parallele Cutoffs, 327 12.5.2 Speicheranforderungen, 33 1 12.6 Probleme, 336 12.7 Bibliographische Bemerkungen , 337 12,8 Referenzen, 338

ENTSCHEIDUNG UND OPTIMIERUNG

13.1 Einführung, 341 13.2 Berechnung von Präfixsummen, 341

13.2.1 Ein spezialisiertes Netzwerk, 342 13.2.2 Verwenden der Unshuffle-Verbindung, 343 13.2.3 Präfixsummen auf einem Baum, 346 13.2.4 Präfixsummen auf einem Mesh, 349 Anwendungen, 351 13.3.1 Jobsequenzierung mit Fristen, 351 13.3 .2 Das Knapsack-Problem, 352 13.3.3 Mesh-Lösungen, 354 Probleme, 355 Bibliographische Bemerkungen, 356 Referenzen, 357

DIE BIT-KOMPLEXITÄT PARALLEL BERECHNUNGEN 14.1 Einführung, 361 14.2 Addieren von zwei ganzen Zahlen, 363 14.3 Addieren von n ganzen Zahlen, 364

14.3.1 Additionsbaum, 364 14.3.2 Additionsnetz, 366 14.4 Multiplizieren von zwei ganzen Zahlen, 366 14.4.1 Multiplikationsbaum, 368 14.4.2 Multiplikationsnetz, 369 14.5 Berechnen von Präfixsummen, 373 14.5.1 Variables Auffächern, 373 14,5 .2 Constant Fan-out, 374 14.6 Matrixmultiplikation, 374 14.7 Auswahl, 376 14.8 Sortieren, 381 14.9 Probleme, 382 14.1 0 Bibliographische Bemerkungen, 384 14.11 Literatur, 386 AUTORENINDEX

Der Bedarf an immer schnelleren Computern hat seit Beginn des Computerzeitalters nicht aufgehört. Jede neue Anwendung scheint bestehende Computer an ihre Grenzen zu bringen. Bisher sind die Computerhersteller mit der Nachfrage bewundernswert gut mitgekommen. 1948 konnten die zum Bau von Computern verwendeten elektronischen Komponenten etwa 10.000 Mal pro Sekunde von einem Zustand in einen anderen wechseln. Die Schaltzeit der diesjährigen Komponenten beträgt ca. 1/10 000 000 000stel Sekunde. Diese Zahlen bedeuten, dass sich die Anzahl der Operationen, die ein Computer in einer Sekunde ausführen kann, in den letzten vierzig Jahren etwa alle zwei Jahre verdoppelt hat. Das ist sehr beeindruckend, aber wie lange kann es dauern? Es wird allgemein angenommen, dass der Trend bis zum Ende dieses Jahrhunderts anhalten wird. Durch den Einsatz von optisch oder gar biologisch basierten Komponenten kann es sogar noch etwas länger gehalten werden. Was passiert danach? Wenn die aktuellen und in Betracht gezogenen Anwendungen von Computern ein Hinweis sind, werden unsere Anforderungen an die Rechengeschwindigkeit weit über das Jahr 2000 hinaus zumindest im gleichen Tempo wie in der Vergangenheit anhalten die enorme Anzahl von Berechnungen durchführen, die bei der Entwicklung von Heilmitteln für mysteriöse Krankheiten erforderlich sind. Sie sind unverzichtbar für Anwendungen, bei denen die menschliche Fähigkeit, komplexe visuelle und auditive Muster in Echtzeit zu erkennen, simuliert werden soll. Und sie sind unverzichtbar, wenn wir viele Träume der Menschheit verwirklichen wollen, von zuverlässigen langfristigen Wettervorhersagen über interplanetare Reisen bis hin zur Erforschung des Weltraums. Es scheint jetzt, dass die parallele Verarbeitung der Weg ist, um diese gewünschten Rechengeschwindigkeiten zu erreichen. Die überwältigende Mehrheit der heute existierenden Computer, von den einfachsten bis zu den leistungsstärksten, sind sich konzeptionell sehr ähnlich. Ihre Architektur und Funktionsweise folgen mehr oder weniger denselben gestalterischen Grundprinzipien, die Ende der 1940er Jahre formuliert und John von Neumann zugeschrieben werden. Das geniale Szenario ist sehr einfach und läuft im Wesentlichen wie folgt ab: Eine Steuereinheit holt einen Befehl und seine Operanden aus einer Speichereinheit und sendet sie an eine Verarbeitungseinheit, wo der Befehl ausgeführt und das Ergebnis zurück in den Speicher gesendet wird. Diese Ereignisfolge wird für jede Anweisung wiederholt. Es gibt nur eine Einheit jeder Art, und es kann jeweils nur eine Anweisung ausgeführt werden.

Bei der Parallelverarbeitung sieht die Situation ganz anders aus. Ein Parallelcomputer besteht aus einer Ansammlung von Verarbeitungseinheiten oder Prozessoren, die zusammenarbeiten, um ein Problem zu lösen, indem sie gleichzeitig an verschiedenen Teilen dieses Problems arbeiten. Die Anzahl der verwendeten Prozessoren kann von einigen zehn bis zu mehreren Millionen reichen. Als Ergebnis wird die Zeit, die ein herkömmlicher Einprozessorcomputer benötigt, um das Problem zu lösen, erheblich reduziert. Dieser Ansatz ist aus mehreren Gründen attraktiv. Erstens ist für viele Rechenprobleme die natürliche Lösung eine parallele. Zweitens sind die Kosten und die Größe von Computerkomponenten in den letzten Jahren so stark gesunken, dass parallele Computer mit einer großen Anzahl von Prozessoren realisierbar wurden. Und drittens ist es bei der Parallelverarbeitung möglich, die parallele Architektur auszuwählen, die am besten geeignet ist, um das betrachtete Problem oder die betrachtete Klasse von Problemen zu lösen. Architekten von Parallelrechnern haben nämlich die Freiheit zu entscheiden, wie viele Prozessoren verwendet werden sollen, wie leistungsfähig diese sein sollen, welches Verbindungsnetzwerk sie miteinander verbindet, ob sie einen gemeinsamen Speicher teilen, in welchem ​​Umfang ihre Operationen ausgeführt werden sollen synchron heraus und eine Vielzahl anderer Probleme. Diese breite Palette von Wahlmöglichkeiten spiegelt sich in den vielen vorgeschlagenen theoretischen Modellen der parallelen Berechnung sowie in den mehreren tatsächlich gebauten Parallelcomputern wider. Parallelität wird sicherlich die Art und Weise verändern, wie wir über Computer denken und sie verwenden. Es verspricht, Lösungen für Probleme und Grenzen des Wissens in unsere Reichweite zu bringen, von denen nie zuvor geträumt wurde. Die reiche Vielfalt an Architekturen wird zur Entdeckung neuer und effizienterer Lösungen für alte und neue Probleme führen. Es ist daher wichtig zu fragen: Wie lösen wir Probleme auf einem Parallelrechner? Der Hauptbestandteil bei der Lösung eines Rechenproblems auf jedem Computer ist die Lösungsmethode oder der Algorithmus. In diesem Buch geht es um Algorithmen für Parallelrechner. Es beschreibt, wie man Algorithmen entwickelt, die sowohl die dem Problem innewohnende als auch die auf dem Computer verfügbare Parallelität ausnutzen. Es zeigt auch, wie diese Algorithmen analysiert werden, um ihre Geschwindigkeit und Kosten zu bewerten. Die in diesem Buch untersuchten Rechenprobleme werden in drei Klassen eingeteilt: (1) Sortier-, Such- und verwandte Probleme (2) kombinatorische und numerische Probleme und (3) Probleme, die in einer Reihe von Anwendungsgebieten auftreten. Diese Probleme wurden aufgrund ihrer grundlegender Natur. Es wird gezeigt, wie ein paralleler Algorithmus entworfen und analysiert wird, um jedes Problem zu lösen. In einigen Fällen werden mehrere Algorithmen vorgestellt, die dieselbe Aufgabe ausführen, wobei jeder auf einem anderen Modell paralleler Berechnungen basiert. Beispiele werden so oft wie möglich verwendet, um die Algorithmen zu veranschaulichen. Bei Bedarf wird ein sequentieller Algorithmus für das vorliegende Problem skizziert. Zusätzliche Algorithmen werden in den Abschnitten Probleme und bibliographische Anmerkungen kurz beschrieben. Eine Liste mit Verweisen auf andere Veröffentlichungen, in denen verwandte Probleme und Algorithmen behandelt werden, befindet sich am Ende jedes Kapitels. Das Buch kann als Text für ein Aufbaustudium über parallele Algorithmen dienen. Es wurde zu diesem Zweck im Herbstsemester 1987 an der Queen's University verwendet. Die Klasse traf sich über einen Zeitraum von zwölf Wochen jede Woche vier Stunden lang. Eine der vier Stunden war der Präsentation von zusätzlichem Material durch die Schüler gewidmet, auf das in den Abschnitten zu den bibliographischen Anmerkungen verwiesen wurde. Das Buch soll auch Informatikern, Ingenieuren und Mathematikern nützlich sein, die etwas über Parallele lernen möchten

Berechnungsmodelle sowie der Entwurf und die Analyse paralleler Algorithmen. Es wird davon ausgegangen, dass der Leser den Hintergrund besitzt, der normalerweise von einem grundständigen Einführungskurs zum Entwurf und zur Analyse von Algorithmen vermittelt wird. Der angenehmste Teil des Schreibens eines Buches ist, wenn man endlich die Gelegenheit bekommt, denen zu danken, die geholfen haben, die Aufgabe zu einem angenehmen Erlebnis zu machen. Vier Personen verdienen besondere Anerkennung: Frau Irene LaFleche hat mit ihrer natürlichen Fröhlichkeit und ihrem unverkennbaren Talent die elektronische Version des Manuskripts erstellt. Die Diagramme sind das Ergebnis der Expertise, des Enthusiasmus und des Könnens von Herrn Mark Attisha. Dr. Bruce Chalmers gab zahlreiche treffende und aufschlussreiche Kommentare zu einem frühen Entwurf. Beratung und Hilfestellung in großen und kleinen Angelegenheiten wurden großzügig von Herrn Thomas Bradshaw geleistet. Ich möchte auch die vielen hilfreichen Vorschläge anerkennen, die die Schüler in meiner CISC-867-Klasse bei Queen's gemacht haben. Die Unterstützung durch die Mitarbeiter von Prentice Hall in jeder Phase wird sehr geschätzt. Schließlich danke ich meiner Frau Karolina und meinen beiden Kindern Sophia und Theo, die an diesem Projekt in vielerlei Hinsicht beteiligt waren, als ich erwähnen kann. Vor allem Theo verbrachte das erste Jahr seines Lebens damit, jedes Wort, wie es auf meinem Schreibblock erschien, aus einem Blickwinkel zu betrachten. Selim G. Akl Kingston, Ontario

1.1 DIE NOTWENDIGKEIT VON PARALLELCOMPUTERN

Eine Batterie von Satelliten im Weltraum sammelt Daten mit einer Geschwindigkeit von 101° Bits pro Sekunde. Die Daten stellen Informationen über das Wetter, die Umweltverschmutzung, die Landwirtschaft und die natürlichen Ressourcen der Erde dar. Damit diese Informationen zeitnah genutzt werden können, müssen sie mit einer Geschwindigkeit von mindestens 1013 Operationen pro Sekunde verarbeitet werden. Zurück auf der Erde möchte ein Team von Chirurgen in Vorbereitung auf eine Operation auf einem speziellen Display ein rekonstruiertes dreidimensionales Bild des Körpers eines Patienten betrachten. Sie müssen in der Lage sein, das Bild nach Belieben zu drehen, einen Querschnitt durch ein Organ zu erhalten, es im lebenden Detail zu beobachten und dann eine simulierte Operation durchzuführen, während sie ihre Wirkung beobachtet, ohne den Patienten zu berühren. Eine minimale Verarbeitungsgeschwindigkeit von 1015 Operationen pro Sekunde würde diesen Ansatz lohnenswert machen. Die beiden vorhergehenden Beispiele stehen stellvertretend für Anwendungen, bei denen enorm schnelle Computer benötigt werden, um große Datenmengen zu verarbeiten oder eine große Anzahl von Berechnungen schnell (oder zumindest in angemessener Zeit) durchzuführen. Andere solche Anwendungen umfassen Flugzeugtests, die Entwicklung neuer Medikamente, Ölexploration, Modellierung von Fusionsreaktoren, Wirtschaftsplanung, Kryptoanalyse, Verwaltung großer Datenbanken, Astronomie, biomedizinische Analyse, Echtzeit-Spracherkennung, Robotik und die Lösung großer Systeme von partiellen Differentialgleichungen aus numerischen Simulationen in so unterschiedlichen Disziplinen wie Seismologie, Aerodynamik und Atom-, Kern- und Plasmaphysik. Heutzutage existiert kein Computer, der die von diesen Anwendungen geforderten Verarbeitungsgeschwindigkeiten liefern kann. Selbst die sogenannten Supercomputer erreichen Spitzenwerte von wenigen Milliarden Operationen pro Sekunde. In den letzten vierzig Jahren wurden dramatische Steigerungen der Rechengeschwindigkeit erreicht. Die meisten davon waren größtenteils auf die Verwendung von inhärent schnelleren elektronischen Komponenten durch Computerhersteller zurückzuführen. Als wir von Relais zu Vakuumröhren zu Transistoren und von smaH zu mittlerer zu großer und dann zu sehr großer Integration übergingen, wurden wir oft erstaunt Zeuge der Zunahme der Größe und des Umfangs der Rechenprobleme, die wir lösen konnten. Leider ist klar, dass dieser Trend bald zu Ende gehen wird. Der limitierende Faktor ist ein einfaches physikalisches Gesetz, das die Lichtgeschwindigkeit im Vakuum angibt. Diese Geschwindigkeit ist

ungefähr gleich 3 x lo8 Meter pro Sekunde. Nehmen wir nun an, dass ein elektronisches Gerät 1012 Operationen pro Sekunde ausführen kann. Dann dauert es länger, bis ein Signal zwischen zwei solchen Geräten im Abstand von einem halben Millimeter transportiert wird, als es von beiden verarbeitet wird. Mit anderen Worten, alle Geschwindigkeitsgewinne, die durch den Bau superschneller elektronischer Komponenten erzielt werden, gehen verloren, während eine Komponente darauf wartet, eine Eingabe von einer anderen zu erhalten. Warum dann (man muss fragen) die beiden kommunizierenden Komponenten nicht noch näher zusammenbringen? Auch hier sagt uns die Physik, dass die Verringerung des Abstands zwischen elektronischen Geräten einen Punkt erreicht, ab dem sie zu interagieren beginnen, wodurch nicht nur ihre Geschwindigkeit, sondern auch ihre Zuverlässigkeit verringert wird. Es scheint, dass der einzige Weg, dieses Problem zu umgehen, darin besteht, Parallelität zu verwenden. Die Idee dabei ist, dass, wenn mehrere Operationen gleichzeitig ausgeführt werden, die Zeit für eine Berechnung erheblich reduziert werden kann. Dies ist eine ziemlich intuitive Vorstellung, an die wir in jeder organisierten Gesellschaft gewöhnt sind. Wir wissen, dass mehrere Personen mit vergleichbaren Fähigkeiten in der Regel einen Job in einem Bruchteil der Zeit eines Einzelnen erledigen können. Von der Postverteilung bis zur Ernte und vom Büro bis zur Fabrikarbeit bietet unser Alltag zahlreiche Beispiele für Parallelität durch Aufgabenteilung. Auch im Bereich der Informatik ist die Idee der Parallelität nicht ganz neu und hat viele Formen angenommen. Seit den Anfängen der Informationsverarbeitung erkannten die Menschen, dass es von großem Vorteil ist, wenn die verschiedenen Komponenten eines Computers verschiedene Dinge gleichzeitig tun. Während die Zentraleinheit Berechnungen durchführt, kann die Eingabe typischerweise von einem Magnetband gelesen und die Ausgabe auf einem Zeilendrucker erzeugt werden. In fortgeschritteneren Maschinen gibt es mehrere einfache Prozessoren, von denen jeder auf eine bestimmte Rechenaufgabe spezialisiert ist, wie zum Beispiel Operationen mit Gleitkommazahlen. Einige der leistungsstärksten Computer von heute enthalten zwei oder mehr Verarbeitungseinheiten, die sich die zur Verarbeitung vorgelegten Aufträge teilen. In jedem der gerade erwähnten Beispiele wird Parallelität gewinnbringend ausgenutzt, aber bei weitem nicht die versprochene Kraft. Streng genommen handelt es sich bei keiner der besprochenen Maschinen wirklich um einen Parallelrechner. In dem modernen Paradigma, das wir gleich beschreiben werden, kann die Idee des Parallel Computing jedoch ihr volles Potenzial entfalten. Hier ist unser Rechenwerkzeug ein Parallelrechner, also ein Rechner mit vielen Recheneinheiten oder Prozessoren. Ein zu lösendes Problem wird in mehrere Teilprobleme zerlegt.Alle diese Teilprobleme werden nun gleichzeitig auf jeweils einem anderen Prozessor gelöst. Die Ergebnisse werden dann kombiniert, um eine Antwort auf das ursprüngliche Problem zu erhalten. Dies ist eine radikale Abkehr von dem Berechnungsmodell, das in den letzten vierzig Jahren beim Bau von Computern angewendet wurde, nämlich der sequentiellen Einprozessormaschine. Erst in den letzten zehn Jahren wurde Parallelismus wirklich attraktiv und ein brauchbarer Ansatz zur Erzielung sehr hoher Rechengeschwindigkeiten. Die sinkenden Kosten für Computerhardware haben es möglich gemacht, parallele Maschinen mit Millionen von Prozessoren zusammenzustellen. Inspiriert von der Herausforderung begannen Informatiker, parallele Computer sowohl in der Theorie als auch in der Praxis zu studieren. Empirische Beweise, die von selbstgebauten Prototypen geliefert wurden, unterstützten oft eine große Anzahl theoretischer Studien. Und in jüngster Zeit sind eine Reihe von kommerziellen Parallelrechnern auf dem Markt erschienen.

Angesichts der Verfügbarkeit der Hardware lautet die drängendste Frage beim Parallel Computing heute: Wie programmiert man parallele Computer, um Probleme effizient und praktikabel sowie wirtschaftlich machbar zu lösen? Wie in der sequentiellen Welt erfordert paralleles Rechnen Algorithmen, Programmiersprachen und Compiler sowie Betriebssysteme, um tatsächlich eine Berechnung auf der parallelen Hardware durchzuführen. All diesen Zutaten des parallelen Computings wird derzeit von den Forschern wohlverdiente Aufmerksamkeit geschenkt. In diesem Buch geht es um einen (und vielleicht den grundlegendsten) Aspekt des Parallelismus, nämlich um parallele Algorithmen. Ein paralleler Algorithmus ist ein Lösungsverfahren für ein gegebenes Problem, das auf einem parallelen Computer ausgeführt werden soll. Um solche Algorithmen richtig zu entwerfen, muss man ein klares Verständnis des Berechnungsmodells haben, das dem Parallelcomputer zugrunde liegt.

Jeder Computer, ob sequentiell oder parallel, arbeitet, indem er Anweisungen auf Daten ausführt. Ein Strom von Anweisungen (der Algorithmus) sagt dem Computer, was bei jedem Schritt zu tun ist. Ein Datenstrom (die Eingabe in den Algorithmus) wird von diesen Anweisungen beeinflusst. Je nachdem, ob es einen oder mehrere dieser Ströme gibt, können wir zwischen vier Klassen von Computern unterscheiden:

Single Instruction Stream, Single Data Stream (SISD) Multiple Instruction Stream, Single Data Stream (MISD) Single Instruction Stream, Multiple Data Stream (SIMD) Multiple Instruction Stream, Multiple Data Stream (MIMD).

Wir untersuchen nun jede dieser Klassen im Detail. In der folgenden Diskussion werden wir uns nicht mit Eingabe-, Ausgabe- oder Peripheriegeräten befassen, die auf jedem Computer verfügbar sind. 1.2.1 SISD-Computer

Ein Computer dieser Klasse besteht aus einer einzelnen Verarbeitungseinheit, die einen einzelnen Strom von Befehlen empfängt, die mit einem einzigen Datenstrom arbeiten, wie in Abb. 1.1 gezeigt. Bei jedem Schritt während der Berechnung gibt die Steuereinheit eine Anweisung aus, die auf einem aus der Speichereinheit erhaltenen Datum arbeitet. Eine solche Anweisung kann dem Prozessor sagen, z

B. um eine arithmetische oder logische Operation an dem Datum durchzuführen und es dann wieder in den Speicher zu legen. Die überwältigende Mehrheit der Computer folgt heute diesem Modell, das John von Neumann und seine Mitarbeiter Ende der 1940er Jahre erfunden haben. Ein Algorithmus für einen Computer dieser Klasse wird als sequentiell (oder seriell) bezeichnet. Beispiel 1.1

Um die Summe von n Zahlen zu berechnen, muss der Prozessor n aufeinanderfolgende Male auf den Speicher zugreifen und jedes Mal eine Zahl empfangen. Es sind auch n - 1 Additionen beteiligt, die nacheinander ausgeführt werden. Daher erfordert diese Berechnung insgesamt in der Größenordnung von n Operationen. Dieses Beispiel zeigt, dass Algorithmen für SISD-Computer keine Parallelität enthalten. Der Grund liegt auf der Hand, es gibt nur einen Prozessor! Um von einem Computer die zuvor definierte Art von Parallelbetrieb zu erhalten, müssen mehrere Prozessoren vorhanden sein. Dies bieten die nächsten drei Klassen von Computern, die in diesem Buch von Interesse sind. In jeder dieser Klassen besitzt ein Computer N Prozessoren, wobei N > 1 ist. 1.2.2 MISD-Computer

Hier teilen sich N Prozessoren mit jeweils eigener Steuereinheit eine gemeinsame Speichereinheit, in der sich die Daten befinden, wie in Abb. 1.2 gezeigt. Es gibt N Befehlsströme und einen Datenstrom. Bei jedem Schritt wird ein vom Speicher empfangenes Datum von allen Prozessoren gleichzeitig bearbeitet, jeder entsprechend der Anweisung, die er von seiner Steuerung erhält. Somit wird Parallelität erreicht, indem die Prozessoren verschiedene Dinge gleichzeitig auf demselben Datum tun lassen. Diese Klasse von Computern eignet sich natürlich für solche Berechnungen, bei denen eine Eingabe mehreren Operationen unterzogen werden muss, wobei jede die Eingabe in ihrer ursprünglichen Form empfängt. Zwei solcher Berechnungen werden nun veranschaulicht. PROZESSOR 1

Beispiel 1.2 Es muss festgestellt werden, ob eine gegebene positive ganze Zahl z keine Teiler außer 1 und sich selbst hat. Die offensichtliche Lösung für dieses Problem besteht darin, alle möglichen Teiler von z auszuprobieren: Wenn keiner von diesen es gelingt, z zu teilen, dann heißt z prim, andernfalls heißt z zusammengesetzt. Diese Lösung können wir als parallelen Algorithmus auf einem MISD-Rechner implementieren. Die Idee ist, die Aufgabe des Testens potenzieller Teiler auf die Prozessoren aufzuteilen. Angenommen, es gibt so viele Prozessoren auf dem Parallelrechner wie potentielle Teiler von z. Alle Prozessoren nehmen z als Eingabe, dann versucht jeder, es durch seinen zugeordneten potentiellen Teiler zu dividieren und gibt basierend auf dem Ergebnis eine geeignete Ausgabe aus. Somit ist es möglich, in einem Schritt zu bestimmen, ob z prim ist. Realistischer ist, wenn weniger Prozessoren als potenzielle Teiler vorhanden sind, dann kann jedem Prozessor die Aufgabe übertragen werden, eine andere Teilmenge dieser Teiler zu testen. In jedem Fall wird eine wesentliche Beschleunigung gegenüber einer rein sequentiellen Implementierung erreicht. Obwohl es effizientere Lösungen für das Problem der Primzahlprüfung gibt, haben wir die einfache gewählt, da sie den Punkt ohne großen mathematischen Aufwand veranschaulicht.

Beispiel 1.3 In vielen Anwendungen müssen wir oft feststellen, zu welcher von mehreren Klassen ein gegebenes Objekt gehört. Das Objekt kann ein mathematisches Objekt sein, bei dem es erforderlich ist, eine Zahl mit einer von mehreren Mengen zu verknüpfen, von denen jede ihre eigenen Eigenschaften hat. Oder es kann eine physische sein: Ein Roboter, der den Tiefseeboden abtastet, „sieht“ verschiedene Objekte, die er erkennen muss, um zwischen Fischen, Gesteinen, Algen und so weiter unterscheiden zu können. Typischerweise wird die Zugehörigkeit des Objekts bestimmt, indem es einer Anzahl verschiedener Tests unterzogen wird. Der Klassifizierungsprozess kann auf einem MISD-Rechner mit so vielen Prozessoren, wie Klassen vorhanden sind, sehr schnell durchgeführt werden. Jeder Prozessor ist einer Klasse zugeordnet und kann Mitglieder dieser Klasse durch einen Rechentest erkennen. Ein gegebenes zu klassifizierendes Objekt wird gleichzeitig an alle Prozessoren gesendet, wo es parallel getestet wird. Das Objekt gehört zu der Klasse, die diesem Prozessor zugeordnet ist, der den Erfolg seines Tests meldet. (Natürlich kann es sein, dass das Objekt zu keiner der getesteten Klassen gehört. In diesem Fall melden alle Prozessoren einen Fehler.) Wie in Beispiel 1.2 werden, wenn weniger Prozessoren als Klassen verfügbar sind, von jedem Prozessor mehrere Tests durchgeführt hier muss jedoch ein Prozessor bei der Erfolgsmeldung auch die Klasse angeben, zu der das Objekt gehört. Die vorhergehenden Beispiele zeigen, dass die Klasse der MISD-Computer in vielen Anwendungen äußerst nützlich sein kann. Es ist auch offensichtlich, dass die Art von Berechnungen, die auf diesen Computern effizient ausgeführt werden können, eher spezialisierter Natur sind. Für die meisten Anwendungen wäre die Verwendung von MISD-Computern ziemlich umständlich. In den nächsten beiden Abschnitten werden Parallelrechner beschrieben, die flexibler und damit für eine Vielzahl von Problemen geeignet sind.

1.2.3 SlM D-Rechner In dieser Klasse besteht ein Parallelrechner aus N identischen Prozessoren, wie in Abb.

1.3. Jeder der N Prozessoren besitzt einen eigenen lokalen Speicher, in dem er beides speichern kann

0R VERBINDUNGSNETZWERK

Programme und Daten. Alle Prozessoren arbeiten unter der Kontrolle eines einzigen Befehlsstroms, der von einer zentralen Steuereinheit ausgegeben wird. Äquivalent kann angenommen werden, dass die N Prozessoren identische Kopien eines einzelnen Programms halten, wobei die Kopie jedes Prozessors in seinem lokalen Speicher gespeichert ist. Es gibt N Datenströme, einen pro Prozessor. Die Prozessoren arbeiten synchron: Bei jedem Schritt führen alle Prozessoren denselben Befehl aus, jeder an einem anderen Datum. Die Anweisung kann eine einfache (wie das Addieren oder Vergleichen von zwei Zahlen) oder eine komplexe Anweisung (wie das Zusammenführen von zwei Zahlenlisten) sein. Ebenso kann das Datum einfach (eine Zahl) oder komplex (mehrere Zahlen) sein. Manchmal kann es erforderlich sein, dass nur eine Teilmenge der Prozessoren eine Anweisung ausführt. Diese Informationen können im Befehl selbst codiert werden, wodurch einem Prozessor mitgeteilt wird, ob er aktiv (und den Befehl ausführen) oder inaktiv (und auf den nächsten Befehl warten soll) sein soll. Es gibt einen Mechanismus, wie zum Beispiel eine globale Uhr, der einen Lock-Step-Betrieb sicherstellt. Somit können Prozessoren, die während eines Befehls inaktiv sind oder die die Ausführung des Befehls vor anderen abschließen, im Leerlauf bleiben, bis der nächste Befehl ausgegeben wird. Das Zeitintervall zwischen zwei Befehlen kann fest sein oder kann von dem ausgeführten Befehl abhängen. Bei den interessantesten Problemen, die wir auf einem SIMD-Rechner lösen wollen, ist es wünschenswert, dass die Prozessoren während der Berechnung untereinander kommunizieren können, um Daten oder Zwischenergebnisse auszutauschen. Dies kann auf zwei Arten erreicht werden, wodurch zwei Unterklassen entstehen: SIMD-Computer, bei denen die Kommunikation über einen gemeinsam genutzten Speicher erfolgt, und solche, bei denen dies über ein Verbindungsnetzwerk erfolgt.

1.2.3.1 Shared-Memory ( S M ) SIMD-Computer. Diese Klasse ist in der Literatur auch als Parallel Random-Access Machine (PRAM)-Modell bekannt. Hier teilen sich die N Prozessoren einen gemeinsamen Speicher, den sie auf die gleiche Weise verwenden, wie eine Gruppe von Personen ein Schwarzes Brett verwenden kann. Wenn zwei Prozessoren kommunizieren möchten, tun sie dies über den gemeinsam genutzten Speicher. Sagen wir, Prozessor i möchte eine Zahl an Prozessor j übergeben. Dies geschieht in zwei Schritten. Zuerst schreibt Prozessor i die Nummer in den gemeinsam genutzten Speicher an einer gegebenen Stelle, die dem Prozessor j bekannt ist. Dann liest Prozessor j die Nummer von dieser Stelle. Während der Ausführung eines parallelen Algorithmus erhalten die N Prozessoren Zugriff auf den gemeinsamen Speicher zum Lesen von Eingabedaten, zum Lesen oder Schreiben von Zwischenergebnissen und zum Schreiben von Endergebnissen. Das Basismodell ermöglicht allen Prozessoren gleichzeitigen Zugriff auf den Shared Memory, wenn die Speicherorte, aus denen sie zu lesen oder in die sie zu schreiben versuchen, unterschiedlich sind. Die Klasse der Shared-Memory-SIMD-Rechner kann jedoch weiter in vier Unterklassen unterteilt werden, je nachdem, ob zwei oder mehr Prozessoren gleichzeitig auf denselben Speicherort zugreifen können:

(i) Exklusiv-Lesen, Exklusiv-Schreiben (EREW) SM SIMD Computer. Der Zugriff auf Speicherplätze ist exklusiv. Mit anderen Worten, es ist nicht erlaubt, dass zwei Prozessoren gleichzeitig von derselben Speicherstelle lesen oder in dieselbe schreiben. (ii) SM-SIMD-Computer mit gleichzeitigem Lesen, Exklusiv-Schreiben (CREW). Mehrere Prozessoren dürfen von derselben Speicherstelle lesen, aber das Recht zum Schreiben ist immer noch exklusiv: Es dürfen nicht zwei Prozessoren gleichzeitig in dieselbe Speicherstelle schreiben. (iii) SM-SIMD-Computer mit exklusivem Lesen und gleichzeitigem Schreiben (ERCW). Mehrere Prozessoren dürfen in dieselbe Speicherstelle schreiben, aber Lesezugriffe bleiben exklusiv. (iv) SM SIMD-Computer mit gleichzeitigem Lesen und gleichzeitigem Schreiben (CRCW). Es werden sowohl Mehrfachlese- als auch Mehrfachschreibberechtigungen gewährt. Das Erlauben mehrfacher Lesezugriffe auf dieselbe Adresse im Speicher sollte im Prinzip keine Probleme bereiten (außer vielleicht einige technologische, die später erörtert werden). Konzeptionell erstellt jeder der mehreren Prozessoren, die von diesem Ort lesen, eine Kopie des Inhalts des Ortes und speichert ihn in seinem eigenen lokalen Speicher. Bei mehrfach schreibenden Zugriffen treten jedoch Schwierigkeiten auf. Wenn mehrere Prozessoren gleichzeitig versuchen, (möglicherweise unterschiedliche) Daten an einer bestimmten Adresse zu speichern, welcher von ihnen sollte erfolgreich sein? Mit anderen Worten, es sollte einen deterministischen Weg geben, den Inhalt dieser Adresse nach der Schreiboperation zu spezifizieren. Es wurden mehrere Richtlinien vorgeschlagen, um solche Schreibkonflikte zu lösen, wodurch die Klassen (iii) und (iv) weiter unterteilt werden. Einige dieser Richtlinien sind

(a) der Prozessor mit der kleinsten Nummer darf schreiben und allen anderen Prozessoren wird der Zugriff verweigert (c) die Summe aller Größen, die die Prozessoren zu schreiben versuchen, wird gespeichert.

Ein typischer Vertreter der Klasse von Problemen, die auf Parallelrechnern der SM SIMD-Familie gelöst werden können, ist im folgenden Beispiel gegeben. Beispiel 1.4 Stellen Sie sich eine sehr große Computerdatei vor, die aus n verschiedenen Einträgen besteht. Wir nehmen der Einfachheit halber an, dass die Datei in keiner Reihenfolge sortiert ist. (Tatsächlich kann es sein, dass es unmöglich oder einfach ineffizient ist, die Datei immer sortiert zu halten.) Nehmen wir nun an, dass es erforderlich ist, zu bestimmen, ob ein bestimmtes Element x in der Datei vorhanden ist, um eine Standard-Datenbankoperation auszuführen , wie zum Beispiel lesen, aktualisieren oder löschen. Auf einem herkömmlichen (d. h. SISD) Computer erfordert das Abrufen von x im schlimmsten Fall n Schritte, wobei jeder Schritt ein Vergleich zwischen x und einem Dateieintrag ist. Der schlimmste Fall tritt eindeutig ein, wenn x entweder gleich dem letzten Eintrag oder keinem Eintrag gleich ist. Im Durchschnitt erwarten wir natürlich etwas Besseres: Wenn die Dateieinträge gleichmäßig über einen bestimmten Bereich verteilt sind, sind halb so viele Schritte erforderlich, um x wiederzufinden. Die Arbeit kann auf einem EREW SM SIMD-Computer mit N Prozessoren viel schneller erledigt werden, wobei N R. Wir besprechen nun eine Reihe von Funktionen dieses Modells. (i) Preis. Die erste zu stellende Frage lautet: Welcher Preis wird gezahlt, um N-Prozessoren vollständig miteinander zu verbinden? Es gibt N - 1 Leitungen, die jeden Prozessor verlassen, für insgesamt N(N - 1)/2 Leitungen. Offensichtlich ist ein solches Netzwerk zu teuer, insbesondere für große Werte von N. Dies gilt insbesondere, wenn wir beachten, dass bei N Prozessoren das Beste, was wir hoffen können, eine N-fache Reduzierung der Anzahl der Schritte ist, die von einem sequentiellen Algorithmus benötigt werden. wie in Abschnitt 1.3.1.3 gezeigt. (ii) Machbarkeit. Selbst wenn wir uns einen so hohen Preis leisten könnten, ist das Modell in der Praxis unrealistisch, wiederum für große Werte von N. Tatsächlich gibt es eine Grenze für die Anzahl der Leitungen, die an einen Prozessor angeschlossen werden können, und diese Grenze wird durch die tatsächliche physische Größe des Prozessors selbst. (iii) Beziehung zu SM SIMD. Schließlich ist anzumerken, dass das beschriebene vollständig vernetzte Modell aus dem gleichen Grund wie der gemeinsam genutzte Speicher des R-Blocks schwächer ist als ein Computer mit gemeinsam genutztem Speicher: Nicht mehr als ein Prozessor kann gleichzeitig auf den einem anderen Prozessor zugeordneten Speicherblock zugreifen . Letzteres würde zu Kosten von NZ xf (MIN) führen, die ungefähr gleich sind wie für die SM SIMD (ohne die quadratischen Kosten der Zweiwege-Linien): Dies würde unseren ursprünglichen Zweck, eine machbarere zu erhalten, eindeutig zunichte machen Maschine! Einfache Netzwerke für SZMD-Computer. Es ist ein Glück, dass in den meisten Anwendungen eine kleine Teilmenge aller paarweisen Verbindungen normalerweise ausreicht, um eine gute Leistung zu erzielen. Die beliebtesten dieser Netzwerke werden im Folgenden kurz skizziert. Denken Sie daran, dass, da zwei Prozessoren in einer konstanten Anzahl von Schritten auf einem SM-SIMD-Computer kommunizieren können, jeder Algorithmus für einen SIMD-Computer mit Verbindungsnetzwerk auf dem ersteren Modell in nicht mehr Schritten simuliert werden kann, als für die Ausführung durch das letztere erforderlich sind.

(i) Lineares Array. Der einfachste Weg, N Prozessoren miteinander zu verbinden, ist in Form eines eindimensionalen Arrays, wie in Abb. 1.6 für N = 6 gezeigt. Hier ist der Prozessor Pi über eine Zwei-Wege-Kommunikation mit seinen beiden Nachbarn Pi- und Pi+ verbunden Leitung. Jeder der Endprozessoren, nämlich P und P, hat nur einen Nachbarn. (ii) Zweidimensionales Array. Ein zweidimensionales Netzwerk erhält man, indem man die N Prozessoren in ein mxm-Array mit m = Nli2 anordnet, wie in Abb. 1.7 für m = 4 gezeigt. Der Prozessor in Zeile j und Spalte k wird mit P(j, k) bezeichnet. , wobei 0 N. Wir beobachten nun, dass jeder parallele Algorithmus auf einem sequentiellen Computer simuliert werden kann. Die Simulation wird wie folgt durchgeführt: Der (einzige) Prozessor auf dem sequentiellen Computer führt die parallelen Schritte seriell aus, indem er vorgibt, es sei PI, dann sei es P, und so weiter. Die von der Simulation benötigte Zeit ist die Summe der Zeiten, die benötigt werden, um alle N Prozessoren zu imitieren, also höchstens N mal T,. Aber NT, k dann (das k-te Element von S muss in S sein) rufe SEQUENTIAL SELECT rekursiv auf, um das k-te Element von S zu finden, sonst wenn IS,I+ IS,l>k dann m zurückgeben sonst SEQUENTIAL SELECT rekursiv aufrufen, um das . zu finden (k -- IS,J- IS,l)te Element von S, end if end if.

Beachten Sie, dass die vorangehende Anweisung der Prozedur SEQUENTIAL SELECT nicht angibt, wie das k-kleinste Element von S tatsächlich zurückgegeben wird. Eine Möglichkeit, dies zu tun, wäre, einen zusätzlichen Parameter, sagen wir x, in der Überschrift der Prozedur zu haben (außer

S und k) und geben das k-kleinste Element in x zurück. Eine andere Möglichkeit wäre, einfach das k-kleinste Element als erstes Element der Folge S zurückzugeben. Analysis. Eine schrittweise Analyse von t(n), der Laufzeit von SEQUENTIAL SELECT, wird nun bereitgestellt.

Schritt 1: Da Q eine Konstante ist, Sortieren von S wenn IS1 k dann PARALLEL SELECT ( L , k) else if ILI + IE l 2 k dann Rückgabe m else PARALLEL SELECT (G, k - 1 LJ- IEJ) end if end if .

Beachten Sie, dass der genaue Mechanismus, der von der Prozedur PARALLEL SELECT verwendet wird, um das k-kleinste Element von S zurückzugeben, in der vorherigen Anweisung nicht angegeben ist. Hier können jedoch alle Möglichkeiten verwendet werden, die in Abschnitt 2.3 in Verbindung mit der Prozedur SEQUENTIAL SELECT vorgeschlagen wurden.

Analyse. Wir haben bewusst eine allgemeine Beschreibung von PARALLEL SELECT gegeben, um die Hauptideen des Algorithmus nicht zu verdecken. Um eine genaue Analyse der Laufzeit des Verfahrens zu erhalten, müssen jedoch verschiedene Implementierungsdetails spezifiziert werden. Wie üblich bezeichnen wir mit t(n) die Zeit, die PARALLEL SELECT für eine Eingabe der Größe n benötigt. Eine t(n) beschreibende Funktion wird nun durch Analysieren jedes Schrittes der Prozedur erhalten.

Schritt 1: Um diesen Schritt auszuführen, benötigt jeder Prozessor die Anfangsadresse A der Sequenz Sin des gemeinsam genutzten Speichers, seine Größe JSI und den Wert von k. Diese Größen können mit der Prozedur BROADCAST an alle Prozessoren gesendet werden: Dies erfordert O(1og nl-") Zeit. Wenn IS( 4. Da p(n) = nl-", haben wir Diese Kosten sind optimal im Hinblick auf R( n) untere Schranke abgeleitet in Abschnitt 2.2 Beachten Sie jedoch, dass nx für jedes x asymptotisch größer als log n ist.(In der Tat haben wir diese Tatsache in unserer Analyse von PARALLEL SELECT verwendet.) Da N = n' -" und n/nx c npog n ist, folgt, dass PARALLEL SELECT kostenoptimal ist, vorausgesetzt N 0. In [Aggarwal] wird gezeigt, wie eine weitere Beschleunigung kann für den Fall erreicht werden, dass die Elemente von S aus einem Körper der Größe O(nl+?) für eine Konstante y > 0 entnommen werden: Die Selektion kann nun in O(log2n)-Zeit durchgeführt werden einen Algorithmus zur Auswahl auf dem Baum untersuchen, der zuerst in [Cooper] vorgeschlagen wurde. Dieser Algorithmus benötigt die Zeit, um mit zwei Bits (anstatt zwei ganzen Zahlen) als seine Zeiteinheit zu arbeiten. Das Auswahlproblem wurde auch an Varianten von . angegangen In [Stout 23 wird ein Algorithmus vorgeschlagen, der auf einem vernetzten Computer mit Broadcast-Fähigkeit läuft. Das Modell in [Chandran] ist ein würfelverbundener Computer, bei dem jede Kommunikation zwischen zwei Prozessoren unabhängig von der Art als ein Routing-Schritt zählt viele Elemente werden ausgetauscht, Variationen des Selektionsproblems selbst wurden ebenfalls studiert. Algorithmen zum Finden des größten Elements einer Sequenz (ein Sonderfall der Auswahl) erscheinen in [Bokhari], [Shiloach] und [Valiant]. Eine spezielle Architektur zum Auswählen der k kleinsten von n Elementen ist in w a h ] beschrieben. Schließlich wurden alle bisher diskutierten Ergebnisse durch Worst-Case-Analysen gewonnen. Manchmal ist es sinnvoll, die von einem parallelen Algorithmus benötigte Zeit im Durchschnitt abzuleiten. Hier wird angenommen, dass die Elemente der Eingabe einer bestimmten Wahrscheinlichkeitsverteilung gehorchen, und die erwartete Laufzeit wird erhalten. Algorithmen, die speziell entwickelt wurden, um im Durchschnitt eine gute Laufzeit zu erreichen, werden als probabilistisch bezeichnet. Beispiele für solche probabilistischen Algorithmen sind in [Greenberg] für das baumverbundene SIMD-Modell und in [Reischuck] für das Vergleichsmodell angegeben.

2.9 REFERENCES [AGGARWAL] Aggarwal, A., A Comparative study of X-tree, pyramid and related machines, Proceedings of the 25th Annual IEEE Symposium on Foundations of Computer Science, Singer Island, Florida, Oktober 1984, S. 89-99, IEEE Computer Society, Washington, DC, 1984. [AJTAI] Ajtai, M., Komlos, J., Steiger, WL und SzemerCdi, E., Deterministic selection in O(log log N) parallel time, Proceedings of the 18th Annual ACM Symposium on Theory of Computing, Berkeley, Kalifornien, Mai 1986, S. 188-195, Association for Computing Machinery, New York, NY, 1986. [AKL 11 Akl, SG, An optimal algorithm for parallel selection, Information Processing Letters, vol. 19, Nr. 1, Juli 1984, S. 47-50. [AKL 21 Akl, SG, Parallel Sorting Algorithms, Academic, Orlando, FI., 1985. [AKL 33 Akl, SG, Parallel selection in O(log log n) time using O(n/log log n)processors, Technical Report Nr. 88-221, Department of Computing and Information Science, Queen's University, Kingston, Ontario, März 1988. [BLUM] Blum, M., Floyd, RW, Pratt, V., Rivest, RL, und Tarjan, RE, Time Grenzen für die Auswahl, Journal of Computer and System Sciences, Vol. 2, No. 7, Nr. 4, 1972, S. 448-461. [BOKHARI] Bokhari, S. H., Finding maximum on an Array Processor with Global Bus, IEEE Transactions on Computers, Vol. 2, No. C-33, Nr. 2, Februar 1984, S. 133-139. [CHANDRAN] Chandran, S. und Rosenfeld, A., Order statistics on a hypercube, Center for Automation Research, University of Maryland, College Park, Md., 1986. [COLE 11 Cole, R. und Yap, CK, Ein paralleler Medianalgorithmus, Information Processing Letters, Bd. 20, Nr. 3, April 1985, S. 137-139. [COLE 23 Cole, R. und Vishkin, U., Deterministic coin tossing and accelrating cascades: Micro and macro technologies for designing parallel algorithms, Proceedings of the 18th Annual ACM Symposium on Theory of Computing, Berkeley, Kalifornien, Mai 1986, S 206-219, Association for Computing Machinery, New York, NY, 1986. [COOPER] Cooper, J. und Akl, SG, Efficient selection on a binary tree, Information Processing ktters, Vol. 2, No. 23, Nr. 3, Oktober 1986, S. 123-126. [FICH] Fich, FE, New Bounds for Parallel Prefix Circuits, Proceedings of the 15th Annual ACM Symposium on Theory of Computing, Boston, Massachusetts, Mai 1983, S. 100-109, Association for Computing Machinery, New York, NY, 1983 [GREENBERG] Greenberg, AG und Manber, U., A probabilistic Pipeline algorithm for k-selection on the tree machine, IEEE Transactions on Computers, Vol. 2, No. C-36, Nr. 3, März 1987, S. 359-362.

[KNUTH] Knuth, D. E., The Art of Computer Programming, Vol. 2, No. 3, Sortieren und Suchen, AddisonWesley, Reading, Mass., 1973. [K

GGE11 Kogge, P.M., Parallele Lösung von Recurrence-Problemen, IBM Journal of Research and Development, März 1974, S. 138-148. [K

GGE 21 Kogge, P.M. und Stone, H.S., Ein paralleler Algorithmus zur effizienten Lösung einer allgemeinen Klasse von Rekursionsgleichungen, IEEE Transactions on Computers, Vol. 2, No. C-22, Nr. 8, August 1973, S. 786-792. [KRUSKAL] Kruskal, C. P., Rudolph, L. und Snir, M., The power of parallel prefix, IEEE Pansactions on Computers, Vol. 2, No. C-34, Nr. 10, Oktober 1985, S. 965-968. [LADNER] Ladner, R. E. und Fischer, M. J., Parallel prefix computing, Journal of the ACM, Vol. 2, No. 27, Nr. 4, Oktober 1980, S. 831-838. [MEGIDDO] Megiddo, N., Anwenden von parallelen Rechenalgorithmen im Entwurf serieller Algorithmen, Journal of the ACM, Vol. 2, No. 30, Nr. 4, Oktober 1983, S. 852-865. [REIF] Reif, JH, Probabilistic Parallel Prefix Computation, Proceedings of the 1984 International Conference on Parallel Processing, Bellaire, Michigan, August 1984, S. 291-298, IEEE Computer Society, Washington, DC, 1984. [REISCHUK] Reischuk, R., A fast probabilistic parallel sorting algorithm, Proceedings of the 22nd Annual IEEE Symposium on Foundations of Computer Science, Nashville, Tennessee, Oktober 1981, S. 212-219, IEEE Computer Society, Washington, DC, 1981. [SHILOACH] Shiloach , Y. und Vishkin, U., Finding the maximum, Merging, and Sorting in a Parallel Computation Model, Journal of Algorithms, Vol. 2, No. 2, 1981, S. 88-102. [STONE] Stone, HS, Hrsg., Introduction to Computer Architecture, Science Research Associates, Chicago, 1980. [STOUT 11 Stout, QF, Sorting, Merging, Selection, and Filtering on Tree and Pyramid Machines, Proceedings of the 1983 International Conference über Parallelverarbeitung, Bella

re, Michigan, August 1983, S. 214-221, IEEE Computer Society, Washington, D.C., 1983. C-32, Nr. 9, September 1983, S. 826-830. [TANIMOTO] Tanimoto, SL, Sorting, histogramming, and other statistics operations on a pyramid machine, Technical Report 82-08-02, Department of Computer Science, University of Washington, Seattle, 1982. [VALIANT] Valiant, LG, Parallelism in Vergleichsprobleme, SIAM Journal on Computing, Bd. 4, Nr. 3, September 1975, S. 348-355.

[VISHKIN] Vishkin, U., An optimal parallel algorithm for selection, Department of Computer Science, Courant Institute of Mathematical Sciences, New York, 1983. CWAHI Wah, BW und Chen, K.-L., A partitioning approach to the Entwurf von Auswahlnetzwerken, IEEE Transactions on Computers, Vol. 2, No. C-33, Nr. 3, März 1984, S. 261-268.

Wir haben in Kapitel 2 erwähnt, dass die Selektion zu einer Klasse von Problemen gehört, die als Vergleichsprobleme bekannt sind. Das zweite Problem, das in diesem Buch untersucht werden soll, ist das der Verschmelzung. Sie ist wie folgt definiert: Seien A = (a,, a,, . . .,a,) und B = (b,, b,, . . ., b,) zwei Zahlenfolgen in nicht absteigender Reihenfolge it ist erforderlich, um A und B zu verschmelzen, d. h. um eine dritte Folge C = (c,, c,, . . . , c. ) zu bilden, die ebenfalls in nicht absteigender Reihenfolge sortiert ist, sodass jedes ciin C entweder zu A oder B gehört und jedes aian und jedes bi kommt in C genau einmal vor. In der Informatik tritt das Zusammenführen in einer Vielzahl von Kontexten auf, einschließlich Datenbankanwendungen im Besonderen und Dateiverwaltung im Allgemeinen. Viele dieser Anwendungen beinhalten natürlich die Zusammenführung nichtnumerischer Daten. Außerdem ist es oft notwendig, nach dem Zusammenführen doppelte Einträge aus der resultierenden Sequenz zu löschen. Ein typisches Beispiel ist das Zusammenführen von zwei Mailinglisten, die jeweils alphabetisch sortiert sind. Diese Varianten bieten keine neuen Erkenntnisse und sind recht einfach zu handhaben, wenn das oben genannte Grundproblem gelöst ist. Das Zusammenführen ist im sequentiellen Berechnungsmodell sehr gut verstanden und es existiert ein einfacher Algorithmus zu seiner Lösung. Im schlimmsten Fall, wenn beispielsweise r = s := n ist, läuft der Algorithmus in O(n)-Zeit. Dies ist optimal, da jedes Element von A und B mindestens einmal untersucht werden muss, wodurch R(n) Schritte zum Verschmelzen erforderlich sind. In diesem Kapitel wollen wir zeigen, wie das Problem mit einer Vielzahl von parallelen Rechenmodellen gelöst werden kann. Im Hinblick auf die soeben angegebene untere Grenze sollte beachtet werden, dass R(n/N)-Zeit von jedem parallelen Mischalgorithmus benötigt wird, der N Prozessoren verwendet. Wir beginnen in Abschnitt 3.2 mit der Beschreibung einer speziellen parallelen Architektur für das Zusammenführen. In Abschnitt 3.3 wird ein paralleler Algorithmus für das CREW SM SIMD-Modell vorgestellt, der adaptiv und kostenoptimal ist. Da der Algorithmus eine sequentielle Prozedur zum Zusammenführen aufruft, wird diese Prozedur auch in Abschnitt 3.3 beschrieben. 11: In Abschnitt 3.4 wird gezeigt, wie die gleichzeitigen Leseoperationen aus dem parallelen Algorithmus von Abschnitt 3.3 entfernt werden können, indem er auf einem EREW-Computer simuliert wird. Schließlich wird in Abschnitt 3.5 ein adaptiver und optimaler Algorithmus für das EREW SM SIMD-Modell vorgestellt, dessen Laufzeit kleiner ist als die der Simulation in Abschnitt 3.4. Der Algorithmus

basiert auf einem sequentiellen Verfahren zur Ermittlung des Medians zweier sortierter Sequenzen, das auch in Abschnitt 3.5 beschrieben ist.

3.2 A N E T W O R K FÜR M E R G I N G

In Kapitel 1 haben wir gesehen, dass parallele Architekturen für spezielle Zwecke auf eine der folgenden Arten erhalten werden können:

(i) Verwendung spezialisierter Prozessoren zusammen mit einem herkömmlichen Verbindungsnetzwerk, (ii) Verwendung eines kundenspezifischen Verbindungsnetzwerks, um Standardprozessoren zu verbinden, oder (iii) Verwenden einer Kombination von (i) und (ii). In diesem Abschnitt nehmen wir den dritten dieser Ansätze. Das Zusammenführen wird durch eine Sammlung sehr einfacher Prozessoren erreicht, die über ein Spezialnetzwerk kommunizieren. Diese parallele Architektur für spezielle Zwecke ist als (r, s)-verschmelzendes Netzwerk bekannt. Alle zu verwendenden Prozessoren sind identisch und werden Komparatoren genannt. Wie in Abb. 3.1 dargestellt, empfängt ein Komparator zwei Eingänge und erzeugt zwei Ausgänge. Die einzige Operation, die ein Komparator ausführen kann, besteht darin, die Werte seiner beiden Eingänge zu vergleichen und dann den kleineren und den größeren der beiden auf seine obere bzw. untere Ausgangsleitung zu legen. Unter Verwendung dieser Komparatoren bauen wir ein Netzwerk auf, das als Eingabe die beiden sortierten Folgen A = und B = und erzeugt als Ausgabe eine einzelne sortierte Folge C = . Die folgende Darstellung wird durch zwei Annahmen stark vereinfacht: 1. die beiden Eingangssequenzen sind gleich groß, dh r = s = n >, 1 und 2. n ist eine Potenz von 2.

Wir betrachten zunächst das Zusammenführen von Netzwerken für die ersten drei Werte von n. Für n = 1 genügt eindeutig ein einzelner Komparator: Er liefert als Ausgang seine beiden Eingänge in

Sek. 3.2 Ein Netzwerk zum Zusammenführen

sortierte Reihenfolge. Bei n = 2 sind die beiden Folgen A = und B = werden vom Netzwerk in Abb. 3.2 korrekt zusammengeführt. Dies lässt sich leicht verifizieren. Prozessor P vergleicht das kleinste Element von A mit dem kleinsten Element von B. Seine oberste Ausgabe muss das kleinste Element in C sein, also c. In ähnlicher Weise muss die untere Ausgabe von P, c, sein. Ein zusätzlicher Vergleich wird von P durchgeführt, um die beiden mittleren Elemente von C zu erzeugen. Wenn n = 4, können wir zwei Kopien des Netzwerks in Abb. 3.2 gefolgt von drei Komparatoren verwenden, wie in Abb. 3.3 für A = <3 . gezeigt ,5,7,9>und B = <2,4,6,8>. Im Allgemeinen wird ein (n, n)-verschmelzendes Netzwerk durch die folgende rekursive Konstruktion erhalten. Zuerst die ungeradzahligen Elemente von A und B, d.h. und , werden ebenfalls unter Verwendung eines (n/2,n/2)-verschmelzenden Netzwerks zusammengeführt, um :eine Sequenz . zu erzeugen .Die letzte Sequenz ergibt sich nun aus CI = dl,

c2, = en, czi= min(di+ l, ei), und

c,,+ = max(d,+ ,,e,) für i = I,! . n - 1.

Die abschließenden Vergleiche werden durch eine Reihe von n - 1 Komparatoren durchgeführt, wie in Abb. 3.4 dargestellt. Beachten Sie, dass jedes der (n/2, n/2)-verschmelzenden Netzwerke konstruiert wird, indem dieselbe Regel rekursiv angewendet wird, d. h. unter Verwendung von zwei (44, n/4)-verschmelzenden Netzwerken gefolgt von einem Rang von 2) - 1 Komparatoren. Das Merging-Netzwerk in Abb. 3.4 basiert auf einer Methode, die als ungerade-gerade-Merging bekannt ist. Dass diese Methode im Allgemeinen funktioniert, wird wie folgt gezeigt. Beachten Sie zunächst, dass dl = min(a,, b,) und en = max(a,, b,), was bedeutet, dass c und c, richtig berechnet werden. Beobachte nun das in der Sequenz , i Elemente sind kleiner oder gleich d. Jedes davon ist ein ungeradzahliges Element von entweder A oder B. Daher sind 2i Elemente von A und B kleiner oder gleich d,, ,. Mit anderen Worten,

Abbildung 3.2 Zusammenführen von zwei Sequenzen mit jeweils zwei Elementen.

Abbildung 3.3 Zusammenführen von zwei Sequenzen zu je vier Elementen.

1 (siehe Abb. 3A), dessen Lösung man leicht als t(2n)= 1 + log n sehen kann. Dies ist deutlich schneller als die beste, nämlich O(n), erreichbare Laufzeit auf einem sequentiellen Computer. (ii) Anzahl der Prozessoren. Hier sind wir daran interessiert, die Anzahl der Komparatoren zu zählen, die für eine ungerade-gerade-Verschmelzung erforderlich sind. Sei p(2n) die Zahl der Vergleichs-