Czy istnieje sposób w CUDA do alokacji pamięci w funkcji __device__? Nie mogłem znaleźć żadnych przykładów takiego działania.CUDA przydziela pamięć w funkcji __device__
Od instrukcji: B.15 Dynamiczna globalna alokacja pamięci void * malloc (size_t size); void free (void * ptr); dynamicznie przydzielaj i zwalniaj pamięć ze sterty o stałym rozmiarze w pamięci globalnej. Funkcja malloc() jądra CUDA przydziela co najmniej bajty wielkości ze sterty urządzeń i zwraca wskaźnik do przydzielonej pamięci lub NULL, jeśli brakuje pamięci do spełnienia żądania. Zwrócony wskaźnik gwarantuje wyrównanie do 16-bajtowej granicy. Funkcja CUDA in-kernel free() zwolni pamięć wskazaną przez ptr, która musiała zostać zwrócona przez poprzednie wywołanie malloc(). Jeśli ptr ma wartość NULL, wywołanie funkcji free() jest ignorowane. Wielokrotne wywołania funkcji free() z tym samym ptr mają niezdefiniowane zachowanie. Pamięć przydzielona przez dany wątek CUDA za pomocą funkcji malloc() pozostaje przydzielona na cały okres istnienia kontekstu CUDA lub do momentu, gdy zostanie wyraźnie zwolniona przez wywołanie funkcji free(). Może być używany przez dowolne inne wątki CUDA nawet z kolejnych uruchomień jądra. Każdy wątek CUDA może zwolnić pamięć przydzieloną przez inny wątek, ale należy zadbać o to, aby ten sam wskaźnik nie był zwalniany więcej niż jeden raz.
Czy próbujesz dynamicznie przydzielić pamięć? – jmilloy
Tak. Rozumiem, że jest to nieco egzotyczne wymaganie, ale portuję istniejącą bazę kodu – SparcU