Od online dokumentacji:cudaMemset() - czy ustawia bajty lub liczby całkowite?
cudaError_t cudaMemset (void * devPtr, int value, size_t count)
wypełnia pierwsze bajtów count obszaru pamięci wskazywanego przez devPtr ze stałą bajt wartości wartości.
Parametry: devPtr - wskaźnik do pamięci urządzenia wartość - wartość ustawić dla każdego bajt o określonej pamięci Count - rozmiar w bajtachustawić
Opis ten nie wydaje się być poprawne jako:
int *dJunk;
cudaMalloc((void**)&dJunk, 32*(sizeof(int));
cudaMemset(dJunk, 0x12, 32);
ustawi wszystkie 32 liczby całkowite na 0x12, a nie 0x12121212. (Int vs. Byte)
Opis mówi o ustawianiu bajtów. Liczba i wartość są opisane w kategoriach bajtów. Liczba powiadomień jest typu size_t, a wartość jest typu int. tj. Ustaw rozmiar bajtu na wartość typu int.
cudaMemset() nie jest wymienione w przewodniku prog. Muszę założyć, że zachowanie, które widzę, jest poprawne, a dokumentacja jest zła.
Czy istnieje lepsze źródło dokumentacji? (Gdzie?)
Czy są obsługiwane inne typy? to może zadziała float *dJunk;
? Inni?
Tak, niepoprawnie patrzyłem na moje wyniki. Spróbuj zmienić cudaMemset (dJunk, 0x12, 32); do cudaMemset (dJunk, 0x1234, 32); Wygląda na to, że cudaError_t cudaMemset (void * devPtr, int value, size_t count) powinno być: cudaError_t cudaMemset (void * devPtr, char value, size_t count) tj. VALUE ma rozmiar bajtu. Używanie rozmiaru int jest nieco mylące. (Tylko to wskazuję.) – Doug
@Doug: Wciąż nie jestem pewien, o co ci chodzi. Dokumentacja, którą cytujesz w swoim pytaniu, wyraźnie mówi, że "wartość" jest traktowana jako wartość bajtu. Funkcja zachowuje się identycznie ze standardowym memem C, jedyną różnicą jest to, że wartość bajtu jest przekazywana w LSB słowa 32-bitowego. Nawiasem mówiąc, istnieje prawdziwa 32-bitowa funkcja memset w interfejsie API sterownika, jeśli tego właśnie szukasz. – talonmies