mirror of
https://github.com/MariaDB/server.git
synced 2025-01-22 14:54:20 +01:00
3719bf2c2f
git-svn-id: file:///svn/toku/tokudb@43686 c7de825b-a66e-492c-adef-691d508d4ae1
74 lines
1.8 KiB
Text
74 lines
1.8 KiB
Text
#include <cilk-lib.cilkh>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <assert.h>
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
|
|
int usage() {
|
|
printf("measure multi-thread work scheduling overhead\n");
|
|
printf("-nworkitems N (number of work items, default 1)\n");
|
|
printf("-usleeptime N (work time, default 100)\n");
|
|
printf("-ntests N (number of test iterations, default 1)\n");
|
|
return 1;
|
|
}
|
|
|
|
typedef struct workitem *WORKITEM;
|
|
struct workitem {
|
|
int usleeptime;
|
|
};
|
|
|
|
cilk void do_work(WORKITEM wi) {
|
|
#if 0
|
|
// sleep for usleeptime microseconds
|
|
usleep(wi->usleeptime);
|
|
#else
|
|
// busy wait for usleeptime loop interations
|
|
int n = wi->usleeptime;
|
|
volatile int i;
|
|
for (i=0; i<n; i++);
|
|
#endif
|
|
}
|
|
|
|
cilk int main(int argc, char *argv[]) {
|
|
int ntests = 1;
|
|
int nworkitems = 1;
|
|
int usleeptime = 100;
|
|
|
|
int i;
|
|
int t;
|
|
|
|
struct workitem *work;
|
|
|
|
for (i=1; i<argc; i++) {
|
|
char *arg = argv[i];
|
|
if (strcmp(arg, "-help") == 0) {
|
|
return usage();
|
|
}
|
|
if (strcmp(arg, "-ntests") == 0) {
|
|
assert(i+1 < argc);
|
|
ntests = atoi(argv[++i]);
|
|
}
|
|
if (strcmp(arg, "-nworkitems") == 0) {
|
|
assert(i+1 < argc);
|
|
nworkitems = atoi(argv[++i]);
|
|
}
|
|
if (strcmp(arg, "-usleeptime") == 0) {
|
|
assert(i+1 < argc);
|
|
usleeptime = atoi(argv[++i]);
|
|
}
|
|
}
|
|
|
|
printf("ntests=%d nworkitems=%d usleeptime=%d\n", ntests, nworkitems, usleeptime);
|
|
work = (struct workitem *) calloc(nworkitems, sizeof (struct workitem));
|
|
for (t=0; t<ntests; t++) {
|
|
for (i=0; i<nworkitems; i++) {
|
|
work[i].usleeptime = usleeptime;
|
|
spawn do_work(&work[i]);
|
|
}
|
|
sync;
|
|
}
|
|
free(work);
|
|
return 0;
|
|
}
|