学习 D 并实现光线/路径追踪器算法来巩固学习。我想并行投射光线,所以这就是目前我的外部 for 循环并行化的方式:
auto yRange = new int[](imageHeight);
for (auto i = 0; i < imageHeight; ++i)
{
yRange[i] = i;
}
foreach(ref y; parallel(yRange))
{
// Inner loop and ray casting...
}
那么两个问题:
#pragma omp parallel for
for (auto y = 0; y < imageHeight; ++y)
{
// ...
}
也许有某种方法可以使用范围来代替?类似于(语法明显错误)
foreach(ref y; parallel(0..imageHeight))
{
// ...
}
我找到了一种更简单的方法来从范围创建数组:
import std.range;
auto yRange = iota(0, imageHeight).array;
所以这很有帮助。