gpt4 book ai didi

d - 为什么我的 D 代码将向量加起来 x4 比 C 慢?

转载 作者:行者123 更新时间:2023-12-01 08:55:02 25 4
gpt4 key购买 nike

我想知道为什么 D 代码这么慢?我最初使用 std.algorithm.sum 但性能更差。

我的 D 码:

import std.algorithm;
import std.stdio;

void main()
{
immutable int n = 10000000;
int[] v = new int[n];
fill(v,1);
int total = 0;

foreach (int i; 0 .. n) {
total += v[i];
}

writeln(total);
}

使用:

dmd -O arraysum.d

等效的C代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
const int n = 10000000;
int *v = malloc(n * sizeof(int));

for (int i = 0; i < n; ++i) {
v[i] = 1;
}

int total = 0;
for (int i = 0; i < n; ++i) {
total += v[i];
}

printf("%d\n", total);
free(v);
return 0;
}

内置:

clang -O3 -o csum arraysum.c

最佳答案

您可以使用 std.array 中的 uninitializedArray 提高速度,并直接在数组上使用 foreach:

import std.algorithm;
import std.stdio;
import std.array;

void main()
{
immutable int n = 10000000;
auto v = uninitializedArray!(int[])(n);
fill(v, 1);
int total = 0;

foreach (i; v) {
total += i;
}

writeln(total);
}

你应该使用 -release -inline -n​​oboundscheck 参数

对我来说,使用 dmd 会慢 2 倍,但使用 ldmd2(ldc) 或 gdc 的速度与 C 版本相同

关于d - 为什么我的 D 代码将向量加起来 x4 比 C 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28693479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com