Προς το περιεχόμενο

Προγραμματισμός με General-Purpose Computation on GPU


Luciddream

Προτεινόμενες αναρτήσεις

Εχω αναλάβει να κάνω την πτυχιακή μου πάνω στο GPGPU.. αν και εχω ξεκινήσει με το θεωρητικό κομμάτι, στο πρακτικό προς το παρόν σκέφτομαι να κάνω τα παραδείγματα σε JAVA αφου ασχολούμαι τελευταία αρκετά με αυτήν. (δεν θα είναι κάτι υπερβολικό, απλά πραγματάκια) ... οι δοκιμές θα γίνουν σε AMD GPU, Nvidia GPU, και ίσως και Intel GPU, καθώς θέλω να γράψω γενικότερα τι υπάρχει και όχι να φτιάξω κάτι συγκεκριμένο.

 

OpenCL: Οσον αφορά το OpenCL, δοκίμασα να παίξω λίγο με το http://jogamp.org/jocl/www/και το βλέπω σχετικά εύχρηστο. ετρεξα το παραδειγματάκι που εχουν στο wiki και παίζει μια χαρά.

 

(με CPU)

 

 

created CLContext [id: 433744592, platform: AMD Accelerated Parallel Processing, profile: FULL_PROFILE, devices: 2]
using CLDevice [id: 7729584 name:        Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz type: CPU profile: FULL_PROFILE]
used device memory: 17MB
a+b=c results snapshot: 
116.87144, 96.54628, 165.53079, 148.23895, 147.75995, 30.946493, 95.10199, 100.24969, 92.733475, 55.860107, ...; 1444598 more
computation took: 8ms

 

 

 

(με GPU)

 

 

created CLContext [id: 430278304, platform: AMD Accelerated Parallel Processing, profile: FULL_PROFILE, devices: 2]
using CLDevice [id: 4422656 name: Barts type: GPU profile: FULL_PROFILE]
used device memory: 17MB
a+b=c results snapshot: 
116.87144, 96.54628, 165.53079, 148.23895, 147.75995, 30.946493, 95.10199, 100.24969, 92.733475, 55.860107, ...; 1444598 more
computation took: 14ms

 

 

 

αλλα βλέπω οτι υπάρχουν και άλλα δύο projects https://code.google.com/p/javacl/wiki/FAQ

και http://www.jocl.org/... πιο active φαίνεται αυτο που δοκίμασα.

 

WebCL: -- στο τέλος --

 

CUDA: Δεν εχω ψάξει πολύ ακόμα αλλα βλέπω οτι υπάρχει το https://github.com/pcpratts/rootbeer1και http://www.jcuda.org/ .. και τα δύο φαίνονται active.

 

DirectCompute: -- στο τέλος --

 

εχει κανείς συμβουλές για το πώς να ασχοληθώ (π.χ αν κάνω λάθος που θέλω να το κάνω με Java) και με ποια libraries να δουλέψω?? Προς το παρόν βλέπω οτι εχουν μεγάλες ομοιότητες στο Syntax μεταξύ τους...

 

αυτα που εχω γράψει στο τέλος δεν εχω ασχοληθεί καν να δώ αν εχουν bindings ή με ποιο τρόπο θα τα λειτουργήσω :P όταν ξεμπερδέψω με τα αλλα θα τα πιάσω και αυτά.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τi ακριβώς εφαρμογές θέλεις να τρέξεις; Θα τις γράψεις εσύ, ή θα χρησιμοποιήσεις κάποιες έτοιμες; Θα πρέπει να ασχοληθείς με όλα τα μοντέλα (κάτι σα σύγκριση δηλαδή) ή μόνο με ένα;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τi ακριβώς εφαρμογές θέλεις να τρέξεις; Θα τις γράψεις εσύ, ή θα χρησιμοποιήσεις κάποιες έτοιμες; Θα πρέπει να ασχοληθείς με όλα τα μοντέλα (κάτι σα σύγκριση δηλαδή) ή μόνο με ένα;

 

