什么是 "for to by" 循环?
What is a "for to by" loop?
我正在尝试为我的并行编程 class 执行此矩阵乘法分配,但我不明白我的教授在伪代码中使用这个“for to by”循环是什么意思。更具体地说,为什么“by”在那里,我如何将它翻译成代码?我正在使用 C.
这是他希望我编写的循环,作为此作业的一部分:
变量 A、B 和 C 是我定义的二维数组。 n是两个n乘n的矩阵相乘的大小,我不知道“by”语句后的变量s应该是什么。
//Loop 3
for it = 1 to n by s do
for kt = 1 to n by s do
for jt = 1 to n by s do
for i = it to min(it+s-1, n) do
for k = kt to min(kt+s-1, n) do
for j = jt to min(jt+s-1, n) do
C[i,j] = C[i,j] + A[i,k] x B[k,j]
endfor
endfor
endfor
endfor
endfor
endfor
by
是迭代变量每次递增的量。在 C 中,您将使用 it += s
。这称为 step 或 stride。
for (int it = 1; it <= n; it += s) { // for it = 1 to n by s do
// body of loop
}
如果您省略 by s
,则假定它递增 1
,您将使用 it++
.
请注意,在 C 中,数组索引从 0
开始,而不是 1
。所以循环实际上是
for (int it = 0; it < n; it += s)
我正在尝试为我的并行编程 class 执行此矩阵乘法分配,但我不明白我的教授在伪代码中使用这个“for to by”循环是什么意思。更具体地说,为什么“by”在那里,我如何将它翻译成代码?我正在使用 C.
这是他希望我编写的循环,作为此作业的一部分: 变量 A、B 和 C 是我定义的二维数组。 n是两个n乘n的矩阵相乘的大小,我不知道“by”语句后的变量s应该是什么。
//Loop 3
for it = 1 to n by s do
for kt = 1 to n by s do
for jt = 1 to n by s do
for i = it to min(it+s-1, n) do
for k = kt to min(kt+s-1, n) do
for j = jt to min(jt+s-1, n) do
C[i,j] = C[i,j] + A[i,k] x B[k,j]
endfor
endfor
endfor
endfor
endfor
endfor
by
是迭代变量每次递增的量。在 C 中,您将使用 it += s
。这称为 step 或 stride。
for (int it = 1; it <= n; it += s) { // for it = 1 to n by s do
// body of loop
}
如果您省略 by s
,则假定它递增 1
,您将使用 it++
.
请注意,在 C 中,数组索引从 0
开始,而不是 1
。所以循环实际上是
for (int it = 0; it < n; it += s)