有没有更简单的方法在 D 中进行并行 for 循环

问题描述 投票:0回答:1

学习 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...
}

那么两个问题:

  1. 有没有一种更简单的方法来初始化 D 中的数组,其中每个元素都是其索引的值,而不使用第一个 for 循环?
  2. 有没有更简单的方法来并行化 for 循环?例如,在 C++ 中我可以使用 OpenMP:
#pragma omp parallel for
for (auto y = 0; y < imageHeight; ++y)
{
    // ...
}

也许有某种方法可以使用范围来代替?类似于(语法明显错误)

foreach(ref y; parallel(0..imageHeight))
{
    // ...
}
for-loop parallel-processing range d
1个回答
0
投票

我找到了一种更简单的方法来从范围创建数组:

import std.range;
auto yRange = iota(0, imageHeight).array;

所以这很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.