Временные несоответствия Intel Parallel Studio - PullRequest
2 голосов
/ 12 апреля 2011

У меня есть код, который использует Intel TBB, и я работаю на 32-ядерном компьютере.В коде я использую

parallel_for (заблокированный_рандж (2, left_image_width-2, left_image_width / 32) ...

для порождения 32 в потоки, которые выполняют параллельную работу, нет условий гонки)и, надеюсь, каждому потоку дается одинаковое количество работы. Я использую clock_t, чтобы измерить, сколько времени занимает моя программа. Для определенного изображения это занимает примерно 19 секунд.

Затем я пропустил свой кодIntel Parallel Studio и он запустил код за 2 секунды. Это результат, который я ожидал, но я не могу понять, почему между ними такая большая разница. Суммирует ли time_t тактовые циклы на всех ядрах?не имеет смысла. Ниже приведен фрагмент кода.

clock_t begin=clock();

create_threads_and_do_work();

clock_t end=clock();
double diffticks=end-begin;
double diffms=(diffticks*1000)/CLOCKS_PER_SEC;
cout<<"And the time is "<<diffms<<" ms"<<endl;

Любой совет будет оценен.

1 Ответ

0 голосов
/ 15 ноября 2014

Не совсем ясно, является ли разница во времени выполнения результатом двух разных входов (изображений) или просто двух разных методов измерения во время выполнения (разница часов и измерений программного обеспечения Intel).Кроме того, вы не показываете нам, что происходит в create_threads_and_do_work (), и вы не упомянули, какой инструмент в Intel Parallel Studio вы используете, это Vtune?

Ваш разностный метод clock_t суммирует обработкувремя потока, вызвавшего его (основной поток в вашем примере), но он может не учитывать время обработки потоков, созданных в create_threads_and_do_work ().От того, будет ли это или нет, зависит от того, ожидаете ли вы в этой функции завершения всех потоков и только затем выходите из функции, или просто порождаете потоки и выходите немедленно (до того, как они завершат обработку).Если все, что вы делаете в этой функции, - это функция parallel_for (), то разница в clock_t должна давать правильный результат и не должна отличаться от других измерений во время выполнения.

В Intel Parallel Studio есть инструмент профилирования, который называетсяVtune.это мощный инструмент, и когда вы запускаете свою программу через него, вы можете просматривать (графически приятным способом) время обработки (а также время, которое вызывается) каждой функции в вашем коде.Я почти уверен, что после этого вы, вероятно, поймете это.

Последняя идея - завершила ли программа свой курс при использовании программного обеспечения Intel?Я спрашиваю, потому что иногда Vtune собирает данные в течение некоторого времени, а затем останавливается, не позволяя программе завершиться.

...