MOVE_PAGES () только эффективен в C ++Linux

Ответить
Anonymous
 MOVE_PAGES () только эффективен в C ++

Сообщение Anonymous »

Я пытаюсь написать коды Numa Aware, и я столкнулся с некоторым неожиданным поведением. Я решаю использовать move_pages (), чтобы проверить, создаю ли я правильное размещение NUMA, но результат очень запутан. < /P>

Код: Выделить всё

  for (int i = 0; i < V.size() * sizeof(int) / page_size; i++) {

int numaidx = i / page_per_numa;

status = V[i];
addr = dptr + i * (page_size / sizeof(int));
addr = page_start(addr, page_size);
if (move_pages(0, 1, &addr, &numaidx, &status, 0) == -1) {
perror("move_pages");
return 1;
}
move_pages(0, 1, &addr, NULL, &status, 0);
arr1[status] += 1;
}
for (int i = 0; i < V.size() * sizeof(int) / page_size; i++) {

int numaidx = i / page_per_numa;

status = V[i];
addr = dptr + i * (page_size / sizeof(int));
addr = page_start(addr, page_size);
move_pages(0, 1, &addr, NULL, &status, 0);
arr2[status] += 1;
}
У меня есть 4 область NUMA, а V - вектор с выравниваемым выравниванием до 4 КБ. dptr является указателем на данные v . и arr2 - это просто массивы, полные 0. Я явно перемещаю страницы в область NUMA, которую я хочу, и запрашиваю физическое размещение после хода. и программа работает на AMD EPYC 7662 с системой Linux Debian 12.
Ожидаемое поведение - ARR1 и arr2 должно быть точно так же. ARR1 идеально подходит, каждая страница - это то, где я хочу, чтобы она была, но ARR2 является катастрофой. Похоже, что 3/4 страниц выделяется в область NUMA, где находится основной поток. Я также попытался использовать OpenMP для второго цикла, чтобы увидеть, является ли это запуск доступа, а с или без OpenMP это дает мне тот же результат. и get_mempolicy () дает тот же результат. В чем причина этого?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... arily-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»