多项式乘法CilkPlus

时间:2013-11-03 18:37:52

标签: parallel-processing openmp cilk cilk-plus

我正在尝试使用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]
.....

1 个答案:

答案 0 :(得分:1)

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

调用输出系数c [k]。循环看起来像:

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

......需要是能够产生有助于每个输出系数的子部分的表达式。我有一个间歇性的互联网连接,所以我把它作为练习留给读者。

图书的下载网站(http://parallelbook.com/downloads)的递归版本比上面的方案渐近快。