gpt4 book ai didi

c# - 如何使我的 C# 代码更快地计算点积

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:21 25 4
gpt4 key购买 nike

我正在尝试用 C# 实现神经网络和深度学习代码。我教科书中的示例代码是用 Python 编写的,因此我正在尝试将它们转换为 C#。

我的问题是,使用 numpy 计算点积比我从头编写的 C# 代码快得多。

虽然我的 numpy 代码需要几秒钟来计算点积 1000 次,但我的 C# 代码比它花费的时间长得多。

这是我的问题。如何使我的 C# 代码更快?

这是 numpy 代码:

C:\temp>more dot.py
from datetime import datetime

import numpy as np

W = np.random.randn(784, 100)
x = np.random.randn(100, 784)

print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))

for i in range(0,1000):
np.dot(x, W)

print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))

C:\temp>\Python35\python.exe dot.py
2017/02/08 00:49:14
2017/02/08 00:49:16
C:\temp>

这是 C# 代码:

public static double[,] dot(double[,] a, double[,] b)
{
double[,] dot = new double[a0, b1];

for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < b.GetLength(1); j++)
{
// the next loop looks way slow according to the profiler
for (int k = 0; k < b.GetLength(0); k++)
dot[i, j] += a[i, k] * b[k, j];
}
}
return dot;
}

static void Main(string[] args)
{
// compatible function with np.random.randn()
double[,] W = random_randn(784, 100);
double[,] x = random_randn(100, 784);

Console.WriteLine(DateTime.Now.ToString("F"));
for (int i = 0; i < 1000; i++)
dot(W, x);
Console.WriteLine(DateTime.Now.ToString("F"));
}

问候,

最佳答案

Numpy 使用 BLAS 进行了极度优化。使用自己的代码可能不会获得如此好的性能。

虽然点积可以很好地并行化。您可以考虑使用多线程,但老实说,这不值得付出努力。只需寻找一个为您实现点积的库并使用它!

关于c# - 如何使我的 C# 代码更快地计算点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42094556/

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