Кроме системы, которая просто не настроена должным образом, лучшим объяснением ужасной пропускной способности PCIe является несоответствие между IOH / сокетом и слотом PCIe, к которому подключен графический процессор.
Большинство Intel с несколькими сокетамиМатеринские платы класса i7 (Nehalem, Westmere) имеют один концентратор ввода / вывода на сокет.Поскольку системная память напрямую подключена к каждому ЦП, доступ к DMA, который является «локальным» (извлечение памяти из ЦП, подключенного к тому же IOH, что и у GPU, осуществляющего доступ DMA), намного быстрее, чем нелокальный (извлечение памяти из подключенного ЦПдля другой IOH - транзакция, которая должна быть выполнена через межсоединение QPI, связывающее два ЦП).
ВАЖНОЕ ПРИМЕЧАНИЕ: к сожалению, для SBIOS характерно конфигурировать системы для чередования, что вызывает непрерывное распределение памяти длячередоваться между розетками.Это смягчает потери производительности из-за локального / нелокального доступа для процессоров (один способ думать об этом: он делает все обращения к памяти одинаково плохими для обоих сокетов), но наносит ущерб доступу данных к графическому процессору, так как вызывает каждую другую страницу на-норозетная система должна быть нелокальной.
Похоже, что системы классов Nehalem и Westmere не страдают от этой проблемы, если система имеет только один IOH.
(Кстати, процессоры класса Sandy Bridgeсделайте еще один шаг по этому пути, интегрировав поддержку PCI Express в ЦП, поэтому в Sandy Bridge машины с несколькими сокетами автоматически имеют несколько IOH.)
Вы можете проверить эту гипотезу, выполнив тест с помощью инструмента.это прикрепляет его к сокету (numactl в Linux, если он доступен) или с помощью зависимого от платформы кода, чтобы управлять распределением и потоками для запуска на конкретном сокете.Вы можете многому научиться, не задумываясь - просто вызовите функцию с глобальными эффектами в начале функции main (), чтобы перегрузить все данные на тот или иной сокет, и посмотрите, сильно ли это повлияет на производительность передачи по PCIe.