2012-06-20 2 views
5

나는 추력을 사용하는 것에 익숙하며 이해가 안되는 것이 하나 있습니다. 추력은 비동기식입니까 아니면 동기식입니까?추력은 동기식입니까 비동기식입니까?

다음 코드를 작성하면 걸리는 시간은 0이 아닙니다. 그러나 다른 태그에서는 다른 사용자가 0의 결과를보고합니다. 진실은 무엇입니까?

clock_t start,end; 

start=clock(); 
thrust::sort_by_key(vettore.begin(), vettore.end(), counter.begin()); 

end=clock(); 

double time=((double)(end-start))/CLOCKS_PER_SEC; 

cout<<"execution time"<<time<<endl;// the result is 0.327 
+0

참고 : NVIDIA 포럼 [여기] (https://devtalk.nvidia.com/default/topic/864759/is-thrust-copy-synchrous-or-asynchronus-/)에서 관련 질문. – BenC

답변

2

커널 시작은 항상 비동기 적이기 때문에 (CUDA 1.0에서도) 커널 시작에서만 발생하는 추력 호출은 비동기 적입니다.

memcpy를 암시 적으로 트리거하는 임의의 추력 코드는 marina.k에서 암시하는 것처럼 스트림 지원이 없기 때문에 동기식입니다.

+3

예를 들어, thrust :: reduce()는 결과를 다시 읽고 반환 값을 통해 호출 스레드로 반환하기 때문에 확실히 동기식입니다. 최근 트러스트에 대한 블로그 게시물에서 이러한 제한 사항에 대해 의견을 말합니다. http://developer.nvidia.com/content/expressive-algorithmic-programming-thrust – harrism

0

clock() 함수의 세분성은 Windows에서 생각한 것처럼 좋지 않습니다. 그리고 Windows XP에서는 그 세분성이 16msec에 이릅니다.

clock()을 사용하는 대신 고해상도 타이머 또는 Cutil 라이브러리의 타이밍 기능 (일반적으로 권장 됨)을 사용하십시오. Windows의 고해상도 타이머에 대한

토론 : 타이밍 CUtil 라이브러리의 사용에 대한 C++ high precision time measurement in Windows

토론 : CUDA: CUtil timer - confusion on elapsed time

0

당신이 수동으로 인덱서에 time.h를 추가 환경 설정으로 이동 할 수 있습니다 - -> C/C++> 인덱서는이 같은 "선행 인덱싱 할 파일"기존의 전면에 넣어 : 그것은 작동하는 것

time.h, cstdarg, stdarg.h, ..... 

관련 문제