none
Debug编译时含有的C++ AMP代码不工作 RRS feed

  • 问题

  • 示例代码如下:

     int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
     array_view<int, 1> ax(10, a);
     parallel_for_each(ax.extent, [=](index<1> idx) restrict(amp)
     {
      ax[idx] += 5;
     });

    编译环境:Win7 + VS2012

    Release编译,执行结果正确

    Debug编译,在GPU调试环境下执行结果正确,在CPU调试环境或直接执行时,结果错误(所有值没有变化)。

    哪位能告知原因,不胜感激~

    2013年10月18日 9:11

答案

  • 你好,

    你具体如何用GPUCPU进行调试的?有一些细节点的处理请你参照这个链接: http://msdn.microsoft.com/en-us/library/hh368280.aspx

    检查一下。

    其次,有关键字restrict(amp)的函数,不能被标有restrict(cpu)的函数调用,你是否有这样的错误使用,从而影响了结果。对此,这个链接中有讲到http://blog.csdn.net/augusdi/article/details/11800603

    关于C++ AMP 更深入的讲解可以参阅这个链接,其中也部分讲到了parallel_for_each

    http://www.csdn.net/article/a/2012-08-22/2808959

    根据你的部分代码,我做了测试,GPUCPU结果是一致的。我的环境是VS2012+win8.1

    #include <tchar.h>
    #include <iostream>
    #include <amp.h>
    #include <array>
    
    using namespace concurrency;
      
    int main(){
    int a[10,] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    array_view<int, 1> ax(10, a);
    parallel_for_each(ax.extent, [=](index<1> idx) restrict(amp)
      {
       ax[idx] += 5;
      });
    
      for(int i=0; i<10;i++)
    	 std::cout<<ax[i];
    
      getchar();
      return 0;
    }
    

    希望对你有帮助!

    Best Wishes,

    May


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年10月21日 9:17
  • 谢谢!

    我的测试结果,发现该问题出现在:Win7+VS 2012和Win8+VS2012

    把Win8更新的Win8.1后,该问题消失。

    我觉得这可能是Win7和Win8的BUG,在Win8.1中有修复,可这个时间也拖太久了点,不知道是否我的环境或配置什么的其它原因导致。

    知道的话,请回复下~

    2013年10月25日 7:12

全部回复

  • 你好,

    你具体如何用GPUCPU进行调试的?有一些细节点的处理请你参照这个链接: http://msdn.microsoft.com/en-us/library/hh368280.aspx

    检查一下。

    其次,有关键字restrict(amp)的函数,不能被标有restrict(cpu)的函数调用,你是否有这样的错误使用,从而影响了结果。对此,这个链接中有讲到http://blog.csdn.net/augusdi/article/details/11800603

    关于C++ AMP 更深入的讲解可以参阅这个链接,其中也部分讲到了parallel_for_each

    http://www.csdn.net/article/a/2012-08-22/2808959

    根据你的部分代码,我做了测试,GPUCPU结果是一致的。我的环境是VS2012+win8.1

    #include <tchar.h>
    #include <iostream>
    #include <amp.h>
    #include <array>
    
    using namespace concurrency;
      
    int main(){
    int a[10,] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    array_view<int, 1> ax(10, a);
    parallel_for_each(ax.extent, [=](index<1> idx) restrict(amp)
      {
       ax[idx] += 5;
      });
    
      for(int i=0; i<10;i++)
    	 std::cout<<ax[i];
    
      getchar();
      return 0;
    }
    

    希望对你有帮助!

    Best Wishes,

    May


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年10月21日 9:17
  • 谢谢,还是没找到原因啊,有空我会仔细研究下的~

    附个调试时断点处的截图(没有手动修改过任何变量):

    2013年10月22日 9:04
  • 你好,

    我完全按照你的代码又试了一遍,这是我的截图,供你参考:


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年10月23日 1:43
  • 谢谢!

    我的测试结果,发现该问题出现在:Win7+VS 2012和Win8+VS2012

    把Win8更新的Win8.1后,该问题消失。

    我觉得这可能是Win7和Win8的BUG,在Win8.1中有修复,可这个时间也拖太久了点,不知道是否我的环境或配置什么的其它原因导致。

    知道的话,请回复下~

    2013年10月25日 7:12
  • 你好,

    谢谢你的总结回复。我们实验的结果确实是win8.1不存在问题,至于为什么会这样我也不是很清楚,你可以到windows相关论坛咨询一下,我想他们应该有专家可以帮你解答的。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年10月28日 9:16
  • 好的,多谢~
    2013年10月30日 2:27