2015-07-08 3 views
0

Я хочу сравнить производительность одноядерного процессора и многоядерного процессора. Я написал программу и пропустил ее 1000 раз на одноядерном процессоре, чтобы увидеть время работы. В многоядерном случае я использовал OpenCL для запуска ядра, где код был таким же, как и внутри итерации в первом случае.Программа OpenCL работает на CPU

Рассматриваемый многоядерный процессор может запускать 8 параллельных потоков, теоретически, время работы многоядерного корпуса должно быть выше T (одноядерный)/8. Но результат состоит в том, что T (многоядерный) составляет почти 1/20 от T (одноядерный).

Интересно, почему это происходит? Разработал ли OpenCL-компилятор некоторую оптимизацию для многоядерного процессора?

+0

Какой это код? Как была скомпилирована программа (например, флаги оптимизации)? – jprice

+0

Лучше использовать OpenMP для сравнения производительности одного/нескольких ядер. Он очень прост в использовании, и он выполняет точно такой же код сборки. – stgatilov

ответ

2

Если ваш одноядерный код был скалярен, скорее всего, это время работы opencl, используемое sse или avx, и получить дополнительный множитель.

+0

Одноядерный код является скалярным, но может ли операционная среда opencl автоматически использовать SSE или AVX? – EvanzzzZ

+0

Возможно, одноядерная версия более неоптимизирована и имеет большую перегрузку во время выполнения, чем многоядерная компиляция. Трудно судить. Попытайтесь выяснить поведение на разных процессорах с меньшим количеством ядер. – Christian

+0

@EvanzzzZ 'делает opencl runtime будет автоматически использовать SSE или AVX' Это зависит от реализации OpenCL. Intel и AMD делают это автоматически. –

Смежные вопросы