none
C++ AMP矩阵运算 RRS feed

  • 问题

  • 大家好:

    我现在正在研究人工神经网络,想用C++AMP技术提高网络训练速度

    请问:C++ AMP并行计算中,参与运算的矩阵必须是维数一样的吗?

    假如我有三个数组,作为3x2的矩阵,想计算vC = vA + vB:
    1   2                              11    22
    3   4    +   10   20   =     13    24
    5   6                              15    26

    但是如例子所示,vB三行都是10 20,目前如果我想矩阵运算,还需要把10 20扩展为10 20  10 20  10 20,即

    1   2         10   20           11    22
    3   4    +   10   20   =     13    24
    5   6         10   20           15    26

    请问:能不能通过下标,直接用10 20参与计算??
    我下边的例子与预想不符。


    int vA[] = { 1,2,3,4,5,6 };
    int vB[] = { 10,20 };
    int vC[] = { 0,0,0,0,0,0 };
    
    int main()
    {
    	array_view<const int, 1> b(1, vB);
    	array_view<const int, 2> a(3, 2, vA);
    
    	array_view<int, 2> c(3, 2, vC);
    
    	c.discard_data();
    	parallel_for_each(c.extent, [=](index<2> idx) restrict(amp)
    	{
    		c[idx] = a[idx] + b(idx[1]);
    	});
    	c.synchronize();
    
    
        return 0;
    }

    2018年5月11日 1:40

答案

  • Hi,

    感谢在MSDN论坛发帖。

    >>请问:能不能通过下标,直接用10 20参与计算??
    我下边的例子与预想不符。

    你可以尝试利用array_view类和lambdas表达式来实现。

    这里有篇示例你可以参考一下。

    https://msdn.microsoft.com/en-us/library/hh873134.aspx

    希望对你有所帮助。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年5月11日 6:37

全部回复

  • Hi,

    感谢在MSDN论坛发帖。

    >>请问:能不能通过下标,直接用10 20参与计算??
    我下边的例子与预想不符。

    你可以尝试利用array_view类和lambdas表达式来实现。

    这里有篇示例你可以参考一下。

    https://msdn.microsoft.com/en-us/library/hh873134.aspx

    希望对你有所帮助。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年5月11日 6:37
  • Hi,

    感谢在MSDN论坛发帖。

    >>请问:能不能通过下标,直接用10 20参与计算??
    我下边的例子与预想不符。

    你可以尝试利用array_view类和lambdas表达式来实现。

    这里有篇示例你可以参考一下。

    谢谢,已经解决了,纯属代码写错了

    #include <amp.h>
    
    
    int vA[] = { 1,2,3,4,5,6 };
    int vB[] = { 10,20 };
    int vC[] = { 0,0,0,0,0,0 };
    
    int main()
    {
    	using namespace concurrency;
    
    	array_view<const int, 1> b(2, vB);
    	array_view<const int, 2> a(3, 2, vA);
    
    	array_view<int, 2> c(3, 2, vC);
    
    	c.discard_data();
    	parallel_for_each(c.extent, [=](index<2> idx) restrict(amp)
    	{
    		c[idx] = a[idx] + b(idx[1]);
    	});
    	c.synchronize();
    
    
        return 0;
    }


    2018年5月11日 8:12