2012-06-20 6 views
5

Jestem nowy w użyciu Thrust i jest jedna rzecz, której nie rozumiem. Czy ciąg jest asynchroniczny lub synchroniczny?Is Thrust synchroniczny lub asynchroniczny?

Jeśli napiszę poniższy kod, czas wykonania nie jest 0. Ale w innych tagach inni użytkownicy zgłaszają wynik 0. Jaka jest prawda?

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

Uwaga: powiązane pytanie na forum NVIDIA [tutaj] (https://devtalk.nvidia.com/default/topic/864759/is-thrust-copy-synchrous-or-asynchronus-/). – BenC

Odpowiedz

2

uruchamia jądra zawsze asynchroniczny - nawet w CUDA 1.0 - więc każde wezwanie oporowa, która wynika wyłącznie w uruchomieniu jądra będzie asynchroniczny.

Dowolny kod ciągu, który niejawnie wyzwala memcpy, będzie synchroniczny z powodu braku obsługi strumienia, o czym wspomina marina.k.

+3

Na przykład, ciąg :: reduce() jest zdecydowanie synchroniczny, ponieważ odczytuje wynik i zwraca go do wywołującego wątku za pomocą zwracanej wartości. Komentarze na temat tych ograniczeń publikuję w swoim ostatnim poście na stronie Thrust: http://developer.nvidia.com/content/expressive-algorithmic-programming-thrust – harrism

0

Funkcja granulacji funkcji zegara() nie jest dobra, jak myślisz w systemie Windows. W Windows XP jego szczegółowość wynosi 16 ms.

Zamiast używać zegara(), należy korzystać z timera wysokiej rozdzielczości lub funkcji czasowych biblioteki Cutil (co jest na ogół preferowane).

Dyskusja o Wysoka rozdzielczość czasomierza w Windows: C++ high precision time measurement in Windows

Dyskusja na temat wykorzystania CUtil biblioteki dla terminu: CUDA: CUtil timer - confusion on elapsed time

0

można to zrobić ręcznie dodać time.h do indekser, przejdź do Ustawienia - > C/C++ -> Indexer i umieścić go w przedniej części istniejącej „Pliki mają być indeksowane w górę przodu” tak:

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

idzie do pracy