Эта программа печатает 65 КБ на строку.
Я измеряю пропускную способность с помощью ./a.out | pv >/dev/null
и получаю около 3 ГБ/с.
Как только я изменяю длину линии на 70k, пропускная способность падает до ~1 ГБ/с.
Какое узкое место(Кэш ЦП, идиосинкразия libc и т. д.)я тут бью?
#include <stdio.h>
#include <string.h>
#define LEN 65000 // high throughput
// #define LEN 70000 // low throughput
int main ()
{
char s[LEN]; memset(s, 'a', LEN-1); s[LEN-1] = '\0';
while (1)
printf ("%s\n", s);
}
Обновление:Я запускаю это на Ubuntu 12.04 64 -бит, которая имеет EGLIBC 2.15, на Core i5 -2520M.
Обновление:puts (s)
имеет ту же проблему.