HPC01-cmake01

本文最后更新于:2024年12月15日 下午

VS 再次打开CMake项目时无法识别

尝试清理缓存,然后重新生成

  • 菜单栏-项目-清理缓存并重新配置

cmake文件跨平台,程序计算结果不同

我使用Visual Studio创建了一个CMake项目,能成功运行。然而我移植到在Linux上用cmake编译、运行时,程序得到的计算结果却不同。
查看log发现,应该是 abs() max()函数定义问题,自己定义abs_() max_() 后,问题解决。

GPT的回答:

  1. 编译器差异:不同的操作系统和编译器可能对代码的处理方式存在差异,特别是在涉及浮点数运算和优化方面。这可能导致在不同平台上得到不同的计算结果。你可以尝试在Linux上使用与Visual Studio中相同的编译器(例如GCC)来编译代码,以确保结果的一致性。

  2. 依赖项问题:你的项目可能依赖于特定的库或组件,而在Linux上可能缺少这些依赖项或使用了不同的版本。这可能会导致在不同平台上产生不同的结果。确保在Linux上安装和配置了与Visual Studio相同的依赖项版本,并且在CMakeLists.txt文件中正确设置了这些依赖项。

  3. CMake配置问题:CMakeLists.txt文件可能在不同平台上有所不同,特别是与编译选项、链接库和宏定义相关的部分。确保在Linux上正确配置了CMakeLists.txt,以便与Visual Studio中的配置保持一致。

  4. 平台相关行为:某些代码可能依赖于特定平台的行为,而在不同平台上可能表现不同。这可能涉及文件路径、操作系统相关的特性、并发行为等。确保你的代码在移植到Linux时考虑了这些平台相关的差异,并进行了适当的调整。

这是windows前18步文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  istep = 	0	time = 0.0104167
dvormax/dt = 8640 dstrmax/dt = 0
calcutate time: 0.005s
istep = 1 time = 0.0208333
dvormax/dt = 2671.78 dstrmax/dt = 9.18258e-07
calcutate time: 0.007s
istep = 2 time = 0.03125
dvormax/dt = 1541.5 dstrmax/dt = 9.44346e-07
calcutate time: 0.014s
...
istep = 17 time = 0.1875
dvormax/dt = 37.8238 dstrmax/dt = 9.18957e-07
calcutate time: 0.042s
istep = 18 time = 0.197917
dvormax/dt = 34.7246 dstrmax/dt = 8.76593e-07
calcutate time: 0.044s

这是linux文件。它把残差整数化了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  istep = 	0	time = 0.0104167
dvormax/dt = 8640 dstrmax/dt = 0
calcutate time: 0.000465s
istep = 1 time = 0.0208333
dvormax/dt = 2400 dstrmax/dt = 0
calcutate time: 0.000647s
istep = 2 time = 0.03125
dvormax/dt = 1824 dstrmax/dt = 0
calcutate time: 0.002803s
istep = 3 time = 0.0416667
dvormax/dt = 1536 dstrmax/dt = 0
calcutate time: 0.002997s
...
istep = 17 time = 0.1875
dvormax/dt = 96 dstrmax/dt = 0
calcutate time: 0.005587s
istep = 18 time = 0.197917
dvormax/dt = 0 dstrmax/dt = 0
calcutate time: 0.00577s
istep = 18 time = 0.197917
dvormax/dt = 0 dstrmax/dt = 0
calcutate time: 0.005823s

HPC01-cmake01
http://olivetien.github.io/02-14-hpc/HPC01-cmake/
作者
Olive Tien
发布于
2023年11月26日
许可协议