οι εφαρμογές θα είναι σχετικές με γραφικά (π.χ κάτι σε physics simulation).. δεν με πειράζει να χρησιμοποιήσω έτοιμες αλλα αν μπορώ να γράψω και εγώ μερικά απλά παραδείγματα θα ειναι καλύτερα, για να μπορώ να τα εξηγήσω κιόλας, η ακόμα και να τα παρουσιάσω.

 

πρέπει να ασχοληθώ με όλα και να γράψω κάποια πράγματα για αυτά. Υποτίθεται οτι θα χρησιμοποιήσει την εργασία αυτή στο επόμενο εξάμηνο για το μάθημα των γραφικών οπότε καταλαβαίνεις περίπου πώς πρέπει να είναι..

 

ενα παράδειγμα που θέλω ας πούμε να έχω μέσα είναι ένα simulation καπνού που είχα βρεί πριν λίγους μήνες απο έναν γιαπωνέζο προγραμματιστή... αυτό είναι σε C αλλά τα σπάει :P ... αν καταφέρω να το βρώ ξανά δηλαδή

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γενικά δεν έχω ασχοληθεί με προγραμματισμό γραφικών σε GPU. Έχω ασχοληθεί με παραλληλοποίηση όμως εφαρμογών σε GPU με Cuda. Η nVidia έχει γράψει τη Cuda για να τρέχει με C/C++. Απλά, αν δεν είσαι 100% σίγουρος/η ότι τα bindings δουλεύουν καλά τότε πρόσεχε. Όσο έψαξα τώρα φαίνεται πως όλα είναι ok για την JCuda. Στην ουσία καλούν τις συναρτήσεις της C.

 

Θα πρότεινα να δουλέψεις με την γλώσσα (C/C++ vs. Java) η οποία θα σου παράσχει τα περισσότερα resources. Φάση όμως θα είχε και με Java. Θα έκανες κάτι διαφορετικό.

 

Να σε ρωτήσω. Με ποια έκδοση Cuda σκέφτεσαι να δουλέψεις;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να σε ρωτήσω. Με ποια έκδοση Cuda σκέφτεσαι να δουλέψεις;

 

δεν ξέρω ακόμα. να φανταστείς ακόμα δεν εχω nvidia κάρτα αλλά πρέπει να πάρω μια που να υποστηρίζει cuda γιατι το συζητήσαμε και δεν του φτάνει μονο η amd που έχω :P λογικά με την τελευταία.. παίζει ρόλο η έκδοση?

 

δεν θέλω να κάνω προγραμματισμό γραφικών.. απλά να δείξω παραδείγματα φυσικής π.χ Bullet engine ή ένα "απλό" smoke simulation. αυτό που εννοώ είναι οτι δεν θέλω να κάνω παραλληλοποίηση τύπου σπάσιμο κωδικών, γιατι δεν ειναι κάτι που ενδιαφέρει το μάθημα του.

 

o λόγος που κοιτάω την Java ειναι οτι κάνω και πρακτική σε μια εταιρία πάνω σε Java (Web) και δεν θα ήθελα να τα μπλέξω με τις γλώσσες αυτον τον καιρό.. έτσι και αλλιώς το πιθανότερο ειναι απλά να κάνω copy paste κάποιον κώδικα και να τον φέρω στα μέτρα μου..

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ανάλογα με την έκδοση που θα επιλέξεις, θα έχεις και τις ανάλογες συνέπειες στη γραφή κώδικα. Τι εννοώ.

 

Η CPU με τη GPU έχουν διαφορετικές μνήμες οι οποίες επικοινωνούν μέσω της μητρικής. Δεν έχει όνομα αναφοράς pointer από τη CPU στη GPU. Αν ασχοληθείς με version Cuda < 6.0, τότε πρέπει να κάνεις εσύ όλες τις μεταφορές από τη μνήμη της CPU σ' αυτή της GPU. Πριν λίγους μήνες έβγαλαν την 6.0 όπου έχεις τη ψευδαίσθηση ότι η μνήμη είναι ίδια. Δε χρειάζονται από σένα οι μεταφορές με το χέρι. Η Cuda είναι ένα εργαλείο που δε μπορείς να πεις ότι έχει έρθει σε καποιο σημείο σταθερότητας. Αναπτύσσεται συνεχώς. Να φανταστείς δεν υποστηρίζει πλήρως Seperate Compiling.

 

