Есть ли способ запустить Windows API-функции в ядрах CUDA? - PullRequest
0 голосов
/ 18 апреля 2020

Недавно я подумал о создании сканера памяти на C ++, и я хотел бы использовать для этого свои ядра CUDA. Но каждый раз, когда я хочу скомпилировать свой код, я получаю сообщение об ошибке MSB3721.

Так есть ли способ вызова Windows функций API из ядра CUDA?

1 Ответ

0 голосов
/ 18 апреля 2020

Вы не можете вызвать Windows API из ядра cuda. Но, возможно, вы можете использовать pinnedmemory для доступа к памяти на стороне процессора и отсканировать ее с помощью некоторых ключевых слов из ядер cuda. Для этого вам нужно постоянно загружать новые области памяти со стороны процессора, одновременно проверяя, обнаружили ли ядра gpu что-то или нет.

Код может выглядеть примерно так:

    int main()
    {
       Int ScannerID = 0;
       bool result=false;
       byte *h_aPinned;
       int bytes=1000;  //batch size for mem copying

      // allocate and initialize
     cudaMallocHost((void**)&h_aPinned, bytes,cudaHostAllocDefault);

     //do stuff and fill h_aPinned with ram memory

     //constantly check kernel for the results
     do
         kernel<<<x, y>>>(h_aPinned, result, ScannerID);  //(decide x & y for your conditions)

         if (result==false) 
               { 
                   //copy another batch of memory just by filling h_aPinned with it.
               }
     while (result = true)


     return 0;
    }

И сторона ядра может быть примерно таким.

    _global__ void kernel(byte* batchmem, bool* result, int* ID) 
{ 
    ID = threadIdx.x;        //for which part of memory return true and calculate batch start point
   //do search with batchmem
   //you can divide search areas on threads
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...