Как вы получаете поток, связанный с политикой выполнения тяги? - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу иметь возможность получить идентификатор потока, связанный с политикой исполнения в толчке.Я пытаюсь получить доступ к этой функции .

Я пробовал это:

cudaStream_t stream = 0;
auto policy = thrust::cuda::par.on(stream);
cudaStream_t str = stream(policy);

, но я получаю ошибку компиляции:

stream.cu(7): error: expression preceding parentheses of apparent call must have (pointer-to-) function type

Могу ли я получить некоторые идеи о том, как это сделать?

1 Ответ

0 голосов
/ 07 декабря 2018

«Я пытаюсь получить доступ к этой функции».Попытка непосредственного использования, например, вещей в detail, является частью реализации и может меняться от одной версии к другой.Иными словами: файл, на который вы ссылаетесь, даже не существует в текущей версии, распространяемой с CUDA 10.

Однако, мне кажется, это работает:

$ cat t354.cu
#include <thrust/execution_policy.h>
#include <iostream>
#include <cstring>

int main(){
  cudaStream_t mystream;
  cudaStreamCreate(&mystream);
  auto policy = thrust::cuda::par.on(mystream);
  cudaStream_t str = stream(policy);
  for (int i = 0; i < sizeof(cudaStream_t); i++)
    if (  *(reinterpret_cast<unsigned char *>(&mystream)+i) != *(reinterpret_cast<unsigned char *>(&str)+i)) {std::cout << "mismatch" << std::endl; return -1;}
  std::cout << "match" << std::endl;
}
$ nvcc -std=c++11 -o t354 t354.cu
$ cuda-memcheck ./t354
========= CUDA-MEMCHECK
match
========= ERROR SUMMARY: 0 errors
$
...