Ένα άλλο θέμα που θα σε απασχολήσει είναι η κάρτα γραφικών. Αλλάζει το στυλ προγραμματισμού από αρχιτεκτονική σε αρχιτεκτονική. Μη φανταστείς τρελά πράγματα, απλά πρέπει να γνωρίζεις αν η κάρτα σου έχει ή δεν έχει cache. Γενικά ο προγραμματισμός σε GPU απαιτεί να ξέρεις, να γνωρίζεις και να πηγαίνεις με τα νερά της αρχιτεκτονικής, αλλιώς δε σου κάθεται. Εσύ βέβαια μπορεί να μη χρειαστεί να γράψεις κώδικα αλλά φαντάζομαι θα χρειαστείς κάποια προετοιμασία σε περίπτωση που κολλήσεις κάπου.

 

Αυτά για την Cuda είναι απλά σε σχέση με την openCL. Δεν έχω ασχοληθεί με openCL, απλά εκεί πρέπει να κάνεις πολλά πράγματα με το χέρι.

 

Τέλος πάντων, πρέπει φαντάζομαι να έχεις κάποιο υπόβαθρο έστω και για το copy-paste. Όχι βαθύ, αλλά τα απολύτως βασικά και επιφανειακά. Μπαίνεις σε άλλα χωράφια.

 

Υ.Γ.: Δεν έχετε στη σχολή κάποιο υπολογιστή με κάρτα γραφικών που να τρέχει Cuda;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πρεπει να κανεις "focus" στους shaders. Η γλωσσα που θα σηκωσει το api, παει περιπατο σε αυτη την περιπτωση.

 

Btw τα spoilers ειναι αστεια. Εαν με cpu σου πηρε 8ms τοτε με gpu θα σου επαιρνε κατι ns.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πρεπει να κανεις "focus" στους shaders. Η γλωσσα που θα σηκωσει το api, παει περιπατο σε αυτη την περιπτωση.

 

Btw τα spoilers ειναι αστεια. Εαν με cpu σου πηρε 8ms τοτε με gpu θα σου επαιρνε κατι ns.

Μπορεί να μην έγινε σωστή βελτιστοποίηση μετά. Άντε πες πως το στριμώχνεις τον κώδικα στη GPU. Μετά; Μαγικά!!!!!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Btw τα spoilers ειναι αστεια. Εαν με cpu σου πηρε 8ms τοτε με gpu θα σου επαιρνε κατι ns.

 

χαχα ναι όντως, αλλα δεν ειναι απο αυτό... απλά άλλαξα την μεθοδο που επιστρέφει το device, και για κάποιο λόγο ο τρόπος που το εχω τώρα καθυστερεί περισσότερο. η CPU με αυτην την μεθοδο δίνει 20ms.

Υ.Γ.: Δεν έχετε στη σχολή κάποιο υπολογιστή με κάρτα γραφικών που να τρέχει Cuda;

 

δεν πατάω πλέον στην σχολή.. εδώ και καιρό :P ασε που δεν νομίζω να έχουμε κάτι τόσο "σύγχρονο"..  δεν εχω κάτσει να δώ πόσο κοστίζει μια κάρτα που υποστηρίζει CUDA αλλα πιστεύω θα έχει και φτηνά μοντέλα ..

 

αυτό που λες για το shared memory κάτι παρόμοιο υπάρχει και στο OpenCL.. νομίζω η version 2.0 το υποστηρίζει.

Πρεπει να κανεις "focus" στους shaders. Η γλωσσα που θα σηκωσει το api, παει περιπατο σε αυτη την περιπτωση.

 

χμμμ... οκ.. θα τα ψάξω αυριο γιατι τώρα η νύστα δν παλεύεται....

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορεί να μην έγινε σωστή βελτιστοποίηση μετά. Άντε πες πως το στριμώχνεις τον κώδικα στη GPU. Μετά; Μαγικά!!!!!

 

Οτι και να πουμε, χωρις shader, δεν πας σε gpu. Ποσο μαλλον σε gpgpu 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Και όμως, άλλο πράγμα οι shaders, που προορίζονται για προγραμματισμό γραφικών, και άλλο πράγμα μία γενική γλώσσα όπως η OpenCL ή η CUDA.

 

