Marwan Abd Ellah, le Tue 13 Mar 2012 11:33:18 +0100, a écrit :
> I was using the HWLoc library v 1.4.1 for getting a cpuset of the socket
> connected to a certain PCI device (mainly GPU). When I was trying to print the
> topology tree I got the following
> Machine#0(12GB)
> Socket#0
> L3(12MB)
> L2(256KB)
> L1(32KB)
> Core#0
> PU#0
> PU#6
> L2(256KB)
> L1(32KB)
> Core#1
> PU#1
> PU#7
> L2(256KB)
> L1(32KB)
> Core#2
> PU#2
> PU#8
> L2(256KB)
> L1(32KB)
> Core#8
> PU#3
> PU#9
> L2(256KB)
> L1(32KB)
> Core#9
> PU#4
> PU#10
> L2(256KB)
> L1(32KB)
> Core#10
> PU#5
> PU#11
> HostBridge#0
> PCIBridge#16
> PCI 1b4b:9123#4096
> Block
> Block
> PCIBridge#48
> PCI 10de:1086#12288
> PCI 8086:10ce#400
> Net
> PCIBridge#452
> PCI 197b:2363#20480
> PCI 197b:2363#20481
> PCI 8086:3a20#498
> Block
> PCI 8086:3a26#501
>
> This means that the Socket30 and the HostBridge#0 are at the same level
> (hwloc_obj_t->depth), but fetching this parameter for each object, I have a
> correct value for the Socket which is 1 and "-3" for the host bridge. Do you
> have a clue about this?
The depth is not exactly the same as the tree depth, even for CPUs, for
instance you could have such heterogeneous case:
Machine
Socket
L3
L2
L1
core
L1
core
Socket
L2
L1
core
hwloc will make sure that all L2 caches have the same depth value, even
if in the tree they don't.
In the case of PCI devices, we just put them aside on completely
separate depths, so that applications can continue using depths as an
orthogonal way to address CPU objects.
Samuel
|