6 static struct thread_data {
10 static void *worker(void *data)
12 struct thread_data *td = data;
18 size = td->mib * 1024UL * 1024UL;
21 for (i = 0; i < 100000; i++) {
22 for (index = 0; index + 4096 < size; index += 4096)
23 memset(&buf[index+512], 0x89, 512);
25 printf("loop%d: did %lu MiB\n", i+1, td->mib);
33 int main(int argc, char *argv[])
35 unsigned long mib, threads;
40 printf("%s: <MiB per thread> <threads>\n", argv[0]);
44 mib = strtoul(argv[1], NULL, 10);
45 threads = strtoul(argv[2], NULL, 10);
46 if (threads < 1 || threads > 65536) {
47 printf("%s: invalid 'threads' argument\n", argv[0]);
51 pthreads = calloc(threads, sizeof(pthread_t));
54 for (i = 0; i < threads; i++)
55 pthread_create(&pthreads[i], NULL, worker, &td);
57 for (i = 0; i < threads; i++) {
60 pthread_join(pthreads[i], &ret);