You can know about each processor core by examining each cpuinfo entry:
processor : 0 [...] physical id : 0 siblings : 8 core id : 0 cpu cores : 4 apicid : 0 processor : 1 [...] physical id : 0 siblings : 8 core id : 1 cpu cores : 4 apicid : 2 processor : 2 [...] physical id : 0 siblings : 8 core id : 2 cpu cores : 4 apicid : 4 processor : 3 [...] physical id : 0 siblings : 8 core id : 3 cpu cores : 4 apicid : 6 processor : 4 [...] physical id : 0 siblings : 8 core id : 0 cpu cores : 4 apicid : 1 [and so on] physical id shows the identifier of the processor. Unless you have a multiprocessor setup (having two separate, physical processor in a machine), it will always be 0.
siblings show the number of processor attached to the same physical processor.
core id show the identifier of the current core, out to a total of cpu cores. You can use this information to correlate which virtual processor goes into a single core.
acpiidapicid (and original acpiidapicid) show the number of the (virtual) processor, as given by the bios.
Note that there 8 siblings and 4 cores, so there is 2 virtual processor per core. There is no distinction between "virtual" or "real" in hyperthreading. butBut using this information you can associate which processors are from the same core.