Λειτουργική λέξη-κλειδί για CUDA κατανομή ενοποιημένη μνήμη

ψήφοι
0

Αρχίζω με τον προγραμματισμό CUDA και ως αρχή για την εφαρμογή ενός ολοκληρωτή σωματιδίων, έκανα μια τάξη ολοκλήρωσης που κρατά στοιχεία για σωματίδια και θα πρέπει να είναι σε θέση να το ενσωματώσει. Τα στοιχεία προέρχονται από άλλη κατηγορία εμπορευματοκιβωτίων, και θέλω να διαθέσει αυτά τα δεδομένα σχετικά με την ενοποιημένη μνήμη. Για το σκοπό αυτό, έχω μια συνάρτηση-μέλος «_allocate», το μόνο που κάνει είναι να καλέσετε cudaMallocManaged για τις μεταβλητές μέλη. Τώρα αναρωτιέμαι σε τι είδους λειτουργική λέξη-κλειδί θα πρέπει να τυλίξετε αυτή τη λειτουργία.

Διάβασα ότι δεν μπορείτε να χρησιμοποιήσετε το «παγκόσμιο» σε έναν ορισμό κατηγορίας, αυτή τη στιγμή είμαι με τη χρήση τόσο υποδοχής και της συσκευής, καθώς ενοποιημένη μνήμη θα πρέπει να είναι διαθέσιμο τόσο υποδοχής και της συσκευής, αλλά δεν είμαι σίγουρος αν αυτός είναι ο σωστός τρόπος.

Αυτή είναι η κατηγορία που θα ήθελα να εφαρμόσουν αυτό:


template <typename T>
class Leapfrog : public Integrator<T> {
  public:

   ...

  private:
    T *positions; 
    T *masses; 
    T *velocities; 
    T *types; 
    __device__ __host__ bool _allocate();
    __device__ __host__ bool _free();
    __device__ __host__ bool _load_data();
};

// allocates space on the unified memory for the 
// private variables positions, masses, velocities, types

template <typename T>
__host__ __device__ void Leapfrog<T>::_allocate(){
  cudaMallocManaged(&positions, particleset.N*3*sizeof(T));
  cudaMallocManaged(&masses, particleset.N*sizeof(T));
  cudaMallocManaged(&velocities, particleset.N*3*sizeof(T));
  cudaMallocManaged(&types, particleset.N*sizeof(T));
}

Δεν ξέρω αν αυτό έχει σημασία για το λειτουργικό λέξη-κλειδί, αλλά θέλω επίσης να ελέγξετε cudaError μετά τη χορήγηση για να δούμε αν ήταν επιτυχής

Δημοσιεύθηκε 24/10/2019 στις 12:57
πηγή χρήστη
Σε άλλες γλώσσες...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more