我正在尝试做的是使用这个C代码并使用一种称为循环展开的技术对其进行优化,但在这种情况下,我想使用四向循环展开.现在,我理解了这项技术,并且我理解了我不知道如何将其应用于此代码的概念.我是否需要添加一些额外的变量?在每个循环之后或者只是在所有循环结束时,我是否必须有一些代码?此代码是8x8块代码,用于处理像素并逆时针旋转90度.任何帮助将不胜感激.谢谢.
/*
* rotate8 - rotate with 8x8 blocking
*/
char rotate8_descr[] = "rotate8: rotate with 8x8 blocking";
void rotate8(int dim, pixel *src, pixel *dst)
{
int i, j, ii, jj;
for(ii = 0; ii < dim; ii += 8)
for(jj = 0; jj < dim; jj += 8)
for (i = ii; i < ii + 8; i++)
for (j = jj; j < jj + 8; j++)
dst[RIDX(dim-1-j, i, dim)] = src[RIDX(i, j, dim)];
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试做的是采取这个代码:
char naive_smooth_descr[] = "naive_smooth: Naive baseline implementation";
void naive_smooth(int dim, pixel *src, pixel *dst)
{
int i, j;
for (i = 0; i < dim; i++)
for (j = 0; j < dim; j++)
dst[RIDX(i, j, dim)] = avg(dim, i, j, src);
}
Run Code Online (Sandbox Code Playgroud)
并使用avg(dim, i, j, src);页面最底部的实际代码替换函数调用.然后,获取该代码并将该代码中的所有函数调用替换为实际代码等.
如果你问为什么要做这一切,原因很简单:当你摆脱函数调用时,程序运行得更快,并且当上面的代码运行时,我试图通过去掉所有的元素来获得每个元素的最快周期函数调用并用实际代码替换它.
现在我真的只是在做这件事时遇到了很多麻烦.我是否使用括号代码然后复制并粘贴?我是否遗漏了括号?例如,我是否包含代码的开头,static pixel avg(int dim, int i, int j, pixel *src)然后是括号,然后是代码来替换函数调用?
我将在这里粘贴所有代码:
/* A struct used to compute averaged pixel value */
typedef struct {
int red;
int …Run Code Online (Sandbox Code Playgroud) 现在我对每个人都有一个问题......我一直在盯着这几天进行修补和玩耍,但即便如此,我最终也会遇到大量错误......
我正在尝试做的是采取下面的程序并更改它,以便它需要一个可选的命令行参数infile.如果给出了infile,则将infile复制到标准输出,否则将标准输入复制到标准输出.
关于这一点的诀窍是解决方案必须使用原始复制循环(第9-11行)来处理这两种情况.人们只能插入代码,而不能更改任何现有代码.任何帮助都会很棒.谢谢.
/* $begin cpfile */
include "csapp.h"
int main(int argc, char **argv)
{
int n;
rio_t rio;
char buf[MAXLINE];
Rio_readinitb(&rio, STDIN_FILENO); //line 9
while((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0) //line 10
Rio_writen(STDOUT_FILENO, buf, n); //line 11
/* $end cpfile */
exit(0);
/* $begin cpfile */
}
/* $end cpfile */
Run Code Online (Sandbox Code Playgroud) 我想要做的是我有一个读取数字的程序,该数字表示有多少单词,例如:
3
red
blue
green
Run Code Online (Sandbox Code Playgroud)
然后以相反的顺序打印出相同的文本,这样就可以了
green
blue
red
Run Code Online (Sandbox Code Playgroud)
然后是一个空行,向服务器指示您已完成该特定问题.但我似乎在我的代码中有一个错误.
我试图将单词存储在数组列表中.我使用for循环将它们存储在列表中,然后以相反的顺序打印出来,我只是以相反的方式使用另一个循环,从列表的末尾开始到开头.
当我从命令提示符运行程序时,它只是进入下一个命令提示行,就像我编译程序一样,没有错误但是当我做了测试时,使用我创建的测试程序,似乎程序读取数字,然后去打印出一个空白数组.
似乎来自服务器的单词不会存储在数组中,我不确定我做错了什么.我不是最伟大的程序员,所以任何帮助都会非常感激.
代码:
import java.io.*;
import java.util.*;
public class Solution
{
public static void run(BufferedReader in, PrintWriter out)
throws IOException
{
int x = Integer.parseInt(in.readLine());
while(x != 0)
{
ArrayList num = new ArrayList();
for(int i = 0; i < num.size(); i++)
{
//String f = in.readLine();
num.add(in.readLine());
}
//System.out.println(num);
for(int i = num.size()-1; i > 0; i--)
{
out.println(num.get(i));
//x = Integer.parseInt(in.readLine());
System.out.println();
}
break;
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用此代码...
char mysmooth1_ descr[] = "my smooth1: My smooth1 replaced avg() func. and assign sum to pixel";
void mysmooth1 (int dim, pixel *src, pixel *dst)
{
int i, j;
int ii, jj;
pixel_ sum sum;
pixel current_ pixel;
for (i = 0; i < dim; i++)
for (j = 0; j < dim; j++)
{
initialize_pixel_sum(&sum);
for(ii = max(i-1, 0); ii <= min(i+1, dim-1); ii++)
for(jj = max(j-1, 0); jj <= min(j+1, dim-1); jj++)
accumulate_sum(&sum, src[RIDX(ii, jj, dim)]);
{
current_ …Run Code Online (Sandbox Code Playgroud)