تم إنشاء BitMagic كمجموعة أدوات Algebra of Sets لاسترجاع المعلومات، ولكنها تطورت حاليًا إلى مكتبة مكونات أكثر عمومية لعلوم البيانات لهياكل الذاكرة المدمجة والخوارزميات على نواقل البيانات المختصرة. تطبق BitMagic ناقلات البتات المضغوطة والحاويات (المتجهات) بناءً على أفكار تحويل تقطيع البتات وضغط Rank-Select والحوسبة المنطقية على نماذج الذاكرة المضغوطة.
جميع حاويات BitMagic المختصرة قابلة للتسلسل (مع الضغط باستخدام أحدث تقنيات التشفير الثنائي Interpolative) للتخزين الفعال ونقل الشبكة. جميع الحاويات قابلة للبحث بسرعة في شكل مضغوط.
تقدم BitMagic مجموعات من الأساليب والأدوات لتصميم تطبيقاتك لاستخدام تقنيات HPC لتوفير الذاكرة بسرعة (وبالتالي تكون قادرة على احتواء المزيد من البيانات في وحدة حسابية واحدة)، وتحسين أنماط التخزين وحركة المرور عند تخزين متجهات البيانات والنماذج في ملفات أو كائن مخازن (SQL أو noSQL)، وتحسين عرض النطاق الترددي للأنظمة من المستوى المنخفض (ذاكرة التخزين المؤقت لوحدة المعالجة المركزية) إلى تبادل الشبكة والتخزين.
يسهل BitMagic فئتين كبيرتين من السيناريوهات:
تم استخدام BitMagic كعناصر أساسية لـ:
يرجى زيارة ملاحظات حالة الاستخدام الخاصة بنا: http://bitmagic.io/use-case.html
مكتبة BitMagic هي مكتبة عالية الأداء، تنفذ تحسينات لمجموعة متنوعة من الأنظمة الأساسية وتبني الأهداف:
يستخدم BitMagic تصميمًا متجهًا متوازيًا للبيانات بهدف ليس فقط توفير أفضل أداء مترابط فردي ولكن أيضًا تسهيل الحوسبة المتوازية للغاية على الأنظمة متعددة النواة.
يستخدم BitMagic مجموعة من خوارزميات الضغط والمرشحات والتحويلات لتقليل أثر الذاكرة وتكاليف التخزين ونقل بيانات الشبكة. http://bitmagic.io/design.html
يرجى زيارة tech.notes لدينا: http://bitmagic.io/articles.html
يدعم BitMagic إعادة تفسير ناقلات البت كمجموعات من النطاقات غير المتداخلة من 1s محاطة بـ 0s (على سبيل المثال: 011110110). توفر وظائف المجموعة العادية عمليات تقاطع / اتحادات محددة تنفذ مكرر الفاصل الزمني وتبحث عن حدود الفاصل الزمني. النطاقات والفواصل لها فائدة كبيرة في المعلوماتية الحيوية، لأن بيانات الجينوم غالبًا ما يتم شرحها كنطاقات إحداثية. تقدم BitMagic وحدات بناء لعمليات فعالة على فترات زمنية مشفرة كمتجهات بت (ابحث عن بداية/نهاية الفاصل الزمني، وتحقق مما إذا كان النطاق هو فترة زمنية محددة، وقم بتكرار الفواصل الزمنية
تطبق BitMagic عمليات منطقية لمنطق ثلاثي القيم لـ True/False/Unknown (أيضًا المنطق الثلاثي، الثلاثي التكافؤ، الثلاثي) في تمثيل ثنائي البتات المضغوط، مما يدعم عمليات Invert وAND وOR التي تتبع تعريفات Kleene. https://github.com/tlk00/BitMagic/tree/master/samples/bv3vlogic
يستخدم BitMagic مفهوم التسلسل-إلغاء التسلسل على مرحلتين. وينصب التركيز على إلغاء التسلسل السريع. تطبق BitMagic واجهة برمجة التطبيقات (API) لإلغاء تسلسل نطاق المتجهات بسرعة وتجميع إلغاء تسلسل كائنات تخزين البيانات الكبيرة الحجم (BLOBs) المضغوطة. الميزة النهائية لـ BitMagic هي القدرة على العمل مع البيانات المضغوطة.
هذه هي الحالة التشغيلية الرئيسية لذاكرة الوصول العشوائي (RAM)، حيث يتم الاحتفاظ بالنواقل في شكل ذاكرة مضغوطة. الإيجاز ليس ضغطًا. من الممكن الوصول إلى العناصر العشوائية في الحاويات، وفك تشفير الكتل، وتكرار المتجهات، وإجراء التحديثات، وتشغيل خوارزميات البحث. توفر المرحلة الأولى استخدامًا شفافًا، حيث تبدو المتجهات مثل STL إلى حد كبير. موجزة هي ذاكرة مدمجة ولكنها ليست مضغوطة بالكامل.
يمكن لـ BitMagic إجراء تسلسل لجميع الحاويات والمتجهات مع ضغط إضافي يعتمد على مجموعة من الاستدلالات وبرامج الترميز. تقنيات الترميز العمود الفقري هي: الترميز البيني الثنائي (BIC) وإلياس جاما.
تُسمى حاويات BitMagic بالمتجهات "المتفرقة" ولكن في الواقع تعمل أنظمة الضغط الخاصة بها بشكل جيد مع البيانات المتفرقة والكثيفة.
تم اختبار BitMagic على مجموعة معايير Gov2 من القوائم المقلوبة وعدد مجموعات البيانات الخاصة. http://bitmagic.io/bm5-cmpr.html
تعود عملية إلغاء التسلسل دائمًا إلى المرحلة الأولى، لذلك لا يتم فك تشفير البيانات بالكامل بل بدلاً من ذلك
مقتضبة في ذاكرة الوصول العشوائي. هدفنا هنا هو تقليل أثر ذاكرة التطبيق وتحسين زمن وصول إلغاء التسلسل. تدعم خوارزميات إلغاء الضغط إلغاء تسلسل النطاقات التعسفية أو حتى جمع إلغاء تسلسل العناصر.
يدعم BitMagic المتجهات المختصرة (الذاكرة المضغوطة) استنادًا إلى تحويل تبديل البت
يُعرف أيضًا باسم ضغط مستوى البت (BPC) (المعروف أيضًا باسم تقطيع البتات) بالإضافة إلى ضغط Rank-Select. تم تصنيف ناقلات BitMagic الموجزة بشكل مضلل إلى حد ما على أنها "متفرقة" ولكنها تعمل مع المتجهات الكثيفة بشكل جيد.
يحل تبديل البت غرضين: تحرير سهول البت غير المستخدمة وعزل الانتظام والإنتروبيا في ناقلات بت منفصلة (متناثرة). يوفر الضغط على مستويات البت أداءً فائقًا للذاكرة وبحثًا سريعًا. أحد أهداف التصميم هو إجراء عمليات بحث خالية من الفهرس على ناقلات موجزة باستخدام عمليات منطقية سريعة التوجيه.
ناقلات BitMagic المختصرة قابلة للبحث بدون فهرس في شكل مضغوط بالذاكرة. إنه سريع!
يعمل تطبيق نقل البت المقتضب بشكل جيد لكل من المتجهات الصحيحة (الموقعة أو غير الموقعة) بالإضافة إلى ناقلات السلسلة. إنه ينافس مخططات موجزة أخرى مثل الأشجار البادئة. يمكن أن تكون المتجهات الموجزة مرتبة وغير مصنفة. الفكرة هنا مشابهة لـ Apache Arrow-Parquet، ولكنها تأخذ الأمر إلى أبعد من ذلك من خلال ضغط مستوى البت والاستخدام المكثف لضغط Rank-Select المتسارع.
يدعم BitMagic تطور التسلسل (البروتوكول) - إذا تغير تنسيق التسلسل، تظل البيانات المحفوظة القديمة قابلة للقراءة بواسطة الكود الجديد. لن يتمكن الكود القديم من قراءة كائنات تخزين البيانات الكبيرة الكبيرة (BLOBs) الجديدة. يقوم BitMagic بتغيير رقم الإصدار الرئيسي عندما يتغير تنسيق التسلسل.
تقوم BitMagic بتنفيذ استدعاءات ملفات تعريف الذاكرة لجميع المتجهات. يمكن أخذ عينات من أي متجه لبصمة الذاكرة حتى يتمكن نظام المستوى الأعلى من تكييف إدارة الذاكرة بناءً على ملفات تعريف ذاكرة وقت التشغيل. حالة الاستخدام النموذجية هي ذاكرة التخزين المؤقت للكائنات مع الضغط على ذاكرة الوصول العشوائي ثم الإخلاء إلى القرص بناءً على استهلاك الموارد والتكاليف (التوازن الديناميكي بين الطلب والعرض).
نعم! يدعم BitMagic الإصدار 64 بت، ويمكن استخدامه مع مساحة عنوان 32 بت (أقل حملًا) أو مساحة عنوان 64 بت كاملة. مساحة العنوان 32 بت هي الوضع الافتراضي. يجب أن تكون عناصر 2^31-1 مناسبة تمامًا لأنظمة الأشعة تحت الحمراء وعلوم البيانات قصيرة إلى متوسطة المدى. يتوفر وضع عنوان 64 بت باستخدام #define BM64ADDR أو #include "bm64.h". يسمح تطبيق 64 بت الحالي بعناصر متجهة 2^48-1 للأنظمة واسعة النطاق.
يقوم BitMagic بتجميع WebAssmbly (emscripten) والعمل معه. تتضمن أحدث الإصدارات تعديلات متعددة خاصة بالمنصة. أرقام الأداء قريبة من الكود الأصلي بدون SIMD (أحيانًا بعد ذلك). سيبدو نموذج خط الترجمة كما يلي:
emcc -std=c++17 -s ALLOW_MEMORY_GROWTH=1 -O2 -s WASM=1 ...
يتم دعم WebAssembly SIMD ولكنه ليس قيد التشغيل بشكل افتراضي. استخدم: #define BMWASMSIMDOPT
لتمكينه. مثال على cmd النصي:
emcc -std=c++17 -s ALLOW_MEMORY_GROWTH=1 -O2 -msse4.2 -msimd128 -D BMWASMSIMDOPT -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0 -fno-rtti
يستخدم التنفيذ الحالي التحويل البرمجي SSE4.2 (عبر العناصر الجوهرية)، لذا فإن -msse4.2
ضروري.
يدعم BitMagic وحدة المعالجة المركزية ARM بشكل كامل. تم اختبار التحمل لجميع الإصدارات باستخدام Raspberry Pi 4. وتقوم BitMagic بتنفيذ بعض التعديلات والتحسينات الخوارزمية الخاصة بـ ARM (مثل استخدام تعليمات LZCNT). يمكن أن تكون حاويات BitMagic المختصرة مفيدة جدًا على الأنظمة المضمنة للحوسبة المتطورة ذات كمية محدودة من الذاكرة المتوفرة.
يتوفر دعم Arm Neon SIMD (عبر مكتبة SSE2NEON).
BitMagic C++ هي مكتبة رأسية فقط (سهلة الإنشاء والاستخدام في مشروعك) وتأتي مع مجموعة من الأمثلة. لا يُنصح باستخدام الاختبارات كمثال للتعليمات البرمجية لدراسة استخدام المكتبة. لا توضح الاختبارات أفضل أنماط ونماذج الاستخدام، وغالبًا ما تكون غير فعالة عن عمد.
وثائق وأمثلة واجهة برمجة التطبيقات: http://www.bitmagic.io/apis.html
البرنامج التعليمي لجبر المجموعات: http://bitmagic.io/set-algebra.html
حالات الاستخدام وملاحظات التطبيق: http://bitmagic.io/use-case.html
ملاحظات فنية حول تحسين الأداء: http://bitmagic.io/articles.html
دوكسيجين: http://bitmagic.io/doxygen/html/modules.html
أباتشي 2.0.
مهم! نطلب منك أن تذكر بوضوح مشروع BitMagic في أي عمل مشتق أو مواد منشورة لدينا. يعد المرجع المناسب في صفحة منتجك/مشروعك أحد المتطلبات لاستخدام مكتبة BitMagic.
تولي مكتبة BitMagic اهتمامًا جديًا لجودة التعليمات البرمجية وتغطية الاختبار.
باعتبارها مكتبة كتل بناء، يجب أن تكون BitMagic مستقرة ومتوافقة حتى تكون مفيدة.
نحن لا نعتمد على اختبارات الوحدة وحدها، فغالبًا ما تستخدم اختباراتنا "اختبار الفوضى" (المعروف أيضًا باسم التشويش) حيث تعتمد اختبارات الضغط على مجموعات عشوائية ومولدة وعمليات عشوائية. نقوم بشكل منتظم ببناء وتشغيل بدلات اختبارية لوضع الإصدار والتصحيح لمجموعات مختلفة من تحسينات SIMD.
يستغرق تشغيل جميع إصدارات الإصدارات التجريبية أيامًا، لذا لا يُضمن أن يكون الفرع الرئيسي العامل مثاليًا طوال الوقت. للإنتاج، يرجى استخدام فروع أو توزيعات إصدار جيثب المستقرة من SourceForge: https://sourceforge.net/projects/bmagic/files/
يقبل GitHub master طلبات التصحيح. إن سياسة التفريع الخاصة بنا هي أنه لا يمكن اعتبار الإصدار الرئيسي مستقرًا تمامًا بين الإصدارات. (من أجل استقرار الإنتاج يرجى استخدام إصدارات الإصدار)
بحاجة إلى مساعدة في تعيينات Python واللغات الأخرى (يحتوي BitMagic على روابط C)
BitMagic C++ عبارة عن حزمة برامج رأسية فقط، وربما يمكنك فقط أخذ المصادر ووضعها في مشروعك مباشرةً. جميع مصادر/رؤوس مكتبة C++ موجودة في دليل src.
ومع ذلك، إذا كنت تريد استخدام ملفات makefiles الخاصة بنا، فأنت بحاجة إلى اتباع التعليمات البسيطة التالية:
قم بتطبيق بعض متغيرات البيئة عن طريق تشغيل bmenv.sh في الدليل الجذر للمشروع:
$ source ./bmenv.sh
(يرجى استخدام "." "./bmenv.sh" لتطبيق متغير البيئة الجذر)
استخدم GNU make (gmake) لبناء التثبيت.
$make rebuild
أو (إصدار التصحيح)
$gmake DEBUG=YES rebuild
المترجم الافتراضي في Unix وCygWin هو g++. إذا كنت تريد تغيير الإعداد الافتراضي، فيمكنك القيام بذلك في makefile.in (يجب أن يكون من السهل جدًا القيام بذلك)
إذا كنت تستخدم تثبيت cygwin، فيرجى اتباع توصيات Unix العامة. MSVC - الحلول والمشاريع متاحة عبر CMAKE.
Xcode - تتوفر ملفات المشروع عبر CMAKE.
مكتبة BitMagic لتعيينات C وJNI.
مكتبة BitMagic متاحة للغة C (هذا العمل قيد التقدم). الهدف الرئيسي من بناء لغة C هو ربط BitMagic بلغات البرمجة الأخرى. يوجد الإصدار C في الدليل الفرعي "lang-maps".
يقوم الإصدار C بإنشاء إصدارات من BitMagic build لـ SSE وAVX ويضيف تعريف وحدة المعالجة المركزية، بحيث يمكن لنظام المستوى الأعلى دعم التعريف الديناميكي لوحدة المعالجة المركزية وإرسال التعليمات البرمجية.
يستخدم بناء C مترجم C++، لكنه لا يستخدم RTTI والاستثناءات (المحاكاة مع القفز الطويل) وإدارة ذاكرة C++، لذلك فهو لغة C++ محايدة، بدون تبعيات وقت التشغيل. تتم مشاركة الخوارزميات والسلوك بين C وC++.
الوضع الحالي للتنمية:
دعم بايثون معلق ونحن بحاجة إلى المساعدة هنا. إذا كنت متحمسًا للغة Python وتعتقد أنه يمكنك المساعدة، فيرجى الاتصال بـ: anatoliy.kuznetsov @ yahoo dot com
تتطلب مكتبة BitMagic CXX-11. ويستخدم دلالات النقل، noexept، قوائم التهيئة، المواضيع. سيستخدم الإصدار العام التالي CXX-17 (constexpr ifs، وما إلى ذلك).
###الضبط الدقيق والتحسينات:
يتم التحكم في جميع معلمات الضبط الدقيق لـ BitMagic بواسطة تعريفات المعالج المسبق (والمفاتيح التحويلية المحددة للقوس المستهدف لإنشاء التعليمات البرمجية).
#يُعرِّف | وصف | عرض |
---|---|---|
BMSSE2OPT | تحسينات كود SSE2 | 128 بت |
BMSSE42OPT | تحسينات كود SSE4.2 بالإضافة إلى POPCNT وBSF وما إلى ذلك | 128 بت |
BMAVX2OPT | تحسينات AVX2 وPOPCNT وLZCNT وBMI1 وBMI2 | 256 بت |
BMAVX512OPT | AVX-512، (تجريبي) | 512 بت |
BMWASMSIMDOPT | تحسينات WebAssembly SIMD (عبر SSE4.2) | 128 بت |
دي بي إم نيونوبت | تحسينات Arm Neon SIMD (عبر ترجمة SSE2) | 128 بت |
####القيود:
تعريفات تحسين SIMD متنافية، فلا يمكن أن يكون لديك BMSSE42OPT وBMAVX2OPT في نفس الوقت. اختر واحدًا فقط.
لا تدعم مكتبة BM مسارات التعليمات البرمجية المتعددة وتحديد وحدة المعالجة المركزية في وقت التشغيل. يجب عليك إنشاء نظام مخصص لنظامك المستهدف أو استخدام الإصدار المحمول الافتراضي.
####أمثلة:
يمكن إنشاء أمثلة واختبارات BitMagic باستخدام دول مجلس التعاون الخليجي باستخدام إعدادات سطر cmd:
make BMOPTFLAGS=-DBMAVX2OPT rebuild
أو
make BMOPTFLAGS=-DBMSSE42OPT rebuild
يقوم تلقائيًا بتطبيق المجموعة الصحيحة من إشارات المترجم (GCC) للبنية المستهدفة.
CMAKE
cd build
cmake -DBMOPTFLAGS:STRING=BMSSE42OPT ..
make
أو
cmake -DBMOPTFLAGS:STRING=BMAVX2OPT ..
تدعم مكتبة BM الكلمة الأساسية "المقيدة"، ويقوم بعض المترجمين (على سبيل المثال Intel C++) بإنشاء تعليمات برمجية أفضل (مخازن التحميل خارج الترتيب) عندما تكون الكلمة الأساسية المقيدة مفيدة. يتم إيقاف تشغيل هذا الخيار بشكل افتراضي نظرًا لأن معظم برامج التحويل البرمجي لـ C++ لا تدعمه. لتشغيله، يرجى #define BM_HASRESTRICT في مشروعك. يستخدم بعض المترجمين الكلمة الأساسية "__restrict" لهذا الغرض. لتصحيح ذلك، حدد ماكرو BMRESTRICT لتصحيح الكلمة الأساسية.
إذا كنت تريد استخدام مكتبة BM في "مشروع no-STL" (مثل الأنظمة المدمجة) فحدد BM_NO_STL.
تنطبق هذه القاعدة فقط على الأساليب الأساسية bm::bvector<>. ستظل الخوارزميات المساعدة والأمثلة وما إلى ذلك تستخدم STL.
تابعونا على تويتر: https://twitter.com/bitmagicio
شكرًا لك على استخدام مكتبة BitMagic!
البريد الإلكتروني: [email protected]
موقع الويب: http://bitmagic.io
جيثب: https://github.com/tlk00/BitMagic