software1987 Tech-Blog

30Okt/110

Ruby BitField C Extension

Angetrieben durch die Vorlesung "Evolutionäre Algorithmen" an der Technischen Hochschule Mittelhessen habe ich eine Ruby Extension entwickelt mit der sich Bitfelder performant und speichersparend abbilden lassen. In der Vorlesung betrachtet man als Bitfelder abgebildete "Gene" (die bis auf die Idee der Mutation, Crossover, Selektion nichts mit Ihren biologischen Vorbildern zutun haben). Da man in Ruby nicht direkt einzelne Bits ansprechen kann (man kann sie natürlich über Integers mit Bitshifts abbilden) und ein Array von Integern bei entsprechenden Bitfeld größen viel Speicher benötigt (4 Byte * Anzahl Bits) leidet die Performance des gesamten Algorithmus' darunter.

Die von C++ stammende Boost Bibliothek stellt einen Datentypen dynamic_bitset zur Verfügung mit dem Bitfelder nahezu beliebiger Größe effizient verwaltet werden können. In relativ kurzer Zeit habe ich daher eine Ruby Extension in C/C++ geschrieben die diesen Datentypen in Ruby zur Verfügung stellt. Das Ergebnis lässt sich durchaus sehen: Im Vergleich zu meiner vorherigen Implementierung in der ein Bitfeld als Integer-Array abgebildet wurde hat sich die Performance um den Faktor 15 verbessert.

Die Extension ist als Gem verfügbar und lässt sich mit:

gem install bitfield

installieren.

Quellcode: https://github.com/halfdan/ruby-bitfield
Rubygem:  https://rubygems.org/gems/bitfield

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

hat dir dieser Artikel gefallen?

Dann abonniere doch diesen Blog per RSS Feed!

Kommentare (0) Trackbacks (0)

Zu diesem Artikel wurden noch keine Kommentare geschrieben.


Leave a comment

(required)

Noch keine Trackbacks.