gpt4 book ai didi

c - 在没有并行编程的情况下优化 C 代码

转载 作者:太空宇宙 更新时间:2023-11-04 02:07:46 26 4
gpt4 key购买 nike

我写了一个C代码是

for(i=1;i<10000;i++)
x[i]=array1[h][x[i]^x[i-1]]

for(i=9999;i>0;i--)
x[i]=x[i-1]^array2[h][x[i]]

注意事项:

1- array1 和 array2 包含字节值

第二个循环执行与第一个循环相反的功能

3- h是一个字节值,在loop1和loop2中相同

我的问题是

第二个循环比第一个循环快,我理解这一点,因为在第一个循环中 x 中的每个值都取决于前一个字节 IE 的新值。要计算 x2,您必须计算 x1,而在第二个循环中,每个字节都取决于已经存在的前一个字节的旧值,IE。要计算 x9999,您需要 x9998 的旧值而不是新值,因此无需等待 x9999 的计算,这是如何在 C 代码中完成的,所谓的是并行编程,这意味着 C 语言对某些循环进行并行编程如果没有用户控制和编写这样的并行,那不是顺序的

问题是:为什么 2. 循环比 1. 循环快?

非常感谢

我是C代码初学者

抱歉这个问题太简单了

最佳答案

您的第一个循环取决于先前迭代的结果。这意味着,简单地说,处理器在完成 i=1 之前不能开始考虑 i=2,因为 x[2] 取决于 x[1]。但是,第二个循环不依赖于先前迭代的结果。

通过添加 -O3 标志(这是一个大写的“o”,而不是零)启用编译器优化可能会加速两个循环并使它们更接近相同的速度。有一些“手动”优化,例如循环矢量化或处理更广泛的数据类型,您仍然可以实现这些优化,但首先尝试使用 -O3 标志。如果您不知道如何执行此操作,请查看 IDE 的帮助文件以了解“编译器标志”。

也就是说,看起来您正在实现某种加密。事实上,这段代码看起来像是 RC4 等密码的精简版。如果那是你正在做的,我有一些警告要告诉你:

1) 如果您正在为生产代码编写加密,这取决于您的安全性,我建议您使用来自经过测试的知名库的东西,而不是自己编写,这样会更快、更安全.

2) 如果您正在为生产代码编写自己的加密算法(而不仅仅是“为了好玩”),请不要这样做。安全的算法比任何人都可以设计的任何算法都多,你自己动手不会有任何收获。

3) 如果您正在编写或实现一个有趣的算法,那就太好了!完成您的实现后,看看一些现实世界的实现,您可能会发现一些好主意。

关于c - 在没有并行编程的情况下优化 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18852001/

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