NVIDIA CUDA 4.0, блокировка страницы с помощью API времени выполнения - PullRequest
1 голос
/ 27 апреля 2011

NVIDIA CUDA 4.0 (здесь подразумевается RC2) предлагает приятную функцию блокировки страниц в диапазоне памяти, который был выделен ранее с помощью «нормальной» функции malloc. Это можно сделать с помощью функции API драйвера:

CUresult cuMemHostRegister (void * p, size_t bytesize, unsigned int Flags);

Теперь разработка проекта была завершена с использованием API времени выполнения. К сожалению, похоже, что API времени выполнения не предлагает такую ​​функцию, как cuMemHostRegister. Я действительно хотел бы избежать смешивания вызовов драйвера и API во время выполнения.

Кто-нибудь знает, как заблокировать страницу памяти, которая была ранее выделена с помощью стандартного malloc? Стандартные функции libc не должны использоваться, поскольку блокировка страницы выполняется для подготовки памяти для быстрой передачи в графический процессор, поэтому я действительно хочу придерживаться пути "CUDA".

Frank

1 Ответ

3 голосов
/ 27 апреля 2011

API времени выполнения 4.0 предлагает cudaHostRegister(), что делает именно то, о чем вы спрашиваете.Помните, что для выделения памяти, которую вы блокируете, должна быть выровнена страница хоста, поэтому вам, вероятно, следует использовать либо mmap(), либо posix_memalign() (или одного из его родственников) для выделения памяти.Передача cudaHostRegister() выделения произвольного размера из стандартного malloc(), вероятно, завершится ошибкой с ошибкой неверного аргумента.

...