Page MenuHome
#include <stdio.h>
#include <stdlib.h>
static inline int doit1(int v1, int v2)
{
return v1+v2;
}
static inline int doit2(int v1, int v2)
{
return v1*v2;
}
typedef int (*func_t)(int,int);
struct handler {
func_t h;
};
static inline struct handler get_handler1(int i)
{
struct handler rv;
if (i == 0) {
rv.h = doit1;
} else {
rv.h = doit2;
}
return rv;
}
static inline func_t get_handler2(int i)
{
func_t rv;
if (i == 0) {
return doit1;
} else {
return doit2;
}
}
inline void proc1(
int * in1, int * in2, int * out, int range, struct handler hnd)
{
int i;
int j;
for (j = 0; j < 1024000; j++) {
for (i = 0; i < range; i++) {
out[i] = hnd.h(in1[i], in2[i]);
}
}
}
inline void proc2(int * in1, int * in2, int * out, int range, func_t h)
{
int i;
int j;
for (j = 0; j < 1024000; j++) {
for (i = 0; i < range; i++) {
out[i] = h(in1[i], in2[i]);
}
}
}
int main(int argc, const char** argv)
{
int in1[1024];
int in2[1024];
int out[1024];
FILE * fp;
int kernel;
int codepath;
if (argc != 3) {
fprintf(stderr, "Usage: test kernel codepath\n");
return -1;
}
fp = fopen("/dev/urandom", "rb");
fread(in1, sizeof(int), 1024, fp);
fread(in2, sizeof(int), 1024, fp);
fclose(fp);
kernel = atoi(argv[1]);
codepath = atoi(argv[2]);
switch (codepath) {
case 0:
proc1(in1, in2, out, 1024, get_handler1(kernel));
break;
case 1:
proc2(in1, in2, out, 1024, get_handler2(kernel));
break;
case 2:
switch(kernel) {
case 0:
proc2(in1, in2, out, 1024, doit1);
break;
case 1:
proc2(in1, in2, out, 1024, doit2);
break;
}
break;
}
fp = fopen("/tmp/test_out", "wb");
fwrite(out, sizeof(int), 1024, fp);
fclose(fp);
return 0;
}

File Metadata

Mime Type
text/x-c
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
bc/99/31bd6a815d97fe6d94d0322ca657

Event Timeline