KChris

Μια εισαγωγή στις δυνατότητες του cuda

Recommended Posts

Υπάρχουν φορές που θέλουμε ο υπολογιστής μας να κάνει μεγάλους υπολογισμούς. Μπορεί όμως ένας επεξεργαστής να τους κάνει αρκετά γρήγορα? Αν όχι τι γίνεται? Άμα τον κλοκάρουμε θα γίνουν πιο γρήγορα, αλλά μήπως είναι και αυτό πολύ αργό?

Εδώ και χρόνια η nvidia αναπτύσσει το cuda για το σκοπό αυτό προκειμένου να πετύχει γρήγορους και μεγάλους υπολογισμούς. Ας δούμε πόσο αποδοτικό είναι.

Χρησιμοποιήθηκαν:

cpu: intel e8400

ram: Cellshock 1800 special edition

motherboard: ASUS P5E64 WS evolution x48

graphic card: ASUS 8800GTS 320MB (G80) και Galaxy gt210 512MB

Ας δούμε τα χαρακτηριστικά των καρτών πρώτα

8800GTS:

i1442031_8800.png

210gt:

i1442032_210dq.png

Ας ξεκινήσουμε με τη 8800GTS. Για αρχή γράψαμε ένα κώδικα που παίρνει 2 πίνακες για είσοδο τους πολλαπλασιάζει και βγάζει ένα πίνακα εξόδου. Οι χρόνοι είναι σε sec.

Δοκιμάσαμε διάφορα μεγέθη για να συγκρίνουμε τα αποτελέσματα. Αρχίσαμε με 256Χ256 μέχρι 2048Χ2048. Παρακάτω φαίνονται τα αποτελέσματα.

i1442040_block.png

Όπως φαίνεται για μικρούς πίνακες η διαφορά δεν είναι τεράστια. Όσο μεγαλώνουν όμως οι πίνακες η κάρτα αρχίζει να δείχνει τη δύναμη σε σχέση με ένα 'απλό' επεξεργαστή και η διαφορά να είναι εντυπωσιακή.

Τα αποτελέσματα έδειξαν πως η κάρτα υπερτερεί έναντι ενός επεξεργαστή. Αν και η διαφορά είναι μεγάλη μήπως μπορεί να ανοίξει και άλλο?

Ας γράψουμε πάλι κώδικα για την κάρτα. Αυτή τη φορά θα χρησιμοποιήσουμε τη shared memory της κάρτας.

i1442041_tiled.png

Η κάρτα δείχνει ήδη από τους μικρούς πίνακες, σε αντίθεση με πριν, τα δόντια της. Η διαφορά για μεγάλους πίνακες πλέον είναι χαοτική.

Η 8800 αναμφίβολα είναι μια δυνατή κάρτα. Για να δούμε τι μπορεί να κάνει η ταπεινή 210 χρησιμοποιώντας τη shared memory.

i1442042_210t.png

Και πάλι η κάρτα είναι πιο γρήγορη από την επεξεργαστή και για μεγάλους πίνακες η διαφορά είναι εντυπωσιακή για μια 'φθηνή' κάρτα.

Τέλος ας δώσουμε μια τελευταία ευκαιρία στον επεξεργαστή.

Κλοκάραμε το σύστημα με τις παρακάτω ρυθμίσεις

e8400 @ 4500MHz (500x9)

μνήμες @ 2000MHz 7-7-6-20

i1442039_oced1.png

Αν και τον ανεβάσαμε αρκετά πιο πάνω από τις stock ρυθμίσεις η διαφορά και πάλι κρατιέται σε μεγάλα επίπεδα.

Τελικά φαίνεται πως η δυνατότητα που μας δίνει η κάρτα να χρησιμοποιούμε πολλά νήματα επιταχύνει τους υπολογισμούς τόσο πολύ που φαίνεται αδύνατο από ένα κοινό επεξεργαστή να φθάσει τέτοιες επιδόσεις.

Να σημειωσουμε απλά ότι ο πολλαπλασιασμός πινάκων είναι ένα πλήρως παραλληλοποιήσιμο πρόβλημα και η διαφορά στο χρόνο εκτοξεύεται. Παρόλο αυτά δεν παύει να είναι πολύ αποδοτικό και σε άλλα προβλήματα να πιάνουμε μεγάλο speedup με ένα σωστό κώδικα.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now