Αν θέλεις να φτιάξεις γραφικά, πρέπει να δεις τους shaders και όλη την αλυσίδα επεξεργασίας πάνω στην οποία βασίζονται (σημεία, τρίγωνα, κ.λπ.). Αν δεν σε ενδιαφέρουν αυτά αλλά θέλεις π.χ. να λύσεις με παράλληλο αλγόριθμο ένα πρόβλημα μαθηματικής φύσης μπορείς να πας κατευθείαν σε OpenCL ή CUDA.

 

Παλιότερα, που δεν υπήρχε ακόμα η OpenCL και οι παρόμοιες γλώσσες, χρησιμοποιούσαν τους shaders και για υπολογισμούς εκτός γραφικών, «μασκαρεύοντας» τα δεδομένα σε δομές που χρησιμοποιούν οι shaders για να μπορέσουν να τους τα περάσουν και να κάνουν εκεί τους υπολογισμούς. Όμως τώρα πια αν το πρόβλημα είναι απλώς υπολογιστικό δεν χρειάζονται τέτοια κόλπα, πας κατευθείαν σε OpenCL ή CUDA.

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

και εγώ με λίγο διάβασμα που έριξα προχτές αυτά κατάλαβα, αλλα ακόμα δεν έχω προλάβει να ασχοληθώ... μέσα στο Σ/Κ λογικά θα κάνω κάτι..

 

εν το μεταξύ βλέπω οι nvidia ακόμα και των 30 ευρώ υποστηρίζουν κανονικά CUDA... μάλλον θα πάρω μια της πλάκας αλλα αν έχει κανεις καμια ιδέα ας την πεί :P .. έχω και μια GTX 285 στο σπίτι αλλά δεν ανάβει πλέον... αν καταφέρω να την αναστήσω κάπως ακόμα καλύτερα

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Νομίζω ότι πλέον όλες οι κάρτες γραφικών υποστηρίζουν αυτές τις τεχνολογίες. Υπάρχουν όμως διάφορες εκδόσεις της OpenCL και της CUDA και οι παλιότερες κάρτες μπορεί να μην υποστηρίζουν τις τελευταίες εκδόσεις.

 

Για καλύτερη πληροφόρηση:

http://stackoverflow.com/questions/5438895/list-of-opencl-compliant-cpu-gpu

 

Σημείωσε ότι OpenCL μπορείς να τρέξεις ακόμα και σε απλή CPU, με το πακέτο της Intel ή της AMD ανάλογα (CUDA όμως όχι, νομίζω).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

βλέπω οτι στο site της khronos έχει μόνο την έκδοση που δοκιμάσαν στα τεστ. ίσως πρέπει να κοιτάξω απτους drivers ποια εκδοση υποστηρίζει..

 

edit: απο wikipedia (όχι οτι το εμπιστεύομαι) για HD 6800 - All models support DirectX 11.0, OpenGL 4.3, OpenCL 1.2

 

στο παράδειγμα παραπάνω νομίζω πως τρέχω στην CPU με τους drivers της κάρτας γραφικών της AMD... θα εχει ενδιαφέρον να δοκιμάσω και με το SDK της Intel αν έχει διαφορά :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το cuda υποστηρίζεται από την nVidia από την αρχιτεκτονική Tesla δηλαδή μπορείς να βρείς αρκετά παλιές cuda compatible κάρτες γραφικών, οπότε μην αποκλειείς να υπάρχει κάποια στη σχολή σου. Όταν ασχολήθηκα εγώ με το θέμα για την εργασία μου τότε ειχάν μόλις αγοράσει τις GeForce GTX 260 που τώρα είναι απαρχαιωμένες. Επίσης όταν συγκρίνεις GPU με CPU να έχεις υπόψην σου ότι τα αποτελέμσατα επηρεάζονται από το computational intensity του προβλήματος και τον όγκο της πληροφορίας που θα επεξεργαστείς.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...

Χρησιμοποιούμε  cookies για να απολαμβάνεις το insomnia προσωποποιημένο στις ανάγκες σου αλλά και για την παροχή στοιχείων επισκεψιμότητας για να βελτιώσουμε την ποιότητα των υπηρεσιών μας