2012-05-07 3 views
3

Можем ли мы наследовать сродство procssor в OpenCl? Например, поток # 1 выполняется на procesor # 5,
thread # 2 выполняется на procesor # 6, поток # 3 выполняется на процессоре # 7 и т. Д.?Аффинность процессора в OpenCL

Благодаря

ответ

7

Вы не можете определить близость в этом низком уровне с OpenCL, насколько я знаю. Но, начиная с OpenCL 1.2, есть некоторый контроль над сродством путем разбиения на подпоследовательности с использованием clCreateSubDevices (возможно, с одним процессором в каждом под-устройстве с использованием CL_DEVICE_PARTITION_BY_COUNTS, 1) и выполнения отдельных исполнений ядра на каждом под-устройстве.

Это, скорее всего, плохо работает на чем-либо, кроме реализации OpenCL на основе процессора, и мне придется задаться вопросом, почему вы хотели бы сделать такую ​​вещь. Если вы хотите ограничить использование ЦП для реализации OpenCL-CPU, вы можете использовать clCreateSubDevices для частичной части некоторых ваших вычислительных ресурсов.

PDF, описывающий «деление устройства» от Intel, составляет here, и в нем есть много информации о том, как эффективно использовать разметку устройств и clCreateSubDevices.

+6

Возможность указать сродство нитей в OpenCL не так бесполезно, как кажется. В системах NUMA (например, multisocket Nehalem или системах AMD) миграция потоков с одного узла NUMA на другой почти наверняка приведет к доступу к нелокальной памяти, и это повредит производительности. Это должно быть до хорошего времени работы OpenCL для работы с базой. –