Эквивалент memalign в cuda
Я пытаюсь распараллелить функцию C, используя CUDA. Я заметил, что есть несколько структур, которые передаются как указатели на эту функцию. С помощью унифицированного представления памяти я определил и изменил malloc()
в cudaMallocManaged()
,
Но теперь есть распределение с помощью memalign()
, Я хочу достичь аналогичной задачи, как это было сделано cudaMallocManaged()
,
Существует ли такой эквивалент? Если нет, то что нужно сделать?
Вот как memalign()
Выделение строки выглядит так:
float *data = (float*) memalign(16, some_integer*sizeof(float));
1 ответ
Вы должны иметь возможность зарегистрировать существующий буфер памяти хоста следующим образом:
float *data = (float*) memalign(16, some_integer*sizeof(float));
cudaHostRegister((void *)data, some_integer*sizeof(float), cudaHostRegisterDefault);
после регистрации data
должен вести себя так же, как память, выделенная с cudaMallocManaged
, Проверьте возвращаемое значение из cudaHostRegister
вызов, если это не удается, вы выбрали несовместимое выравнивание.