我们可以在C#应用程序中设置两个线程或两个任务以执行不同的处理器关联吗?
我已经读过SetThreadAffinityMask但没有找到应该如何使用的例子.
或者,TPL(任务并行库)有没有办法执行两个线程/高优先级的任务来使用100%的CPU?
我需要将各种c/c ++进程固定到计算机上的特定核心,以便仅在Windows 7 64位上进行基准测试.我的机器有16个核心(2x8).我试图通过从给定进程的代码中调用SetProcessAffinityMask来做到这一点.假设这是正确的我不确定如何使用此功能.我已经看过文档,但我无法理解它对第二个参数需要的描述.我也没有在搜索过的SO或Google上找到任何c/c ++用例.
问题1:以16核机器(2cpux8)和ac/c ++项目为例,请您提供一个说明性示例,说明如何使用SetProcessAffinityMask来挑选16个核心中的每一个,以及对我理解的第二个参数的解释?如何将核心ID从0-15转换为等效的位掩码?
问题2:如果有2x8内核而不是一个cpu上的16个内核,它会对使用产生影响吗?或者是相同的用法?
非常感谢.这是我到目前为止所拥有的.
#include <Windows.h>
#include <iostream>
using namespace std;
int main () {
HANDLE process = GetCurrentProcess();
DWORD_PTR processAffinityMask = 0; /// What to do here?
BOOL success = SetProcessAffinityMask(process, processAffinityMask);
cout << success << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 编辑:< Matlab限制TBB但不限制OpenMP >我的问题与上面的问题不同,虽然使用相同的示例代码进行说明,但它并没有重复.在我的情况下,我在tbb初始化中指定了多个线程,而不是使用"deferred".另外我在谈论cx中TBB与TBM中TBB之间的奇怪行为.该问题的答案仅演示了在C++中运行TBB时的线程初始化,而不是在MEX中.
我正在尝试提升Matlab mex文件以提高性能.在mex中使用TBB时遇到的奇怪之处是TBB初始化不能按预期工作.
这个C++程序执行100%的cpu使用,并且在单独执行时有15个TBB线程:
main.cpp中
#include "tbb/parallel_for_each.h"
#include "tbb/task_scheduler_init.h"
#include <iostream>
#include <vector>
#include "mex.h"
struct mytask {
mytask(size_t n)
:_n(n)
{}
void operator()() {
for (long i=0;i<10000000000L;++i) {} // Deliberately run slow
std::cerr << "[" << _n << "]";
}
size_t _n;
};
template <typename T> struct invoker {
void operator()(T& it) const {it();}
};
void mexFunction(/* int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[] */) {
tbb::task_scheduler_init init(15); // 15 threads …Run Code Online (Sandbox Code Playgroud)