我发现有时将一个循环划分为两个或更多循环会更快
for (i=0; i<AMT; i++) {
a[i] += c[i];
b[i] += d[i];
}
||
\/
for (i=0; i<AMT; i++) {
//a[i] += c[i];
b[i] += d[i];
}
for (i=0; i<AMT; i++) {
a[i] += c[i];
//b[i] += d[i];
}
Run Code Online (Sandbox Code Playgroud)
在我的桌面上,win7,AMD Phenom(tm)x6 1055T,双循环版本运行速度更快,时间缩短了约1/3.
但如果我正在处理任务,
for (i=0; i<AMT; i++) {
b[i] = rand()%100;
c[i] = rand()%100;
}
Run Code Online (Sandbox Code Playgroud)
将b和c的赋值分成两个循环并不比一个循环快.
我认为操作系统使用一些规则来确定某些代码是否可以由多个处理器运行.
我想问一下我的猜测是否正确,如果我是对的,那么多个处理器将自动(没有线程编程)用于加速我的程序的规则或场合是什么?
我正在 C/C++ 上实现 am 算法来处理一些向量,我认为使它并行可能是一个好主意,因为我正在使用多核 CPU。我对 GPGPU 有一些经验,内存访问不好会破坏整个性能,我是否还需要考虑 CPU 内核之间的任何特殊访问布局?
谢谢
我正在评估我的项目的网络+渲染工作负载。
程序连续运行一个主循环:
while (true) {
doSomething()
drawSomething()
doSomething2()
sendSomething()
}
Run Code Online (Sandbox Code Playgroud)
主循环每秒运行 60 多次。
我想查看性能故障,每个程序需要多少时间。
我担心的是,如果我打印每个程序的每个入口和出口的时间间隔,
这会导致巨大的性能开销。
我很好奇什么是衡量性能的惯用方法。
日志打印是否足够好?
如何使用swap更改数组的2行数据.我编写了基本的更改代码,但我希望通过将其更改为一行来提高性能(使用交换功能或类似于本页底部的内容).我的主要代码:
int i,j;
int A[50][4];
i=5;
j=21;
//line 5
int t1 = A[j][0];
int t2 = A[j][1];
int t3 = A[j][2];
int t4 = A[j][3];
A[j][0]=A[i][0] ;
A[j][1]=A[i][1] ;
A[j][2]=A[i][2] ;
A[j][3]=A[i][3] ;
A[i][0] = t1;
A[i][1] = t2;
A[i][2] = t3;
A[i][3] = t4;
//line 18
Run Code Online (Sandbox Code Playgroud)
我想要改变的地方:将第5-18行更改为以下之一:
A[i][] = A[j][];
Run Code Online (Sandbox Code Playgroud)
要么
swap (A[i] , A[j])
Run Code Online (Sandbox Code Playgroud)