Начнем с того, что *.foo-файла нет. Что делает make, так это ищет, как сделать *.foo
буквально, и первое правило делает это. Make расширяет $<
до первого пререквизита -(*.bar
, которым в данном случае является b.bar
). Затем Make запускает команду оболочки cp b.bar *.foo
. Поскольку *.foo отсутствует, оболочка буквально расширяет его до cp b.bar *.foo
. Вот как вы получаете файл *.foo
.
Вы можете проверить это, запустив make -d test
.
Вы можете получить желаемый эффект, создав список целей на основе списка предварительных требований.
TARGETS = $(patsubst %.bar,%.foo,$(wildcard *.bar))
%.foo: %.bar
@cp $< $@
test: $(TARGETS)
@echo $(TARGETS)
echo *.foo
¿Qué CPU estás usando? ¿Cuántos hilos presentes por núcleo físico?
cat /proc/cpuinfo
muestra el número de núcleos físicos, mientras que top
muestra el número total de subprocesos presentes.
Creo que su CPU tiene 4 núcleos físicos y 2 núcleos lógicos por núcleo físico. Así que top
muestra 8.
Además, el contenido de /proc/cpuinfo
depende en cierta medida de la implementación. Al igual que en el shell de Android rooteado, el archivo cpuinfo
no contiene ningún término cpu cores
.
Sin embargo, en cpuinfo
cada subproceso se nombra como processor : X
, donde X
es el subproceso no. Entonces, el último hilo no será el mismo que la salida top/htop
.
El resultado de nproc --all
también será consistente contop/htop
cpuinfo muestra los núcleos reales, mientras que htop/top muestra tanto los núcleos como los subprocesos como núcleos. Lo más probable es que tenga 4 núcleos y 4 subprocesos, por eso.
top
muestra una "CPU" por CPU lógica; en x86, ese es el producto de la cantidad de sockets en el sistema, por la cantidad de núcleos físicos por socket, por la cantidad de subprocesos por núcleo.
La entrada cpu cores
en /proc/cpuinfo
, nuevamente en x86, muestra la cantidad de núcleos físicos. Para encontrar el número de núcleos lógicos, como se usa en top
, debe mirar el valor siblings
en lugar de:
cat /proc/cpuinfo | grep "siblings" | uniq
Esto se describe en detalle en la documentación del kernel .
lscpu
proporciona información sobre la CPU instalada (s )que es más fácil de entender que/proc/cpuinfo
(o mejor dicho, presenta la misma información de una manera más simple ).
Probablemente, tiene una CPU que es una CPU de "cuatro núcleos" y tiene hiperprocesamiento habilitado para que cada núcleo físico se presente al sistema operativo (al kernel )como dos lógicos núcleos, capaz de tener dos subprocesos asignados a ese mismo núcleo físico simultáneamente.
Los términos clave que debe comprender aquí son :CPU, o chip físico, o "morir" (se relaciona con "socket" ); luego, núcleo físico; luego asegúrese de comprender el "proceso" y el "hilo"; luego aclare "hyperthreading" y "núcleo lógico".
Asistí a una charla en LISA 2017 que aclaró todo muy bien; las diapositivas de esa charla están disponibles en línea , aunque por supuesto no ayudarán tanto como la charla real (ya que falta la parte hablada ).
El X5560 es un único chip . Se parece a esto:
grep "physical id"
le dice que tiene UN procesador físico instalado.
Si quita el disipador de calor de la parte superior, puede ver este -un único dado físico (boca abajo):
Si pudieras quitar ese dado y darle la vuelta, se vería así:
En ese único troquel físico hay cuatro núcleos físicos de CPU integrados en el silicio:
grep "cpu cores"
le dice que su procesador tiene cuatro núcleos físicos incorporados.
Cada núcleo es un solo procesador con una unidad de punto flotante, varias unidades de ejecución de enteros, un par de pilas de registros y alguna otra magia que permite que cada núcleo único ejecute efectivamente dos flujos de instrucciones independientes (subprocesos )a la vez.
top
le dice que todos los procesadores y núcleos de su computadora, en conjunto, pueden ejecutar ocho flujos de trabajo independientes a la vez. -le dice que el sistema operativo puede programar ocho subprocesos simultáneos para su ejecución en un momento dado.