gpt4 book ai didi

C++ 代码在 Linux 上比在 Windows 上慢得多

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:04 25 4
gpt4 key购买 nike

我正在编写简单的程序,我想测量它在 Windows 和 Linux(均为 64)上的执行时间。我有一个问题,因为在 Windows 上表中的 1 000 000 个元素大约需要 35 秒,而在 Linux 上,10 个元素大约需要 30 秒。为何差异如此之大?我究竟做错了什么?我的代码中是否存在不适合 Linux 的内容?

这是我的代码:

void fillTable(int s, int t[])
{
srand(time(0));
for (int i = 0; i < s; i++)
{
t[i] = rand();
}
}
void checkIfIsPrimeNotParalleled(int size, int table[])
{
for (int i = 0; i < size; i++)
{
int tmp = table[i];

if (tmp < 2)
{
}


for (int i = 2; i < tmp; i++)
{
if (tmp % i == 0)
{
}
else
{
}
}
}
}
void mesureTime(int size, int table[], int numberOfRepetitions)
{
long long sum = 0;
clock_t start_time, end_time;
fillTable(size, table);

for (int i = 0; i < numberOfRepetitions; i++)
{
start_time = clock();

checkIfIsPrimeNotParalleled(size, table);

end_time = clock();
double duration = (end_time - start_time) / CLOCKS_PER_SEC;
sum += duration;
}
cout << "Avg: " << round(sum / numberOfRepetitions) << " s"<<endl;
}

int main()
{

static constexpr int size = 1000000;
int *table = new int[size];
int numberOfRepetitions = 1;
mesureTime(size, table, numberOfRepetitions);
delete[] table;
return 0;

}

以及 Linux 的 makefile。在 Windows 上,我使用 Visual Studio 2015

.PHONY: Project1

CXX = g++
EXEC = tablut
LDFLAGS = -fopenmp
CXXFLAGS = -std=c++11 -Wall -Wextra -fopenmp -m64
SRC= Project1.cpp
OBJ= $(SRC:.cpp=.o)

all: $(EXEC)

tablut: $(OBJ)
$(CXX) -o tablut $(OBJ) $(LDFLAGS)

%.o: %.cpp
$(CXX) -o $@ -c $< $(CXXFLAGS)

clean:
rm -rf *.o

mrproper: clean
rm -rf tablut

主要目标是测量时间。

最佳答案

您未在 Linux 上启用优化的情况下进行构建。将 -O2-O3 添加到您的编译器标志 (CXXFLAGS),您将看到显着的性能改进。

关于C++ 代码在 Linux 上比在 Windows 上慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44485717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com