【超算/先进计算学习】日报2

news2024/11/18 9:46:58

目录

  • 今日已完成任务列表
  • 遇到的问题及解决方案
  • 任务完成详细笔记
    • 编辑器Vim
      • 程序开发步骤
      • 文件编辑器 Vim 快速入门
      • 任务练习
    • 编译器 GCC
      • 程序编译流程
      • 编译器 gcc 的简易使用
      • gcc 编译链接命令规则及常用编译选项
    • 工程构建工具 Make
      • make 命令与makefile文件的规则和逻辑
      • makefile 文件编写案例
      • 填空练习
  • 对自己的表现是否满意
  • 简述下次计划
  • 其他反馈

今日已完成任务列表


4-2、编辑器Vim、编译器GCC、工程构建工具Make

遇到的问题及解决方案


对练习代码进行编译时使用如下指令:

gcc -o main main.cpp

将会报错:

xxx:xxx: undefined reference to `operator new[](unsigned int)'…

解决方案:
因为写的是 C++ 程序😅

g++ -o main main.cpp

任务完成详细笔记


编辑器Vim

程序开发步骤

程序开发:将人类想要计算执行的工作按照计算机所支持的方式流程化、格式化、系统化的,使用编译器支持的开发语言组织成文,并由编译器翻译成机器码供计算机执行
C/C++ 程序开发一般包含以下步骤:

  • 明确任务需求或目标
  • 算法设计
  • 编码源文件(通过编辑器 Vim 编写)
  • 编译二进制文件(通过编译器 GCC 完成)
  • 运行二进制文件(通过任务管理系统 slurm 运行计算任务)
  • 调试程序(debug)

文件编辑器 Vim 快速入门

  • 命令行式编辑器:Vim(通过终端对文件进行查看、编写和保存)
vim [filename]

在这里插入图片描述

  • Vim 编辑环境下的三种常用模式
    • 普通模式(冒号 ’ :')

移动
方向键
:1 快速跳转到文件第1行
:$ 快速跳转到文件最后一行

退出
w (保存)、q (退出)、! (强制)
:wq 保存文件并退出 Vim
:q! 强制退出,不保存修改

替换
s,:[addr]s/源字符串/目的字符串/[option]
全局替换:
%s/源字符串/目的字符串/g
2,10s/源字符串/目的字符串/g

例如:在使用vim编辑文件 cal_pi.cpp 时 ,若要把第 20 至 30 行代码中的 val_pi 字符串,一次性全部替换成 pi_value ,需键入命令 :20,30s/val_pi/pi_value/g

    • 插入模式(i)

只有在插入模式下,才可以做文字输入,i 进入插入模式,按 [ESC] 回到普通模式

    • 可视模式(v)

选定文段进行操作等,v 或 ctrl + v 进入,方向键选择,按 [ESC] 退出

复制
y 复制光标所选定文段

粘贴
p 在光标所在行处粘贴

删除、裁切
x 删除光标所选文段

任务练习

使用 Vim 编辑器,编写C语言程序 saxpy
程序saxpy实现了单精度浮点型数据的向量加法运算,其具体公式如下:
y[n]=y[n]+a*x[n]
其中,n为向量长度,x、y为向量数组,a为标量系数,x、y、a均为单精度浮点型float

各变量的初始值如下:
n为102400
a为3.14
x中各元素初始为0.0~6.0间的浮点型随机数
y初始取值为y[n]=12.0-x[n]

程序文件组织如下:
kernel_axpy.h
负责向量加法接口函数的声明如下:
void saxpy(const int a,const float * const x, float *y)
其中,a、x为输入,y即为输入、也为输出

void saxpy(const int a,const float * const x, float *y);

kernel_axpy.cpp
负责向量加法接口函数saxpy()的定义实现

#include "kernel_axpy.h"
using namespace std;

void saxpy(const int a,const float * const x, float *y)
{
    for (int i=0; i<102400; ++i)
    {
        y[i] += a*x[i];
    }
}

main.cpp
负责初始化向量
调用向量加法接口saxpy()
使用计时函数clock()统计saxpy()的运行时间,并打印到屏幕
打印结果y的前20个元素数值到文件y_value.txt

#include <iostream>
#include <stdlib.h>
#include <ctime>
#include <fstream>
#include "kernel_axpy.h"
using namespace std;

const int n = 102400;
const float a = 3.14;

int main()
{
    float *x = new float[n];
    float *y = new float[n];
    srand((unsigned)time(NULL));
    for (int i=0; i<n; ++i)
    {
        x[i] = static_cast <float> (rand()) / (static_cast <float> (RAND_MAX/6));
        y[i] = 12 - x[i];
    }
    clock_t startTime, endTime;
    startTime = clock();
    saxpy(a, x, y);
    endTime = clock();
    cout<<(double)(endTime - startTime) / CLOCKS_PER_SEC<<endl;
    ofstream out("y_value.txt");
    for (int i=0; i<20; ++i)
    {
        out<<y[i]<<endl;
    }
    out.close();
    return 0;
}

生成指定范围的浮点类型随机数: link
clock() 的使用: link

编译器 GCC

程序编译流程

编译过程:预处理、编译、链接

  • 预处理:处理 .c 文件的 #define,#include 等预处理指令
  • 编译:把高级语言 (.c) 翻译成汇编指令 (.s),再翻译成机器码 (.o)
  • 链接:将所有目标文件 (.o) 和第三方库文件,链接成二进制文件 (.exe)

编译器 gcc 的简易使用

源文件与编译器:
在这里插入图片描述
gcc命令的建议编译规则:

gcc -o [binaryfile] [sourcefile1] [sourefile2]…
例如:
编译处可执行文件:gcc -o HelloWorld main.c
执行:./HelloWorld

gcc 编译链接命令规则及常用编译选项

  • 编译与链接
    示例:需要编译 main.c、kernel.c 成 exe,其使用了 /home/opt/ 路径下的第三方库 math,其中 opt 目录下包含:/include/mymath.h、/lib/mymath.so

    • 1、分步进行编译和链接
      编译 (将源文件逐个编译成目标文件)

gcc -o [obj_file] -c [src_file] -I [include_path]
最后一个是字母 i 的大写不是 l
例如:
gcc -c main.c -o main.o
gcc -c kernel.c -o kernel.o -I /home/opt/include

链接 (将所有目标文件,以及第三方库,链接成二进制文件)

gcc -o [bin] [all_obj_files] -L [library_path] -l [library_file_name]
最后一个是小写字母 l
例如:
gcc -o exe main.o kernel.o -L /home/opt/lib -l mymath

    • 2、直接编译出二进制文件

gcc -o [bin] [all_src_files] -I [include_path] -L [library_path] -l [library_file_name]
前面那个 -l 是大写的 i,后面那个 -l 是小写的 L
例如:
gcc -o exe main.c kernel.c -I /home/opt/include -L /home/opt/lib -l mymath

  • 编译选项
    gcc [-option] -o [bin] [src_file]
    常用的option编译选项:

优化等级选项:
-O0,-O1,-O2,-O3 由编译器自动进行代码性能优化,等级越大,程序运行速度越快
警告选项:
-Wall 显示所有警告
调试选项:
-g 通常结合 -O0 优化等级编译,后期可使用 gdb 工具对二进制文件进行调试。会降低程序计算速度
性能分析选项:
-pg 后期可用于 gprof 工具对二进制文件进行性能分析。会降低程序计算速度
宏定义选项
-D 对应着程序代码中的宏定义。如 -DUSE_MPI

工程构建工具 Make

make 命令与makefile文件的规则和逻辑

  • Make 与 Makefile
    GNU Make 是最基本的项目构建工具,Make 通过 Makefile 文件,获取如何构建执行文件信息,并按照 Makefile 里面设定的规则,根据源文件的依赖关系,调用编译器自动执行编译
  • Makefile 的逻辑与规则
    在这里插入图片描述
  • Makefile 组成结构:目标、目标的前置条件 (依赖)、规则,还包括变量以及内置函数
  • 一个目标 (最终的执行文件),会依赖一些文件 (如源文件、目标文件、库文件等),所依赖的文件也可以作为新的目标 (子目标) 放在后面,建立其对应的规则
  • 执行 make 指令时,make首先执行的是 Makefile 里面的第一个目标,检查第一个目标的前置条件,然后寻找 “前置条件” 的前置条件,以此类推
  • 执行某个特定的目标,不遵循默认从第一个目标开始,则输入:
    make [targetName]

makefile 文件编写案例

  • 编写 makefile
    以为 hello.cpp 编写 makefile 为例
BIN=hello                     "="定义变量BIN: 要生成的二进制文件名称为"hello"
SRC=hello.cpp                 
all:$(BIN)                    all为make默认执行目标, 这个目标所依赖文件: 二进制文件BIN  
$(BIN):$(SRC)                 二进制文件BIN依赖于源码文件SRC 
	g++ -o $(BIN) $(SRC)      建立SRC到BIN的规则
clean:                        clean 目标不依赖任何其他, 执行时将执行文件删除命令
	rm -rf $(BIN) $(OBJ)
  • 使用 makefile
  • 安装可执行文件:make
  • 清除:make clean

填空练习

现有一个程序,包含main.cpp、kernel.cpp源文件,并使用了/home/opt/路径下的第三方库mymath,其中opt路径下包含头文件./include/mymath.h和库文件./lib/libmymath.so。需要在与源文件同级目录下编写makefile文件来安装该程序,来编译出二进制文件exe

BIN=exe
OBJ=main.o kernel.o
CXX=g++
CXXFLAGS=-O2
LDFLAGS=$(CXXFLAGS)
INC=-I/home/opt/include
LIB=-L/home/opt/lib -lmymath
ALL:$(BIN)
	$(BIN):$(OBJ)
	$(CXX) $(LDFLAGS) -o $@ $^ $(LIB)
%.o:%.cpp
	$(CXX) $(CXXFLAGS) -o $@ -c $< $(INC)
.PHONY:clean
clean:
	rm -rf $(OBJ) $(BIN)

对自己的表现是否满意


今天的内容比较硬核,虽然之前或多或少了解过,但再次接触依然比较陌生。虽然把课程和任务过了一遍,但应该只是接触了这部分的皮毛,之后再遇到问题时还是要多查、多悟

简述下次计划


作业管理系统slurm、调试器GDB、高性能算法等

其他反馈


课程终端好卡…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库ER图详解

ER图也成ERD&#xff08;Entity Relationship Diagram&#xff09;,目前对于ER图的表示有两种方式&#xff1a; 一种是Chens notation&#xff0c;1976年Peter Chen首次提出了Entity Relationship Modeling&#xff08;实体关系建模&#xff09;概念。 另一种是Crow’s foot no…

【UITableViewCell的重用 Objective-C语言】

一、UITableViewCell有哪些属性,怎么看, 1.可以按住command键,点开这个UITableView,看到如下界面: 这个时候,文字比较大,你可能看起来不是很清楚,这个时候,可以点击左上角的xcode,选择Preference, 让它变小一些, 文字变小,变成12以后,这些属性,是不是对的很齐啊…

Postcat IDEA 插件,最全的使用教程

Postcat 插件不会入侵到代码内部&#xff0c;无需添加任何jar包依赖&#xff0c;这个真的很香&#xff01; 下面说一说&#xff0c;这个插件如何使用&#xff0c;是时候展现真正的技术了~ 如何安装配置&#xff1f; IDEA 版本需大于 IntelliJ IDEA 2022.03 在 IDEA “设置-插件…

JSon使用

官方文档 JSon在线文档&#xff1a;https://www.w3school.com.cn/js/js_json_intro.asp Ajax在线文档&#xff1a;https://www.w3school.com.cn/js/js_ajax_intro.asp Json介绍 Json快速入门 <!DOCTYPE html> <html lang"en"> <head><meta c…

从编译器角度理解C++编译和连接原理

C编译链接整体介绍 链接主要工作 1 所有.o文件段的合并&#xff0c;符号表合并后&#xff0c;进行符号解析 链接时就是在符号表中找对应的符号是否只出现于.text或.data段一次&#xff0c;若一次都无&#xff0c;则符号未定义&#xff1b;若出现多次&#xff0c;符号重定义 符…

JavaSE补充 | apache-common包的使用,快速完成IO操作

目录 一&#xff1a;apache-common包的使用&#xff0c;快速完成IO操作 1. IOUtils类的使用 2. FileUtils类的使用 一&#xff1a;apache-common包的使用&#xff0c;快速完成IO操作 IO技术开发中&#xff0c;代码量很大&#xff0c;而且代码的重复率较高&#xff0c;为此Ap…

【MySQL】数据库约束和聚合函数的使用

目录 上篇在这里喔~ 1.数据库约束 1.NULL约束 2.UNIQUE唯一约束 3.DEFAULT默认值约束 4.PRIMARY KEY主键约束 5.FOREIGN KEY外键约束 2.表的设计 1.设计思路​编辑 2.固定套路​编辑 2.1一对一关系 2.2一对多关系 ​编辑 2.3多对多关系 ​编辑​编辑​编辑 3.插入…

《C++模板》(初阶)零基础讲解

本文主要介绍C的模板&#xff0c;包括函数模板和类模板 文章目录 为什么要有模板1、函数模板1.1 函数模板概念1.1 函数模板格式1.3 函数模板的原理1.4 函数模板的实例化1.5 模板参数的匹配原则 2、类模板2.1 类模板的定义格式2.2 类模板的实例化 为什么要有模板 就拿我们写的交…

从“捐赠openEuler”到“向openEuler捐赠”,openEuler生态走入高速发展期

【中国&#xff0c;上海&#xff0c;2023年4月21日】openEuler Developer Day 2023于4月20-21日在线上和线下同步举办。本次大会由开放原子开源基金会指导&#xff0c;中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办&#xff0c;以“万涓汇流&#xff0c;奔涌向前…

ROS使用(10)URDF

Building a visual robot model from scratch 在本教程中&#xff0c;我们将构建一个机器人的视觉模型&#xff0c;它看起来有点像R2D2。 在后面的教程中&#xff0c;您将学习如何 清晰地表达模型&#xff0c;添加一些物理属性&#xff0c;并使用xacro生成更简洁的代码&#x…

Rebex Total Pack文件传输组件,改进的递归断路器

Rebex Total Pack文件传输组件,改进的递归断路器 文件系统&#xff1a;改进的递归断路器。 ZIP&#xff1a;改进了ZIP数据描述符解析器&#xff0c;以更好地处理与Zip64的不一致性。 .NET组件 Rebex文件服务器-适用于.NET的SFTP、SCP和SSH服务器组件。可以轻松创建可供任何SFTP…

AI 时代的学习方式: 和文档对话

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

Spring请求与响应——响应

我们上一篇文章说了请求&#xff0c;SpringMVC接收到请求和数据后&#xff0c;进行一些了的处理&#xff0c;当然这个处理可以是转发给Service&#xff0c;Service层再调用Dao层完成的&#xff0c;不管怎样&#xff0c;处理完以后&#xff0c;都需要将结果告知给用户也就是给用…

Codeium的使用

官网&#xff1a;CodeiumCodeium offers best in class AI code completion & search — all for free. It supports over 40 languages and integrates with your favorite IDEs, with lightning fast speeds and state-of-the-art suggestion quality.https://codeium.co…

数据结构_第十三关(3):归并排序、计数排序

目录 归并排序 1.基本思想&#xff1a; 2.原理图&#xff1a; 1&#xff09;分解合并 2&#xff09;数组比较和归并方法&#xff1a; 3.代码实现&#xff08;递归方式&#xff09;&#xff1a; 4.归并排序的非递归方式 原理&#xff1a; 情况1&#xff1a; 情况2&…

docker的三种镜像创建

目录 dock的三种镜像创建 基于现有的镜像创建 基于本地模板创建 基于Dockerfile 创建 联合文件系统 镜像加载原理 为什么Docker里的centos的大小才200M&#xff1f; Docker 镜像结构的分层 Dockerfile 操作常用的指令 Dockerfile格式 dockerfile构建apache实例 dock的…

探索【Stable-Diffusion WEBUI】各种插件和追求更高效

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;界面与翻译(1.1) 主题风格&#xff08;kitchen Theme&#xff09;(1.2) 对照翻译&#xff08;Bilingual Localization&#xff09;(1.3) 自行翻译(1.3) 提示词翻译&#xff08;Prompt Translator&#xff09…

asp.net765数码手机配件租赁系统

员工部分功能 1.员工登录&#xff0c;员工通过自己的账号和密码登录到系统中来&#xff0c;对租赁信息进行管理 2.配件查询&#xff0c;员工可以查询系统内的配件信息 3.客户信息管理&#xff0c;员工可以管理和店内有业务往来的客户信息 4.配件租赁&#xff0c;员工可以操作用…

字节蝉联全球独角兽榜首,ChatGPT企业狂升200多位

江山代有才人出&#xff0c;各领风骚数百年。 4月18日&#xff0c; 胡润研究院发布了《2023全球独角兽榜》&#xff0c;列出了全球成立于2000年之后&#xff0c;价值10亿美元以上的非上市公司。 榜单显示&#xff0c;全球一共有1361家独角兽企业入围榜单&#xff0c;分布在48个…

不要再问为什么在职读研?在中国人民大学与加拿大女王大学金融硕士项目听到了最好的答案

为什么要在职读研呢&#xff1f;平时工作已经很忙很累了&#xff0c;再利用业余时间去学习是为什么呢&#xff1f;有不满足于现状的&#xff0c;有一直为了自己目标努力冲刺的&#xff0c;有为了圆自己名校梦想的&#xff0c;也有单纯喜欢专业喜欢学校的。相信每个读研人都有自…