You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

D语言中并行for循环及索引数组初始化的简化方法问询

D语言并行化与数组初始化优化解答

问题1:无需手动循环,初始化元素值等于索引的数组

当然有,D语言标准库的std.range.iota可以直接生成从0开始的连续整数范围,再通过array()方法转换为数组,完全替代手动循环初始化:

import std.range;

auto yRange = iota(imageHeight).array;

iota(n)默认生成从0到n-1的整数序列,正好对应数组的索引值,一步就能得到目标数组。

问题2:更简便的循环并行化方式

可以直接用范围配合std.parallelism.parallel实现类似C++ OpenMP的简洁写法,不需要先创建数组。正确的写法如下:

import std.parallelism;
import std.range;

foreach(y; parallel(iota(imageHeight)))
{
    // 内层循环与光线投射逻辑...
}

parallel可以直接接受iota生成的输入范围,自动将遍历任务并行化,写法和你期望的语法示例非常接近,而且比手动创建数组再并行更高效(省去了数组内存分配和填充的开销)。注意这里不需要ref修饰y,因为我们只是读取索引值,值传递足够用;如果需要修改共享数据,要额外注意线程安全。

内容的提问来源于stack exchange,提问作者David Frogley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:22:21