【问题标题】:MKL Rectangular Matrix inplace transpose: not using multiple cores?MKL 矩形矩阵就地转置:不使用多核?
【发布时间】:2019-05-13 09:35:19
【问题描述】:

我想要一个非常大的矩阵的就地内存转置。我正在使用 mkl_simatcopy。但是我在就地转置时观察到一些性能问题。我目前正在使用 Intel(R) Xeon(R) CPU E7-8867 v4 @ 2.40GHz,具有 72 个物理内核和 RedHat OS。

我的观察是,当我执行转置操作时,只使用了单个核心,而不是使用所有核心。我已经尝试了所有环境变量,如MK_NUM_THREADSMKL_DYNAMIC="FALSE" 等。我的编译脚本如下:

gcc  -std=c99    -m64 -I $MKLROOT/include transpose.c  
${MKLROOT}/lib/intel64/libmkl_scalapack_ilp64.a -Wl,--start-group 
${MKLROOT}/lib/intel64/libmkl_cdft_core.a 
${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a 
${MKLROOT}/lib/intel64/libmkl_tbb_thread.a 
${MKLROOT}/lib/intel64/libmkl_core.a 
${MKLROOT}/lib/intel64/libmkl_blacs_openmpi_ilp64.a -Wl,--end-group  -lstdc++ -lpthread -lm -ldl -o transpose.out

得到的时间如下

斯诺。行列时间(秒)

1 16384 8192 16

2 16384 32768 68

3 32768 65536 233

数据类型是浮点数。请让我知道,如果有一种有效的就地转置方法或者我们如何将其移植到多个核心。

int main(int argc, char *argv[])
{

   unsigned long noOfScan = atol(argv[1]);

   unsigned long noOfPix = atol(argv[2]);

   size_t nEle = noOfScan * noOfPix;

   float *data = (float *)calloc(nEle, sizeof(float));
   initalizeData(data, noOfScan, noOfPix);
   //printdata(data,noOfScan,noOfPix);
   //writeDataFile((char *)data,"BeforeTranspose.img",nEle*sizeof(float));
   printf("After transpose \n\n");
   long nt = mkl_get_max_threads();
   printf("No Of threads are = %d \n", nt);
   //mkl_set_num_threads_local(nt);
   //mkl_set_num_threads(nt);
   double time1 = cpuSecond();
   mkl_simatcopy('R', 'T', noOfScan, noOfPix, 1, data, noOfPix, noOfScan);
   printf("Time elapsed is %lf \n", cpuSecond() - time1);
   memset(data, 0, nEle * sizeof(float));
   free(data);
}

【问题讨论】:

    标签: c++ c intel blas intel-mkl


    【解决方案1】:

    来自英特尔论坛的answermkl_simatcopy 不支持多线程。

    【讨论】:

      【解决方案2】:

      是的,这个例程没有线程化。在这种情况下,如果您确实需要对这个例程进行线程化,请向英特尔在线服务中心提交功能请求-https://supporttickets.intel.com/

      【讨论】:

        猜你喜欢
        • 2014-12-13
        • 1970-01-01
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多