GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Anda bisa menemukan nomor prosesor tempat utas berjalan?

Untuk XP, google cepat mengungkapkan ini:

https://www.cs.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm Apakah ini membantu?


Jika semua yang ingin Anda lakukan adalah menghindari pertikaian, Anda tidak perlu mengetahui CPU saat ini. Anda bisa memilih tumpukan secara acak. Atau Anda bisa memiliki tumpukan per utas. Meskipun Anda mungkin mendapatkan lebih banyak atau lebih sedikit pendapat seperti itu, Anda akan menghindari overhead polling CPU saat ini, yang mungkin atau mungkin tidak signifikan. Lihat juga scalable_allocator Intel Thread Building Block, yang mungkin telah memecahkan masalah itu lebih baik daripada Anda.


Dari keluaran man sched_getcpu :

NAME
       sched_getcpu - determine CPU on which the calling thread is running

SYNOPSIS
       #define _GNU_SOURCE
       #include <utmpx.h>

       int sched_getcpu(void);

DESCRIPTION
   sched_getcpu() returns the number of the CPU
   on which the calling thread is currently executing.

RETURN VALUE
   On success, sched_getcpu() returns a non-negative CPU number.
   On error, -1 is returned and errno is set to indicate the error.

SEE ALSO
   getcpu(2)

Sayangnya, ini khusus untuk Linux. Saya ragu ada cara portabel untuk melakukan ini.


Selain jawaban Antony Vennard dan kode di situs yang dikutip, berikut adalah kode yang juga akan berfungsi untuk Visual C++ x64 (tanpa assembler inline):

DWORD GetCurrentProcessorNumberXP() {
   int CPUInfo[4];   
   __cpuid(CPUInfo, 1);
   // CPUInfo[1] is EBX, bits 24-31 are APIC ID
   if ((CPUInfo[3] & (1 << 9)) == 0) return -1;  // no APIC on chip
   return (unsigned)CPUInfo[1] >> 24;
}

Sekilas implementasi GetCurrentProcessorNumber() pada Win7 x64 menunjukkan bahwa mereka menggunakan mekanisme yang berbeda untuk mendapatkan nomor prosesor, tetapi dalam (beberapa) pengujian saya hasilnya sama untuk buatan sendiri dan fungsi resmi.


Linux
  1. Bagaimana Anda bisa menentukan versi terinstal dari pustaka glibc?

  2. Bagaimana saya bisa melihat inti CPU mana yang menjalankan utas?

  3. Bisakah ID utas dari proses multithreaded sama dengan ID proses dari proses lain yang sedang berjalan?

  1. Bagaimana saya bisa mengetahui jalur absolut dari proses yang sedang berjalan?

  2. Bagaimana saya bisa menghitung jumlah folder di drive menggunakan Linux?

  3. Bagaimana saya bisa menemukan file terlama di pohon direktori

  1. Cara Menemukan Proses Berjalan Teratas berdasarkan Memori dan Penggunaan CPU

  2. Bagaimana Menemukan Jumlah Garis Vertikal Yang Tersedia Di Terminal?

  3. Bagaimana saya bisa mengatur afinitas prosesor dari suatu proses di Linux?