我在实验室工作并使用std::thread
在C ++ 11上编写了多线程计算程序。现在我有机会在多CPU服务器上运行我的程序。
服务器:
我对多CPU编程一无所知。第一个想法,我想到了运行40个应用程序然后将它们的结果粘合在一起。这是可能的,但我想更多地了解我的机会。
谢谢!
答案 0 :(得分:5)
如果您的程序运行多线程,您的操作系统应该自动关注它使用可用的CPU。
确保将您必须完成的工作分配给可以使用的CPU的相同数量的线程。确保它不仅仅是一个执行工作的线程,而其他线程只是在等待此线程的终止。
答案 1 :(得分:0)
你的问题不仅仅是关于多线程,而是关于多CPU。
基本上,操作系统会自动在核心上分散线程。你不需要做任何事情。
使用C ++ 11后,您可以调用enum memberTypes
{
None,
Property,
Method
}
class memberInfo {
memberName: string;
memberType: memberTypes;
constructor(name: string, mtype: memberTypes)
{
this.memberName = name;
this.memberType = mtype;
}
toString() {
return JSON.stringify(this);
}
}
class propertyInfo extends memberInfo
{
constructor(name: string)
{
super(name, memberTypes.Property);
}
}
class methodInfo extends memberInfo
{
constructor(name: string)
{
super(name, memberTypes.Method);
}
}
var dict = new Object();
var objectArray = new Array<memberInfo>();
objectArray.push(new propertyInfo("Name"), new methodInfo("toString"));
objectArray.forEach((item) => {
if (item.memberType === memberTypes.Property)
{
if (item.memberName === "Name") {
dict[item.memberName] = 'SysName';
}
} else if (item.memberType === memberTypes.Method) {
if (item.memberName === "toString") {
dict[item.memberName] = function() { return JSON.stringify(this); };
}
}
console.log(item.toString());
})
console.log(dict);
并识别不同的线程,但无法识别您正在使用的核心。直接使用std::thread::get_id()
+“cpu affinity”。
您可以谷歌搜索“CPU亲和力”,了解有关如何控制它的更多详细信息。如果你想要这种精度。您可以识别核心以及选择核心...您可以从这开始:http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html