英特尔 MKL 多线程矩阵向量乘法 sgemv() 稍作休息后变慢

问题描述 投票:0回答:0

我需要每 500 微秒运行一次多线程矩阵向量乘法。矩阵是一样的,向量每次都在变化。

我在 64 核 AMD CPU 上的 MKL 中使用英特尔的 sgemv()。如果我在一个小测试程序中计算一个没有间隙的 for 循环中的乘法,则每次调用 sgemv() 需要 20 微秒。如果我在 for 循环中添加一个需要大约 500 微秒的自旋循环(轮询 TSC),如果我使用 OMP_WAIT_POLICY=ACTIVE,每个 sgemv() 调用的时间增加到 30 微秒,并且 OMP_WAIT_POLICY=PASSIVE(默认值),它甚至长达 60 微秒。

有人知道会发生什么吗?为什么休息时间变慢了?可以做些什么来避免这种情况?

自旋循环是单线程的还是在“#pragma omp parallel”上下文中似乎没有什么区别。我是否让 AVX 单元在自旋循环中保持忙碌也没有区别。 CPU 核心是隔离的,测试程序以高优先级运行,并带有 SCHED_FIFO(在 Linux 上,这是)。

openmp blas intel-mkl amd-processor
© www.soinside.com 2019 - 2024. All rights reserved.