āĻāĻāĻĻāĻŋāĻ¨ āĻāĻŽāĻŋ āĻāĻāĻ¨āĻžāĻā§āĻ°āĻŽā§ āĻā§āĻĄāĻāĻŋ āĻĒā§āĻ¯āĻŧā§āĻāĻŋāĻ˛āĻžāĻŽ āĻ¯ā§ āĻāĻāĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¤āĻžāĻ° āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§ RAM āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻā§āĻ¨āĨ¤ āĻāĻŽāĻŋ āĻāĻ āĻā§āĻĄāĻāĻŋ āĻĻā§āĻŦ āĻ¨āĻž (āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ "āĻĢā§āĻāĻā§āĻ˛āĻĨ" āĻāĻā§) āĻāĻŦāĻ āĻāĻŽāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻāĻŋāĻ¨āĻŋāĻ¸āĻāĻŋ āĻ°ā§āĻā§ āĻĻā§āĻŦāĨ¤ āĻ¤āĻžāĻ, āĻŦāĻŋāĻĄāĻŧāĻžāĻ˛ āĻ¸ā§āĻā§āĻĄāĻŋāĻāĻ¤ā§!
#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;
}
āĻāĻāĻž āĻ¸āĻšāĻ - āĻŽā§āĻŽāĻ°āĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻ¤ā§ āĻāĻ āĻāĻŋāĻāĻžāĻŦāĻžāĻāĻ āĻ˛āĻŋāĻā§āĻ¨āĨ¤ āĻāĻŦāĻ āĻāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻŋ āĻĻā§āĻāĻžāĻ¯āĻŧ?
$./āĻŽā§āĻŽāĻā§āĻ¸ā§āĻ
4.06504 GB / āĻā§āĻ˛āĻŋ
āĻāĻ¨ā§āĻŽāĻžāĻ¨āĻŋāĻ 4GB/s.
āĻāĻŋ?!?!
āĻāĻŋāĻāĻžāĻŦā§?!?!?
āĻāĻāĻŋ āĻā§āĻ° i7 (āĻ¯āĻĻāĻŋāĻ āĻ¨āĻ¤ā§āĻ¨ āĻ¨āĻ¯āĻŧ), DDR4, āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ˛ā§āĻĄ āĻšāĻ¯āĻŧ āĻ¨āĻž - āĻā§āĻ¨?!?!
āĻāĻ¤ā§āĻ¤āĻ°, āĻŦāĻ°āĻžāĻŦāĻ°ā§āĻ° āĻŽāĻ¤ā§, āĻ āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻāĻāĻžāĻŦā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĨ¤
āĻ¨āĻ¤ā§āĻ¨ āĻ āĻĒāĻžāĻ°ā§āĻāĻ° (āĻŽā§āĻ¯āĻžāĻ˛ā§āĻ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻŽāĻ¤ā§, āĻāĻĒāĻžāĻ¯āĻŧ āĻĻā§āĻŦāĻžāĻ°āĻž) āĻāĻ¸āĻ˛ā§ āĻŽā§āĻŽāĻ°āĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻāĻ āĻāĻ˛ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§, āĻŦāĻ°āĻžāĻĻā§āĻĻāĻāĻžāĻ°ā§ āĻŽā§āĻŽāĻ°āĻŋ āĻĒā§āĻ˛ā§ āĻŦāĻŋāĻ¨āĻžāĻŽā§āĻ˛ā§āĻ¯ā§ āĻ āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĻā§āĻā§āĻ¨, āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻā§āĻ¨āĻāĻŋāĻ āĻ¨āĻž āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻĄā§āĻāĻž āĻ¸ā§āĻāĻŽā§āĻ¨ā§āĻ āĻŦāĻžāĻĄāĻŧāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ sbrk() āĻāĻ˛ āĻāĻ°ā§ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻ¨āĻ¤ā§āĻ¨ āĻ āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ āĻĨā§āĻā§ āĻ āĻŋāĻāĻžāĻ¨āĻžāĻ° āĻāĻāĻāĻŋ āĻ°ā§āĻĢāĻžāĻ°ā§āĻ¨ā§āĻ¸ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻĢāĻŋāĻ°ā§ āĻāĻ¸ā§āĨ¤ āĻŦāĻ°āĻžāĻĻā§āĻĻ
āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ˛ āĻŦāĻ°āĻžāĻĻā§āĻĻāĻā§āĻ¤ āĻāĻ˛āĻžāĻāĻž āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛āĨ¤ āĻā§āĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻŽā§āĻŽāĻ°āĻŋ āĻĒā§āĻˇā§āĻ āĻž āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž.
āĻāĻŦāĻ āĻ¯āĻāĻ¨ āĻāĻ āĻŦāĻ°āĻžāĻĻā§āĻĻāĻā§āĻ¤ āĻ¸ā§āĻāĻŽā§āĻ¨ā§āĻ āĻĨā§āĻā§ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒā§āĻˇā§āĻ āĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻĨāĻŽ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻā§, āĻ¤āĻāĻ¨ MMU āĻāĻāĻāĻŋ āĻĒā§āĻˇā§āĻ āĻžāĻ° āĻ¤ā§āĻ°ā§āĻāĻŋ "āĻļā§āĻ" āĻāĻ°ā§, āĻ¯āĻžāĻ° āĻĒāĻ°ā§ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻĒā§āĻˇā§āĻ āĻžāĻāĻŋ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¸ā§āĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻāĻ¸āĻ˛ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
āĻ āĻ¤āĻāĻŦ, āĻāĻ¸āĻ˛ā§, āĻāĻŽāĻ°āĻž āĻŦāĻžāĻ¸ āĻāĻŦāĻ RAM āĻŽāĻĄāĻŋāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻāĻŋ āĻ¨āĻž, āĻ¤āĻŦā§ āĻ āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° MMU āĻāĻŦāĻ VMM āĻāĻ° āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻāĻŋāĨ¤ āĻāĻŦāĻ RAM āĻāĻ° āĻĒā§āĻ°āĻā§āĻ¤ āĻāĻžāĻ°ā§āĻ¯āĻā§āĻˇāĻŽāĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻžāĻĻā§āĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻŦāĻžāĻ° āĻŦāĻ°āĻžāĻĻā§āĻĻāĻā§āĻ¤ āĻāĻ˛āĻžāĻāĻžāĻā§āĻ˛āĻŋ āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ¯ā§āĻŽāĻ¨ āĻāĻ āĻŽāĻ¤:
#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;
}
āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻŽāĻ°āĻž āĻā§āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻŽāĻžāĻ¨ (char 0) āĻ¸āĻš āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻž āĻŦāĻžāĻĢāĻžāĻ°āĻā§āĻ˛āĻŋ āĻļā§āĻ°ā§ āĻāĻ°āĻŋāĨ¤
āĻā§āĻ āĻāĻ°ā§āĻ¨:
$./āĻŽā§āĻŽāĻā§āĻ¸ā§āĻ
28.5714 GB / āĻā§āĻ˛āĻŋ
āĻāĻ°ā§āĻāĻāĻŋ āĻŦāĻŋāĻˇāĻ¯āĻŧ.
āĻāĻ˛ā§āĻĒā§āĻ° āĻ¨ā§āĻ¤āĻŋāĻāĻ¤āĻž - āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻĄāĻŧ āĻŦāĻžāĻĢāĻžāĻ°ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ, āĻ¸ā§āĻā§āĻ˛āĻŋ āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻžāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com