このプログラムは、1 行あたり 65k バイトを出力します。
でスループットを測定する./a.out | pv >/dev/null
と、約 3 GB/s が得られます。
回線の長さを 70k に変更するとすぐに、スループットが ~ 1 GB/s に低下します。
ここで発生しているボトルネック(CPU キャッシュ、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);
}
更新: Core i5-2520M 上の EGLIBC 2.15 を搭載した Ubuntu 12.04 64 ビットでこれを実行しています。
更新: puts (s)
同じ問題があります。