ArrayFire Memcpy

时间:2015-11-07 00:51:20

标签: c++ performance arrayfire

我有一个与ArrayFire库有关的问题和内存的使用。我用普通的CUDA / C实现了一些程序,使用ArrayFire实现了相同的程序,而CUDA / C程序要快得多(比使用ArrayFire快5倍)。

我用两者检查Nvidia分析器,我看到的主要区别是memcpy操作,在ArrayFire的情况下有很多Memcpy操作,在另一种情况下只是程序开始时的一些。做一些测试我发现做了类似的事情:

f = f*q;

成为f,q数组会产生更多此memcpy调用...我认为这就是为什么我的ArrayFire代码表现不佳的原因。为什么会这样?从哪里来,所有这些Memcpys?我怎么能避免它? ***** //编辑////  代码片段

void Adveccion(){
  for(int i = 0; i< q ; i++){
    f(span,span,span,i) = shift( f(span,span,span,i) , V[1][i] , V[0][i] , V[2][i] );
  }
}

f是一个四维数组。我在其他for循环中有这个功能。如果我修改功能如:

void Adveccion(){
  for(int i = 0; i< q ; i++){
    shift( f(span,span,span,i) , V[1][i] , V[0][i] , V[2][i] );
  }
}

剖析器没有显示memcpys的大量使用。认为我的问题是找到给阵列分配新值的正确方法......也许使用A = B,不是最好的,但我还有很多需要学习的东西......

感谢您的关注,如果您需要更多代码来帮助我,请告诉我。谢谢 !

0 个答案:

没有答案