Ho feta hanyane ka tlhahlobo e mpe

Ka letsatsi le leng ke ile ka fumana ka phoso khoutu ea hore mosebelisi o ne a leka ho lekola ts'ebetso ea RAM mochining oa hae oa sebele. Nke ke ka fana ka khoutu ena (ho na le "lesela la maoto" moo) 'me ke tla siea feela ea bohlokoa ka ho fetisisa. Kahoo, katse e ka har'a studio!

#include <sys/time.h>
#include <string.h>
#include <iostream>

#define CNT 1024
#define SIZE (1024*1024)

int main() {
	struct timeval start;
	struct timeval end;
	long millis;
	double gbs;
	char ** buffers;
	buffers = new char*[CNT];
	for (int i=0;i<CNT;i++) {
		buffers[i] = new char[SIZE];
	}
	gettimeofday(&start, NULL);
	for (int i=0;i<CNT;i++) {
		memset(buffers[i], 0, SIZE);
	}
	gettimeofday(&end, NULL);
	millis = (end.tv_sec - start.tv_sec) * 1000 +
		(end.tv_usec - start.tv_usec) / 1000;
	gbs = 1000.0 / millis;
	std::cout << gbs << " GB/sn";
	for (int i=0;i<CNT;i++) {
		delete buffers[i];
	}
	delete buffers;
	return 0;
}

Ho bonolo - abela memori mme o ngole gigabyte e le 'ngoe ho eona. Mme teko ee e bontsha eng?

$ ./memtest
4.06504 GB / s

Hoo e ka bang 4GB/s.

Eng?!?!

Joang?!?!?

Ena ke Core i7 (leha e se e ncha ka ho fetesisa), DDR4, processor e batla e sa kengoa - HOBANE'NG?!?!

Karabo, joalo ka kamehla, e tloaelehile ka mokhoa o sa tloaelehang.

Opereishene e ncha (joaloka mosebetsi oa malloc, ka tsela) ha e hlile ha e fane ka mohopolo. Ka pitso ena, mofani o sheba lenane la libaka tsa mahala ka har'a letamo la memori, 'me haeba li le sieo, li letsetsa sbrk () ho eketsa karolo ea data, ebe o khutlela lenaneong ho buuoa ka aterese e tsoang sebakeng se secha feela. abeloa.

Bothata ke hore sebaka se abetsoeng ke nnete ka botlalo. Ha ho maqephe a 'nete a memori a fanoeng.

'Me ha phihlelo ea pele ea leqephe le leng le le leng ho tloha karolong ena e fanoeng e etsahala, MMU "e thunya" phoso ea leqephe, ka mor'a moo leqephe la sebele le fumanehang le abeloa ea sebele.

Ka hona, ha e le hantle, ha re leke ts'ebetso ea li-module tsa libese le RAM, empa ts'ebetso ea MMU le VMM ea sistimi e sebetsang. Mme molemong oa ho leka ts'ebetso ea 'nete ea RAM, re hloka feela ho qala libaka tse abetsoeng hang. Ka mohlala, joalo ka:

#include <sys/time.h>
#include <string.h>
#include <iostream>

#define CNT 1024
#define SIZE (1024*1024)

int main() {
	struct timeval start;
	struct timeval end;
	long millis;
	double gbs;
	char ** buffers;
	buffers = new char*[CNT];
	for (int i=0;i<CNT;i++) {
                // FIXED HERE!!!
		buffers[i] = new char[SIZE](); // Add brackets, &$# !!!
	}
	gettimeofday(&start, NULL);
	for (int i=0;i<CNT;i++) {
		memset(buffers[i], 0, SIZE);
	}
	gettimeofday(&end, NULL);
	millis = (end.tv_sec - start.tv_sec) * 1000 +
		(end.tv_usec - start.tv_usec) / 1000;
	gbs = 1000.0 / millis;
	std::cout << gbs << " GB/sn";
	for (int i=0;i<CNT;i++) {
		delete buffers[i];
	}
	delete buffers;
	return 0;
}

Ka mantsoe a mang, re qala feela li-buffers tse fanoeng ka boleng ba kamehla (char 0).

Re hlahloba:

$ ./memtest
28.5714 GB / s

Ntho enngwe.

Boitšoaro ba pale - haeba u hloka li-buffers tse kholo ho sebetsa kapele, u se ke oa lebala ho li qala.

Source: www.habr.com

Eketsa ka tlhaloso