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]);
}
}
}
#define proc3(in1, in2, out, range, 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;
int i;
if (argc != 3) {
fprintf(stderr, "Usage: test kernel codepath\n");
return -1;
}
kernel = atoi(argv[1]);
codepath = atoi(argv[2]);
for (i = 0; i < 1024; i++) {
in1[i] = i + kernel;
in2[i] = i - kernel;
}
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;
case 3:
switch(kernel) {
case 0:
proc3(in1, in2, out, 1024, doit1);
break;
case 1:
proc3(in1, in2, out, 1024, doit2);
break;
}
break;
default:
fprintf(stderr, "invalid code path!\n");
return -1;
}
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
e2/7b/23cb2d57deff7197130e16457775

Event Timeline