Эквивалент 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 вызов, если это не удается, вы выбрали несовместимое выравнивание.

Другие вопросы по тегам