C'è un modo in CUDA di allocare memoria nella funzione __device__? Non sono riuscito a trovare alcun esempio di ciò.CUDA alloca memoria nella funzione __device__
Dal manuale: B.15 Allocazione memoria globale dinamica void * malloc (size_t size); libero da void (void * ptr); allocare e liberare memoria dinamicamente da un heap di dimensioni fisse nella memoria globale. La funzione malloc nel kernel CUDA alloca almeno i byte di dimensione dall'heap della periferica e restituisce un puntatore alla memoria allocata o NULL se la memoria insufficiente esiste per soddisfare la richiesta. Il puntatore restituito è garantito per essere allineato a un limite di 16 byte. La funzione CUDA in-kernel free() rilascia la memoria puntata da ptr, che deve essere stata restituita da una precedente chiamata a malloc(). Se ptr è NULL, la chiamata a free() viene ignorata. Chiamate ripetute a free() con lo stesso ptr ha un comportamento indefinito. La memoria allocata da un determinato thread CUDA tramite malloc() rimane allocata per la durata del contesto CUDA o finché non viene rilasciata esplicitamente da una chiamata a free(). Può essere utilizzato da qualsiasi altro thread CUDA anche da lanci successivi del kernel. Qualsiasi thread CUDA può liberare memoria allocata da un altro thread, ma è necessario prestare attenzione per garantire che lo stesso puntatore non venga liberato più di una volta.
stai tentando di allocare memoria in modo dinamico? – jmilloy
Sì. Capisco che sia un'esigenza un po 'esotica ma sto eseguendo il porting del codice esistente – SparcU