我可以明确地调用restrict(amp)callable,确保它可以在加速器上运行

时间:2015-05-10 18:01:38

标签: c++ visual-c++ gpu c++-amp

我有:

SHELL:=/bin/bash -O globstar
list:
  @echo Flac: $(shell ls flac/**/*.flac)
  @echo MP3: $(shell ls mp3/**/*.mp3)

现在,如果我这样做:

void foo() restrict(amp)
{
}

它会在加速器上运行吗?如果不是,如何在不使用void main() { foo(); } 循环的情况下在加速器中运行foo()

1 个答案:

答案 0 :(得分:1)

这不是真正合法的代码。 foo()标记为restrict(amp),这意味着它只能在C ++ AMP内核中运行。标记为restrict(amp)的函数只能通过加速运行的代码调用,换言之,也可以从parallel_for_each lambda restrict(amp)

中调用
void foo() restrict(amp)
{
}

void main() 
{
    parallel_for_each(e, [=](index<2> idx) restrict(amp)
    {
       foo()
    });
}

如果您将foo()标记为restrict(amp,cpu),那么您也可以从CPU调用它,前提是foo()内的代码符合AMP和CPU代码的要求。