Προγραμματισμός GPU σε περιβάλλον OpenCL και ταύτιση αλφαριθμητικών Πυργιώτης Θεμιστοκλής t.pirgiot@gmail.com ΠΜΣ Τμήματος Εφαρμοσμένης Πληροφορικής Συστήματα Υπολογιστών Πανεπιστημίο Μακεδονίας. Επιβλέπων καθηγητής: Μαργαρίτης Κωνσταντίνος Μάρτιος, 2012 1 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Περιεχόμενα OpenCL Τι είναι; Βασικοί όροι Αρχιτεκτονική 1 OpenCL Τι είναι; Βασικοί όροι Αρχιτεκτονική 2 3 2 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Τι είναι το OpenCL; Τι είναι; Βασικοί όροι Αρχιτεκτονική Ορισμός Το OpenCL (Open Computing Language) είναι ένα ανοιχτό πρότυπο για την υλοποίηση εφαρμογών γενικού σκοπού, οι οποίες εκτελούνται σε ετερογενείς πλατφόρμες αποτελούμενες από CPU, GPU και άλλους επεξεργαστές, δίνοντας έτσι την δυνατότητα στους προγραμματιστές να εκμεταλλευτούν στο έπακρο όλη την υπολογιστική ισχύ ενός συστήματος. 3 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Τι είναι το OpenCL; Τι είναι; Βασικοί όροι Αρχιτεκτονική Αποτελείται από δύο βασικά στοιχεία: Το API που χρησιμοποιείται για τον συντονισμό των παράλληλων εφαρμογών σε ετερογενείς επεξεργαστές. Μια γλώσσα προγραμματισμού ανεξαρτήτου πλατφόρμας, την OpenCL C (βασιζόμενη στην C99). 3 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Τι είναι το OpenCL; Τι είναι; Βασικοί όροι Αρχιτεκτονική Πλεονέκτηματα: Ανάπτυξη κώδικα ανεξαρτήτου πλατφόρμας χωρίς την ανάγκη χρησιμοποίησης γλώσσας συγκεκριμένου κατασκευαστή ή αντιστοίχισης με άλλες βιβλιοθήκες (OpenGL, DirectX). Μπορεί να δια λειτουργεί και να συνεργάζεται με το OpenGL, το OpenGL ES και άλλα γραφικά API. 3 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Βασικοί όροι του OpenCL Τι είναι; Βασικοί όροι Αρχιτεκτονική Εφαρμογή OpenCL Host Device Platform (host, devices) Device (GPU, multi-core CPU) Kernel ( kernel) Context (Διαχειρίζεται αντικείμενα του OpenCL) Command Queue Memory Objects (buffer, image) Program 4 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αρχιτεκτονική του OpenCL Τι είναι; Βασικοί όροι Αρχιτεκτονική Παρουσιάζεται μέσα από μία ιεραρχία μοντέλων. Platform Model Execution Model Memory Model Programming Model 5 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αρχιτεκτονική του OpenCL Platform Model Τι είναι; Βασικοί όροι Αρχιτεκτονική Το μοντέλο πλατφόρμας παρέχει μία υψηλού επιπέδου αφαίρεση για την OpenCL αρχιτεκτονική. 6 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αρχιτεκτονική του OpenCL Execution Model Τι είναι; Βασικοί όροι Αρχιτεκτονική Η βασική αρμοδιότητα που έχει το μοντέλο εκτέλεσης, είναι ο καθορισμός εκτέλεσης των kernel στις συσκευές. work-item index space (NDRange), N = 1, 2, 3 work-group global ID work-group ID local ID 7 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αρχιτεκτονική του OpenCL Execution Model Τι είναι; Βασικοί όροι Αρχιτεκτονική 7 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αρχιτεκτονική του OpenCL Memory Model Τι είναι; Βασικοί όροι Αρχιτεκτονική 8 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αρχιτεκτονική του OpenCL Programming Model Τι είναι; Βασικοί όροι Αρχιτεκτονική Data parallel Άμεσα, όπου ο προγραμματιστής καθορίζει τον συνολικό αριθμό work-item που θα εκτελεστούν παράλληλα και το πώς αυτά θα καταταχθούν στις διάφορες ομάδες εργασιών (work-group). Εμμεσα, όπου ο προγραμματιστής καθορίζει μόνο τον συνολικό αριθμό των work-item που θα εκτελεστούν παράλληλα και το OpenCL από μόνο του αναλαμβάνει την κατάταξη αυτών στα διάφορα work-group. Task parallel 9 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Περιεχόμενα OpenCL 1 OpenCL Τι είναι; Βασικοί όροι Αρχιτεκτονική 2 3 10 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Πρόγραμμα εκτέλεσης στο host (C) Memory allocation for matrices A, B Initialize matrices A,B Memory allocation for matrix C Multiplication with OpenCL Print out result & free up memory 1. Initialize OpenCL Platform Devices Context command queue memory buffer 2. Load and build OpenCL kernel program object load and build kernel object 3. Launch OpenCL kernel set kernel arguments set NDRange execute the kernel 4. Get results back cl mem d A = clcreatebuffer( context, CL_MEM_READ_WRITE CL_MEM_COPY_HOST_PTR, mem_size_a, h_a, &errcode ); size_t localworksize [2], globalworksize [2]; localworksize [0] = 16; localworksize [1] = 16; globalworksize [0] = 1024; globalworksize [1] = 1024; clenqueuendrangekernel ( CQ, clkernel, 2, NULL, globalworksize, localworksize, 0, NULL, NULL ) ; clenqueuereadbuffer ( CQ, d_c, CL_TRUE, 0, mem_size_c, h_c, 0, NULL, NULL ) ; 11 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Πρόγραμμα εκτέλεσης στη συσκευή (OpenCL C, *.cl) kernel void matrixmul( global float* C, global float* A, global float* B, int wa, int wb){ // 2D Thread ID int tx = get_global_id(0); int ty = get_global_id(1); // value stores the element that is computed by the thread float value = 0; for (int k = 0; k < wa; ++k) { float elementa = A[ty * wa + k]; float elementb = B[k * wb + tx]; value += elementa * elementb; } } // Write the matrix to device memory each thread writes one element C[ty * wa + tx] = value; 11 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Χρήση global μνήμης Χρήση local μνήμης 11 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αποτελέσματα πειραμάτων Running time (sec) 1000 100 10 1 0.1 0.01 0.001 0.0001 CPU GPU (OpenCL) GPU (Optimize OpenCL) 512, επιτάχυνση 52X (OpenCL, CPU) 1024, επιτάχυνση 219X (OpenCL, CPU) 2048, επιτάχυνση 4X (OpenCL opt, OpenCL) 1024, επιτάχυνση 881X (OpenCL opt, CPU) 1e-05 16 32 64 128 256 512 1024 2048 4096 Matrix dimensions 11 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Πίνακα με διάνυσμα Αποτελέσματα πειραμάτος 0.1 CPU GPU (OpenCL) Running time (sec) 0.01 0.001 0.0001 1e-05 32 64 128 256 512 1024 2048 4096 8192 Dimensions of matrix and vector. 12 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Πίνακα με διάνυσμα Αποτελέσματα πειραμάτος 1024, επιτάχυνση 1.7X (OpenCL, CPU) 2048, επιτάχυνση 2.2X (OpenCL, CPU) Στη περίπτωση πολλαπλασιασμού πινάκων ο αριθμός των πράξεων είναι ανάλογος του n 3, ενώ στο τρέχον παράδειγμα είναι ανάλογος του n 2. 12 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Άνω τριγωνικού ζωνικού πίνακα με διάνυσμα Αποτελέσματα πειραμάτος CPU GPU (OpenCL) 0.1 Running time (sec) 0.01 0.001 0.0001 Το m, δηλαδή οι διαγώνιοι των πινάκων είναι n 2. 1e-05 32 64 128 256 512 1024 2048 4096 8192 16384 Dimensions of matrix and vector (upper banded triangular matrix). 13 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Άνω τριγωνικού ζωνικού πίνακα Toeplitz με διάνυσμα Ενας πίνακας Toeplitz έχει σε κάθε διαγώνιο σταθερά δεδομένα. 14 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Άνω τριγωνικού ζωνικού πίνακα Toeplitz με διάνυσμα 100 CPU GPU (OpenCL) 100 Speed Up (CPU time / GPU time) 10 10 1 Running time (sec) 0.1 0.01 Speed Up 1 0.001 0.1 0.0001 1e-05 32 64 128 256 512 1024 2048 4096 131072 65536 32768 16384 8192 262144 0.01 32 64 128 256 512 1024 2048 4096 131072 65536 32768 16384 8192 262144 Dimensions of matrix and vector (Toeplitz upper banded triangular matrix). Dimensions of matrix and vector (Toeplitz upper banded triangular matrix). Λόγω της σύμπτυξης του πίνακα Α, τα πειράματα μπορούν να εκτελεστούν για πολύ μεγαλύτερες διαστάσεις. Η επιτάχυνση πλησιάζει στην τιμή 100. Λιγότερες προσπελάσεις στη μνήμη για τον πίνακα A, m στοιχεία και όχι m n. 14 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Προσεγγιστική Αναζήτηση προτύπου a σε κείμενο x Στο πίνακα a( διάνυσμα a) κρατείται το πρότυπο (μεγέθους 4, 8, 16, 32, 64, 128). Στο πολλαπλασιαζόμενο διάνυσμα x κρατείται το κείμενο πάνω στο οποίο θα γίνει η αναζήτηση. Η πράξη του πολλαπλασιασμού γίνεται έλεγχος ισότητας. Τύπος δεδομένων από float σε char. Απαιτούνται n m νήματα. Χρησιμοποιήθηκαν δύο αλφάβητα μεγέθους 4 και 100. 15 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Προσεγγιστική Αναζήτηση προτύπου a σε κείμενο x 4 Alphabet 4 Alphabet 100 30 Alphabet 4 Alphabet 100 3.5 Same performance 25 3 Speed Up (dimension 1024) 2.5 2 1.5 1 Speed Up (dimension 32768) 20 15 10 0.5 5 4 8 16 32 64 128 4 8 16 32 64 128 Size of pattern Size of pattern 30 Alphabet 4 Alphabet 100 30 Alphabet 4 Alphabet 100 25 25 Speed Up (dimension 1048576) 20 15 10 Speed Up (dimension 67108864) 20 15 10 5 5 4 8 16 32 64 128 4 8 16 32 64 128 Size of pattern Size of pattern 15 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Προσεγγιστική Αναζήτηση προτύπου a σε κείμενο x 35 pattern = 4 pattern = 8 30 pattern = 4 pattern = 8 30 pattern = 16 pattern = 32 pattern = 64 pattern = 128 25 pattern = 16 pattern = 32 pattern = 64 pattern = 128 Speed Up (Alphabet 4) 25 20 15 10 Speed Up (Alphabet 100) 20 15 10 5 5 65536 32768 16384 8192 4096 2048 1024 524288 262144 131072 1.67772e+07 8.38861e+06 4.1943e+06 2.09715e+06 1.04858e+06 1024 6.71089e+07 3.35544e+07 131072 65536 32768 16384 8192 4096 2048 6.71089e+07 3.35544e+07 1.67772e+07 8.38861e+06 4.1943e+06 2.09715e+06 1.04858e+06 524288 262144 Text size Text size Απεικονίζει την επιτάχυνση με βάση τα διαφορετικά μεγέθη κειμένου. Για μικρά μεγέθη κειμένου (έως 65536), παρατηρείται ότι όσο πιο μεγάλο είναι το μέγεθος του προτύπου τόσο καλύτερη επιτάχυνση έχει. Οσο το μέγεθος του κειμένου αυξάνεται παρατηρείται μία εξισορρόπηση στην επιτάχυνση η οποία παραμένει σχετικά σταθερή (περιορισμένους πόρους της κάρτας). 15 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αναζήτηση προτύπου a σε κείμενο x 0.14 Alphabet 4 Alphabet 100 3 Alphabet 4 Alphabet 100 2.5 0.12 Speed Up (dimension 1024) 0.1 0.08 0.06 Speed Up (dimension 32768) 2 1.5 1 0.04 0.5 0.02 4 8 16 32 64 128 4 8 16 32 64 128 Size of pattern Size of patterns 10 9 Alphabet 4 Alphabet 100 30 Alphabet 4 Alphabet 100 8 25 Speed Up (dimension 1048576) 7 6 5 4 3 Speed Up (dimension 67108864) 20 15 10 2 1 5 4 8 16 32 64 128 4 8 16 32 64 128 Size of patterns Size of patterns 16 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αναζήτηση πολλαπλών προτύπων Βασικό πρόβλημα στην επιστήμη της Πληροφορικής (ανάκτηση πληροφοριών, σε συστήματα ανίχνευσης επιθέσεων και στη βίο-πληροφορική). Ορισμός Δοθέντος ενός κειμένου εισόδου T = t 1 t 2...t n, αποτελούμενο από ένα αλφάβητο Σ, και ενός πεπερασμένου συνόλου από r λέξεις-κλειδιά P = {p 1, p 2,..., p r }, όπου όλες έχουν σταθερό μήκος m χαρακτήρων και το συνολικό μέγεθος συμβολίζεται με P, η πολλαπλή αναζήτηση προτύπων είναι ο εντοπισμός όλων των τοποθεσιών i στο T, όπου υπάρχει εύρεση οποιασδήποτε λέξης. 17 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αναζήτηση πολλαπλών προτύπων Αλγόριθμος (Wu-Manber) Αλγόριθμος κατηγορίας κατακερματισμού (hashing). 1994 Sun Wu και τον Udi Manber και χρησιμοποιήθηκε στο εργαλείο glimpse. Σήμερα παραλλαγή του χρησιμοποιείται στο εργαλείο Snort (συστήματα ανίχνευσης επιθέσεων). Βασίζεται στον αλγόριθμο αναζήτησης προτύπου Boyer-Moore, παρακάμπτει μεγάλη ποσότητα του κειμένου κατά την αναζήτηση με μετατοπίσεις. Εξετάζει το κείμενο ανά μπλοκ χαρακτήρων μεγέθους Β (log Σ 2P), γίνεται αύξηση του μεγέθους του αλφαβήτου. 18 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αναζήτηση πολλαπλών προτύπων Αλγόριθμος (Wu-Manber) 1 - Φάση προ-επεξεργασίας Προ-επεξεργασία των προτύπων και δημιουργούνται 3 πίνακες. SHIFT: παρόμοιος με την τεχνική bad-character-shift του Boyer-Moore. (μέγιστη τιμή μετατόπισης m B + 1) HASH: περιέχει κατακερματισμένες τιμές του επιθέματος Β χαρακτήρων των προτύπων. PREFIX: περιέχει κατακερματισμένες τιμές του προθέματος Β χαρακτήρων των προτύπων. 2 -Φάση αναζήτησης Σαρώνεται το κείμενο έως ο δέικτης T p < T end. Υπολογίζεται η τιμή κατακερματισμού B χαρακτήρων από το επίθεμα του παραθύρου (hash(sbc)). Αν το SHIFT[hash(sbc)] == 0, γίνεται μετατόπιση κατά T p = T p + SHIFT [hash(sbc)]. Αν το SHIFT [hash(sbc)] > 0, υπάρχει πιθανό ταίριασμα και ελέγχεται η τιμή HASH(hash(sbc)) (δείκτη στην αρχή λίστας πρότυπων) και η PREFIX[(hash(sbc)]. 18 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αναζήτηση πολλαπλών προτύπων Αλγόριθμος (Wu-Manber) α) Σειριακή υλοποίηση Start text (n) Stop β) Παράλληλη υλοποίηση Start(0) Start(1) Start(2) Start(n) Stop(0) Stop(1) Stop(2) Stop(n) text (n)... 18 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αναζήτηση πολλαπλών προτύπων Αλγόριθμος (Wu-Manber) Μεθοδολογία πειραμάτων Τα σύνολα δεδομένων που χρησιμοποιήθηκαν είναι: Φυσική γλώσσα αγγλικού αλφαβήτου (n = 2.473.400 και του αλφαβήτου είναι 94). Το γονιδίωμα του βακτήριου Εσερίχια κόλι (Escherichia coli) (n = 4.638.690 χαρακτήρες και αλφάβητο 4). FASTA Nucleidic Acid (FNA) του γονιδιώματος A-thaliana (n = 118.100.062 χαρακτήρες και αλφάβητο 4) Το FASTA Amino Acid (FAA) του γονιδιώματος A-thaliana (n = 11.273.437 χαρακτήρες και αλφάβητο 20) Τη βάση δεδομένων της ακολουθίας αμινοξέων SWISS-PROT (n = 182.116.687 και αλφάβητο 20) 18 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αναζήτηση πολλαπλών προτύπων Αλγόριθμος (Wu-Manber) Αποτελέσματα πειράματος 0.03 CPU OpenCL 0.03 CPU OpenCL 0.025 0.025 0.02 Running time (sec) 0.02 0.015 Running time (sec) 0.015 0.01 0.01 0.005 0.005 100 1000 10000 0 100 1000 10000 Number of patterns (m = 8) Number of patterns (m = 32) 1 Speed Up (CPU time / GPU time) 0.55 Speed Up (CPU time / GPU time) 0.9 0.5 0.45 0.8 0.4 0.7 0.35 Speed Up 0.6 0.5 Speed Up 0.3 0.25 0.2 0.4 0.15 0.3 0.1 0.2 100 1000 10000 0.05 100 1000 10000 Number of patterns (m = 8) Number of patterns (m = 32) Χρόνος εκτέλεσης και επιτάχυνση για κείμενο φυσικής γλώσσας (CIA World Factbook). 18 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αναζήτηση πολλαπλών προτύπων Αλγόριθμος (Wu-Manber) Αποτελέσματα πειράματος 4 CPU OpenCL 3.5 4.5 CPU OpenCL 4 Running time (sec) 3 2.5 2 1.5 1 Running time (sec) 3.5 3 2.5 2 1.5 1 0.5 0.5 0 100 1000 10000 0 100 1000 10000 Number of patterns (m = 8) Number of patterns (m = 32) 9 Speed Up (CPU time / GPU time) 8 Speed Up (CPU time / GPU time) 8.5 7.5 8 7 7.5 6.5 Speed Up 7 6.5 6 5.5 5 Speed Up 6 5.5 5 4.5 4.5 4 4 100 1000 10000 3.5 100 1000 10000 Number of patterns (m = 8) Number of patterns (m = 32) Χρόνος εκτέλεσης και επιτάχυνση για κείμενο γονιδιώματος Εσερίχια κόλι (E.Coli). 18 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αναζήτηση πολλαπλών προτύπων Αλγόριθμος (Wu-Manber) Αποτελέσματα πειράματος 0.45 CPU OpenCL 0.4 0.3 CPU OpenCL 0.25 0.35 0.3 0.2 Running time (sec) 0.25 0.2 0.15 Running time (sec) 0.15 0.1 0.1 0.05 0.05 0 100 1000 10000 0 100 1000 10000 Number of patterns (m = 8) Number of patterns (m = 32) 4 Speed Up (CPU time / GPU time) 4 Speed Up (CPU time / GPU time) 3.5 3.5 3 3 2.5 Speed Up 2.5 Speed Up 2 2 1.5 1 1.5 0.5 1 100 1000 10000 0 100 1000 10000 Number of patterns (m = 8) Number of patterns (m = 32) Χρόνος εκτέλεσης και επιτάχυνση για κείμενο FASTA Amino Acid (FAA). 18 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Αναζήτηση πολλαπλών προτύπων Αλγόριθμος (Wu-Manber) Αποτελέσματα πειράματος Η επιτάχυνση κυμαίνεται από 0,06 για φυσική γλώσσα και αριθμό προτύπων 100, έως 8,62 για κείμενο αλφαβήτου μεγέθους τέσσερα και αριθμό προτύπων 10.000. Παράγοντας αλφαβήτου Σ. Οσο μεγαλύτερο είναι το αλφάβητο τόσο η επιτάχυνση μειώνεται. Παράγοντας μεγέθους κειμένου n. Οσο αυξάνεται το μέγεθος τόσο αυξάνεται και η επιτάχυνση (0,98 3,07 για τετραπλάσιο μέγεθος φυσικού κειμένου). Παράγοντας πλήθους προτύπων r. Οσο αυξάνεται το πλήθος τόσο αυξάνεται και η επιτάχυνση. Παράγοντας μεγέθους προτύπων m. Δεν παίζει τόσο σημαντικό ρόλο στην επιτάχυνση κυρίως για μικρά αλφάβητα. 18 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Περιεχόμενα 1 OpenCL Τι είναι; Βασικοί όροι Αρχιτεκτονική 2 3 19 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL
Η παραλληλοποίηση είναι επιθυμητή μέθοδος όσο το πλήθος των πράξεων και των δεδομένων αυξάνεται. Τόσο τα πειράματα εκτέλεσης του αλγορίθμου Wu-Manber, όσο και τα παραδείγματα του πολλαπλασιασμού πίνακα με διάνυσμα εκτελέστηκαν με χρήση της global μνήμης του OpenCL και επιδέχονται περαιτέρω βελτίωση, με τη χρήση κατώτερων επιπέδων μνήμης. 20 / 20 Πυργιώτης Θεμιστοκλής Προγραμματισμός GPU σε περιβάλλον OpenCL