Tag: 超线程

OpenMP特定线程数急剧减速

我运行了一个OpenMP程序来执行Jacobi方法,它运行得非常好,2个线程执行略超过2x 1线程,4个线程比1个线程快2倍。 我觉得一切都很完美……直到我准确地达到了20,22和24个线程。 我一直把它分解,直到我有这个简单的程序 #include #include int main(int argc, char *argv[]) { int i, n, maxiter, threads, nsquared, execs = 0; double begin, end; if (argc != 4) { printf(“4 args\n”); return 1; } n = atoi(argv[1]); threads = atoi(argv[2]); maxiter = atoi(argv[3]); omp_set_num_threads(threads); nsquared = n * n; begin = omp_get_wtime(); while (execs < […]

C / C ++ / Assembly以编程方式检测Windows,Mac和Linux上的超线程是否处于活动状态

我已经可以在所有这三个平台上正确检测逻辑处理器的数量。 为了能够正确检测物理处理器/核心的数量,我必须检测是否支持超线程并且是否激活(或者如果您愿意,则启用),如果是,则将逻辑处理器的数量除以2以确定物理处理器的数量。 Perphaps我应该提供一个例子: 启用了超线程的四核Intel CPU具有4个物理内核,8个逻辑处理器(超线程创建4个逻辑处理器)。 所以我的当前函数将检测到8而不是所需的4。 因此,我的问题是,是否有办法检测是否支持超线程并启用?