Intel Threading Building Blocks
Η Intel Threading Building Blocks (γνωστή και ως TBB) είναι βιβλιοθήκη προτύπων (templates) της C++ που έχει αναπτυχθεί από την Intel και βοηθά στη συγγραφή λογισμικού που εκμεταλλεύεται τους πολυπύρηνους επεξεργαστές. Η βιβλιοθήκη αποτελείται από δομές δεδομένων και αλγορίθμους που επιτρέπουν στον προγραμματιστή να αποφύγει την πολυπλοκότητα που μπορεί να έχει η χρήση νημάτων όπως τα νήματα POSIX ή τα νήματα των Windows ή τα Boost Threads, όπου πρέπει να δημιουργεί, να συγχρονίζει και να καταστρέφει νήματα με ρητό τρόπο. Αντίθετα, στην περίπτωση της TBB, η βιβλιοθήκη δίνει έναν αφαιρετικό τρόπο όσον αφορά την πρόσβαση σε πολλαπλούς επεξεργαστές, επιτρέποντας στις λειτουργίες του προγράμματος να θεωρούνται "εργασίες" ("tasks"), οι οποίες και μπορούν να κατανεμηθούν δυναμικά στους πυρήνες από τη μηχανή χρόνου εκτέλεσης της βιβλιοθήκης, ενώ χρησιμοποιείται αποδοτικά η κρυφή μνήμη του επεξεργαστή. Ένα πρόγραμμα που χρησιμοποιεί την TBB δημιουργεί, συγχρονίζει και καταστρέφει γράφους αλληλεξαρτώμενων εργασιών σύμφωνα με κάποιους αλγόριθμους, οι οποίοι είναι παραδείγματα προγραμματισμού υψηλού (αλγοριθμικοί σκελετοί, Algorithmic Skeletons). Οι εργασίες εκτελούνται τότε ακολουθώντας τις εξαρτήσεις μεταξύ των κόμβων του γράφου. Η προσέγγιση αυτή τοποθετεί την TBB σε μια οικογένεια εργαλείων που προσπαθούν να λύσουν το πρόβλημα του παράλληλου προγραμματισμού διαχωρίζοντας τον ίδιο τον προγραμματισμό από τις λεπτομέρειες χαμηλού επιπέδου του εκάστοτε υπολογιστή.
Υλοποίηση
Για να μοιράσει τον παράλληλο φόρτο εργασίας στους διαθέσιμους πυρήνες, η TBB υλοποιεί την "κλοπή εργασιών" ("task stealing"), ώστε να αυξηθεί το ποσοστό χρήσης κάθε πυρήνα και επομένως η δυνατότητα κλιμάκωσης της ταχύτητας ανάλογα με τους διαθέσιμους πόρους (scaling). Το μοντέλο κλοπής εργασιών της TBB μοιάζει με το αντίστοιχο της Cilk. Αρχικά ο φόρτος εργασίας μοιράζεται ισόποσα στους διαθέσιμους πυρήνες. Αν κάποιος πυρήνας τελειώσει τις εργασίες του ενώ άλλοι πυρήνες έχουν ακόμα αρκετές εργασίες στις ουρές αναμονής τους, η TBB αναθέτει κάποιες από τις εργασίες των πυρήνων αυτών στον διαθέσιμο πυρήνα. Η δυνατότητα αυτή απομακρύνει τον προγραμματιστή από τη μηχανή, επιτρέποντας τη συγγραφή εφαρμογών με τη χρήση της βιβλιοθήκης, οι οποίες να μπορούν να εκτελούνται πιο γρήγορα με την προσθήκη περισσότερων πυρήνων, χωρίς να χρειάζεται να αλλάξει ο κώδικάς τους.
Η TBB, όπως η STL, χρησιμοποιεί εκτενώς πρότυπα. Αυτό έχει το πλεονέκτημα ότι η χρήση πολυμορφισμού δεν επιβαρύνεται σημαντικά, επειδή τα πρότυπα είναι δομή που χρησιμοποιείται στον χρόνο μεταγλώττισης και οι σύγχρονοι μεταγλωττιστές της C++ μπορούν να τα βελτιστοποιήσουν σε μεγάλο βαθμό. Το αποτέλεσμα είναι πυκνός και γρήγορος κώδικας.
Η Intel TBB διατίθεται εμπορικά σαν εκτελέσιμη διανομή με υποστήριξη[1] και ως ελεύθερο λογισμικό σε μορφή πηγαίου κώδικα και σε εκτελέσιμη μορφή.[2]
Περιεχόμενα της βιβλιοθήκης
Η TBB είναι μια συλλογή από στοιχεία παράλληλου προγραμματισμού:
- Βασικοί αλγόριθμοι:
parallel_for
,parallel_reduce
,parallel_scan
- Προχωρημένοι αλγόριθμοι:
parallel_while
,parallel_do
,parallel_pipeline
,parallel_sort
- Containers:
concurrent_queue
,concurrent_vector
,concurrent_hash_map
- Δέσμευση μνήμης (Scalable memory allocation):
scalable_malloc
,scalable_free
,scalable_realloc
,scalable_calloc
,scalable_allocator
,cache_aligned_allocator
- Αμοιβαίος αποκλεισμός (Mutual exclusion):
mutex
,spin_mutex
,queuing_mutex
,spin_rw_mutex
,queuing_rw_mutex
,recursive mutex
- Ατομικές λειτουργίες (Atomic operations):
fetch_and_add
,fetch_and_increment
,fetch_and_decrement
,compare_and_swap
,fetch_and_store
- Χρονισμός (Timing): καθολικός και ακριβής χρονικός δείκτης, μεταφέρσιμος (portable fine grained global time stamp)
- Χρονοπρογραμματιστής (Task Scheduler): απευθείας πρόσβαση στον έλεγχο της δημιουργίας και της ενεργοποίησης των εργασιών
Δείτε επίσης
- Αλγοριθμικός σκελετός
- Παράλληλος προγραμματισμός
- Grand Central Dispatch
- List of C++ template libraries
- Intel Array Building Blocks
- Cilk
- Intel Cilk Plus
- Intel Concurrent Collections
- Intel Parallel Building Blocks
- Intel Parallel Studio
- Intel Software Network (support and discussion)
Παραπομπές
- ↑ http://www.threadingbuildingblocks.com Intel Threading Building Blocks Commercial Version Homepage
- ↑ http://www.threadingbuildingblocks.org Threading Building Blocks Open Source Project Homepage
Αναφορές
- Reinders, James (2007, July). Intel Threading Building Blocks: Outfitting C++ for Multi-core Processor Parallelism (Paperback) Sebastopol: O'Reilly Media, ISBN 978-0-596-51480-8.
- Voss, M. (2006, October). "Demystify Scalable Parallelism with Intel Threading Building Blocks' Generic Parallel Algorithms."
- Voss, M. (2006, December). "Enable Safe, Scalable Parallelism with Intel Threading Building Blocks' Concurrent Containers."
- Hudson, R. L., B. Saha, et al. (2006, June). "McRT-Malloc: a scalable transactional memory allocator." Proceedings of the 2006 International Symposium on Memory Management. New York: ACM Press, pp. 74-83.
![]() ![]() | Στο λήμμα αυτό έχει ενσωματωθεί κείμενο από το λήμμα Intel Threading Building Blocks της Αγγλικής Βικιπαίδειας, η οποία διανέμεται υπό την GNU FDL και την CC-BY-SA 4.0. (ιστορικό/συντάκτες). |