2017-01-24 2 views
1

У меня проблема с пониманием моих результатов в отношении интегрального алгоритма (реализована в OpenCl). У меня есть доступ к двум Intel Xeon E5-2680 v3, один из которых имеет 12 ядер.Постоянный размер задачи - то же время выполнения на 1x и 2x CPU - OpenCl

Из OpenCl Не знаю, почему, но я могу видеть только одно устройство, но могу запросить 12 или 24 ядра, поэтому, я думаю, не имеет значения, если я «вижу» одно или два устройства, если используется 24 ядра (2 процессора).

Я выполнял эти задачи с максимальным локальным размером = 4096 и минимальным глобальным размером = 4096, а для 1 процессора и 2 времени выполнения процессора было то же самое, я менял глобальный размер на 2 * 4096, 4 * 4096, 8 * 4096, и когда я достиг 16 * 4096 глобальных размеров, 1CPU замедлялся, но 2x процессор ускорялся, и каждый следующий глобальный размер менялся больше, чем до того, как он остался таким образом, 2x процессор был 2x быстрее, чем 1x процессор.

Я не понимаю, почему с самого начала мы не можем видеть преимущества 2x CPU над 1x процессором. Что также важно для меня, я собирал энергопотребление для процессоров, а в последнем глобальном размере = 8 * 4096, когда мы видим одинаковое время выполнения 1 и 2 процессоров, я вижу немного меньшую потребляемую мощность для двух процессоров, и когда глобальный размер рос, потребление 2-го процессора было ниже, чем на 1 CPU, я думаю, из-за увеличения времени на 2 раза, но не должно быть равным или больше, чем на 1 CPU? Что может быть важно: я проверил, что всегда 1 и 2 процессора имеют частоту 2,5 ГГц, и она не меняется. Мои вопросы относительно выше:

  1. Почему на 1 CPU меньшего размера глобальной и 2 CPU имеют равное время выполнения?

  2. Почему на более крупном глобальном размере 2 процессора имеют меньшую потребляемую мощность.

  3. Почему в тот момент, когда Global Size = 8 * 4096, когда у нас одинаковое время выполнения, у меня немного меньше энергопотребления с 2 процессорами, чем у 1 процессора.

мне нужно добавить, что каждый запуск был сделан 10x так что эти результаты не являются случайными

Вот мои результаты: Results

ответ

0

Почему на меньших глобальный размер в 1 CPU и 2 CPU имеют равное выполнение время?

Потому что вы использовали 4096 как местный размер. Каждый вычислительный блок для процессора - 1 ядро. Вы поместили 16x4096 для глобального размера, поэтому использовали 16 ядер. Возможно, вы использовали связанное с памятью ядро, или одно ядро ​​обращается к кешу или памяти другого ЦП, поэтому не имеет значения, использует ли он 1 ядро ​​или N ядер. Когда вы увеличиваете глобальный размер, другая память ЦП может использоваться чаще, становится более симметричным шаблоном доступа к памяти.

Почему на более крупном глобальном процессоре размера 2 меньше потребляемой мощности.

2 ЦП имеют больше кеша, поэтому они могут планировать больше ядер одновременно, возможно, даже повторное использование данных производится с низким энергопотреблением, чем доступ к барам. Данные Gettin из ram должны быть более энергоемкими, чем получение их из кеша.

Почему в этой одной точке, когда Global Size = 8 * 4096, когда мы имеем одинаковое время исполнения, у меня есть немного меньше потребляемой мощности с 2 процессорами чем 1 CPU.

Использование 8 ядер (размер 8 *), один процессор должен был использоваться, и даже если это не так, одни и те же группы банков памяти могут использоваться как пропускной способностью процессора, так и пропускной способностью памяти, является узким местом. Опять же, у 2 ЦП больше кеша, поэтому для повторного использования данных необходимо использовать преимущество большего кеша, снижающего потребление энергии.

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

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