【问题标题】:Polynomial multiplication CilkPlus多项式乘法 CilkPlus
【发布时间】:2013-11-03 18:37:52
【问题描述】:

我正在尝试使用 cilk_for 制作此代码的并行 cilk 代码:

c[0:2*n-1] = 0;
    for (size_t i=0; i<n; ++i) 
        c[i:n] += a[i]*b[0:n];

在序列号中:

for( size_t j=0; j<2*n-1; ++j )
        c[j] = 0; 
    for (size_t i=0; i<n; ++i) 
        for( size_t j=0; j<n; ++j )
            c[i+j] += a[i]*b[j];

例如:

x^2+x+1 
2x^2+3x+5 


C[0]=A[0]·B[0]
C[1]=A[0]·B[1]+A[1]·B[0]
.....

【问题讨论】:

  • 高效计算书的结构化并行编程模式示例

标签: parallel-processing openmp cilk cilk-plus


【解决方案1】:

最简单的方法是编写一个循环输出系数的 cilk_for 循环,并在循环内部为每个输出系数累积一个内积。

调用输出系数c[k]。循环将如下所示:

cilk_for( k=0; k<2n-1; ++k ) 
    c[k] = __sec_reduce( a[...:...]*b[...:...:-1] );

... 必须是产生对每个输出系数有贡献的子部分的表达式。我有一个间歇性的互联网连接,所以我把它作为练习留给读者。

这本书的下载站点 (http://parallelbook.com/downloads) 有一个递归版本,它比上述方案渐进地快。

【讨论】:

  • 我用这个代码测试: cilk_for(int k=0; k
  • 在下一节课老师解决问题,谢谢你的书对我们开始的学生来说很棒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2019-04-26
相关资源
最近更新 更多