Springen naar inhoud

2 vragen over computers (hardware)


  • Log in om te kunnen reageren

#1

Evert

    Evert


  • >100 berichten
  • 142 berichten
  • Ervaren gebruiker

Geplaatst op 14 februari 2009 - 13:23

Ik zat eens een keer te denken over het maken van een zoekfunctie. Volgens mij doen alle zoekfuncties het puur software-matig, ofwel door een loop langs de schijf ofwel met een indexeer-bestand oid... (kweet niet exact hoe dat werkt). Toen dacht ik (zoals ik altijd denk), zou het niet sneller zijn als je dat een hardware-functie maakt ipv een software-functie. En dan zat ik aan het volgende te denken (ivm met een SSD):

Normaal gesproken, als je een aantal bytes wil van de SSD dan geef je een aantal geheugenadressen aan de SSD en die geeft dan de bijbehorende bytes terug, toch? Waarom kan dat niet andersom, dat je tegen de SSD zegt 'ok, nu gaan we het even andersom doen' en dan geef je de SSD een aantal bytes (bijvoorbeeld een zoekstring) en dan geeft de SSD de geheugenadressen terug waar die bytes te vinden zijn. Volgens mij zou dat echt 100 keer sneller zijn, want hardware werkt naar mijn weten altijd sneller/efficienter dan software.




Mijn 2e vraag was een keer bij mij opgekomen tijdens het programmeren. Ik programmeerde vroeger in Visual Basic. En ik weet niet hoe het in andere talen zit, maar in VB was het ontzettend vervelend om ervoor te zorgen dat een bepaalde functie werd uitgevoerd als een bepaalde if-statement true was (zegmaar, als er een custom event getriggered werd).

Vaak zat je dan met een loop die de hele tijd de if-statement naging om te kijken of die al true was. Dat was zwaar vervelend, want je kreeg de CPU even op 100% (ok, dat was op te lossen met nog wat extra code, maar toch) en bovendien ging je code niet verder zolang die in die loop zat (en dan kon je misschien met threads werken, maar dat was ook niet ideaal in VB). Dus ik dacht, waarom niet zo'n functie aan een chip toevoegen? Je zet gewoon een extra chip op het moederbord en die kan je dan een custom event geven (eigenlijk gewoon een if-statement) en een callback die die dan moet triggeren als de event triggered. De chip controleert dan elke cyclus of de if-statement(s) waar is/zijn zonder de CPU daarmee te belasten of te hinderen. En ondertussen kan het programma gewoon verder gaan met andere handelingen die het moet doen. Zou toch mooi zijn?




Mijn vraag is dus een beetje, waarom zijn/worden deze functies niet gemaakt? Kunnen ze niet? Of zijn ze nutteloos. Ik kan mij voorstellen dat het probleem dat ik had bij de tweede vraag gewoon een tekortkoming is van mij en Visual Basic, maar misschien heb je het wel in elke programmeertaal. Maar dat van die SSD moet toch kunnen?

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Schwartz

    Schwartz


  • >250 berichten
  • 691 berichten
  • Verbannen

Geplaatst op 15 februari 2009 - 00:24

De strings die men wilt zoeken staan nooit achter elkaar, men heeft een lijst van adressen waar de strings staan.
Bij pascal heeft men normaal ook een lengtecodering. (geen 0 einde)
Bij het zoeken naar de juiste string moet de zoeker weten welke strings het moet hebben...
Bij pascal controleert men dan eerst of de lengte overeenkomend is.
Is deze niet gelijk springt men meteen verder naar de volgende.

Men kan een string ook een XOR getal meegeven.
Indien de zoekstring dan een dezelfde XOR getal heeft dan is er een kans dat de tekst hetzelfde is.
Bij 512 strings heeft men een kans van 1 op 2 en nog wat dat men maar 2 keer moet testen.
Hierdoor kan men al ruim 250 (ofzo) keer sneller zoeken.
(als men een grotere XOR getal neemt dan 256 kan men nog meer versnelllen, dit kost wel meer geheugen)
Ook kan men nog alfabetisch (xor getallen ook ) rangschikken e.d.
Ook kan men zaken die men veel moet vinden voorop zetten zodat die snel gevonden worden.

Een processor die snel moet zoeken moet ook weten waar het moet zoeken en hoe.
Zoek men een overeenkomende string, getal , getal met string etc..
Uppercase techniek toepassen?....bepaalde tekens weglaten.....

Veranderd door Schwartz, 15 februari 2009 - 00:28

Een computertaal is voor mensen, niet voor de computer.

#3

Evert

    Evert


  • >100 berichten
  • 142 berichten
  • Ervaren gebruiker

Geplaatst op 15 februari 2009 - 00:39

Over dat eerste, het is mooi dat je antwoord hoe dat in allerlei programmeertalen werkt, maar kun je mij ook vertellen of mijn idee zou kunnen werken? :D

Over dat 2e, ik had het over een aparte chip hè, die dus apart zou werken van de CPU en daardoor de CPU niet zou verstoren of vertragen.

#4

DrBob

    DrBob


  • >25 berichten
  • 38 berichten
  • Gebruiker

Geplaatst op 15 februari 2009 - 10:20

Vaak zat je dan met een loop die de hele tijd de if-statement naging om te kijken of die al true was. Dat was zwaar vervelend, want je kreeg de CPU even op 100% (ok, dat was op te lossen met nog wat extra code, maar toch) en bovendien ging je code niet verder zolang die in die loop zat (en dan kon je misschien met threads werken, maar dat was ook niet ideaal in VB).

Volgens mij is je redenering nog uit de Commodore 64 tijd. Ik weet niet exact hoe het zit op de PC (ik ben een Mac-man), maar op de Mac worden zo dingen door de "Event Handler" behandeld. Als die weet waarop je wacht, dan wordt het stukje bijbehorende code automatisch uitgevoerd... Ik kan mij niet voorstellen dat het in Windows erg veel anders is.

Waarom kan dat niet andersom, dat je tegen de SSD zegt 'ok, nu gaan we het even andersom doen' en dan geef je de SSD een aantal bytes (bijvoorbeeld een zoekstring) en dan geeft de SSD de geheugenadressen terug waar die bytes te vinden zijn.

In de richting adres --> waarde is er maar één mogelijk antwoord op de vraag. Ik richting waarde --> adres zijn er veel mogelijke antwoorden... Gezien de beperkte breedte van de adrespijplijn lijkt mij dit erg moeilijk op te lossen.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures