2010-07-29 47 views
5

Tôi muốn biết liệu có thể xác định bộ xử lý vật lý (lõi) được sử dụng bởi chuỗi có chỉ định chuỗi cụ thể không?Xác định bộ xử lý (lõi) được sử dụng theo chủ đề cụ thể

Ví dụ, tôi có một ứng dụng đa luồng có 2 luồng (threadid = 10 và threadid = 20 chẳng hạn). Tôi chạy ứng dụng trên một hệ thống có bộ xử lý lõi kép (lõi 1 và lõi 2). Vì vậy, làm thế nào để biết số lõi được sử dụng bởi thread với threadid = 20?

P.S. Nền tảng Windows.

Cảm ơn bạn,

Denis.

Trả lời

3

Trừ khi bạn sử dụng mối quan hệ chuỗi, chủ đề không được gán cho các lõi cụ thể. Với mỗi lát thời gian, luồng có thể được thực thi trên các lõi khác nhau. Điều này có nghĩa là nếu có một hàm để lấy lõi của một luồng, khi bạn nhận được giá trị trả về, có một cơ hội lớn là luồng đó đã thực thi trên một lõi khác.

Nếu bạn đang sử dụng mối quan hệ chuỗi, bạn có thể xem xét các chức năng liên quan đến chuỗi Windows (http://msdn.microsoft.com/en-us/library/ms684847%28v=VS.85%29.aspx).

+0

Cảm ơn bạn đã trả lời, Patrick! Vì vậy, một câu hỏi khác xuất hiện - liệu có thể biết được một chuỗi thời gian cụ thể chạy trên lõi cụ thể không? (ví dụ một số thread chạy 20% thời gian slice của nó trên core 1 và 80% slice time của nó chạy trên core 2) – DenisL

+0

Không phải là tôi biết về Denis. Những gì bạn có thể làm là giới hạn một luồng cho các lõi cụ thể (điều này được gọi là luồng-ái lực). Có lẽ bạn có thể chia quá trình của bạn thành nhiều luồng trong đó mỗi luồng được gán cho một lõi. Bạn có thể giải thích vấn đề ban đầu là gì không? (dẫn đến câu hỏi ban đầu của bạn) Có thể vấn đề của bạn có thể được giải quyết theo cách khác. – Patrick

+0

Tôi đã được giao nhiệm vụ tạo hai chức năng: 1. Hàm đầu tiên trả về tổng mức sử dụng bộ xử lý đa lõi theo id luồng cụ thể. Tôi đã thực hiện chức năng bằng cách sử dụng chức năng Counter Performance. 2. Hàm thứ hai trả về mức sử dụng lõi cụ thể theo id luồng cụ thể. Tôi không có ý tưởng làm thế nào để tạo ra các chức năng, có vẻ như nó là không thể. – DenisL

2

Có các chức năng được gọi là GetCurrentProcessorNumber (có sẵn từ Server 2003 và Vista) và GetCurrentProcessorNumberEx (có sẵn từ Server 2008 R2 và Windows 7).

Xem thêm this question's answers để biết thêm các tùy chọn liên quan và cân nhắc (bao gồm Windows XP - chủ yếu là this answer describing the use of cpuid instruction).

Tất nhiên số lõi có thể được thay đổi bất cứ lúc nào bởi bộ lập lịch vì vậy nếu bạn cần chắc chắn thì có lẽ nó sẽ giúp cho một số tiền hợp lý nếu bạn kiểm tra số lõi cả trước và sau cái gì bạn đo hoặc thực hiện trong một thời gian ngắn lượng thời gian và nếu số lõi vẫn giống nhau thì bạn biết chắc chắn mã trung gian nào cũng được thực thi.

Các vấn đề liên quan