코드가 그렇게 보이고 스트림 사용이 없다고 가정하면 (커널 호출과 추력 호출이 게시 한대로 스트림 사용을 나타냄) 두 작업 모두 기본 스트림에 발행됩니다. 나는 또한 추측 호에 args
이 전달 된 것이 장치 인수가 아니라 호스트 인수라고 가정합니다 (이 경우 내 대답을 변경하지는 않겠지 만). (예 : device_vector
, host_vector
아님).
기본 스트림 (또는 임의의 단일 스트림)에 발행 된 모든 CUDA API 및 커널 호출이 순서대로 실행됩니다.
arrangeData
커널 은 thrust::sort_by_key
호출로 시작된 커널이 완료 될 때까지을 시작하지 않습니다.
프로필러를 사용하여이를 확인할 수 있습니다 (예 : 동기 대 비동기 약간 혼동 될 수 있음은 nvvp
참고. 우리가 커널을 비동기로 시작한다는 것에 관해서는 항상 거의 항상 호스트 CPU 활동을 언급하고 있습니다. 즉, 커널 시작은 호스트 스레드에 대한 비동기식 입니다. 즉, 호스트 스레드에 즉시 제어를 반환하고 실행은 호스트 스레드에 대해 지정되지 않은 시간에 발생합니다.
동일한 스트림에 발행 된 CUDA API 호출과 커널 호출은 항상 서로 동기화됩니다. 주어진 커널은 이전의 모든 큐다 활동 이 (심지어는 cudaMemcpyAsync
과 같은 것)까지 완료 될 때까지 실행을 시작하지 않습니다.