#include #include #include #include #include "cl_simple.h" #include "cl_util.h" int main (int argc, char ** argv) { int i,j; struct cl_simple_context context; cl_int error; unsigned pass = 1; int * out; char * kernel_name; size_t global_work_size = 10; int iterations; unsigned out_size; if (argc != 3) { fprintf(stderr, "Usage: loop kernel_name iterations\n"); return EXIT_FAILURE; } kernel_name = argv[1]; iterations = atoi(argv[2]); out_size = global_work_size * iterations * sizeof(int); out = malloc(out_size); if (!clSimpleSimpleInit(&context, kernel_name)) { return EXIT_FAILURE; } if (!clSimpleSetOutputBuffer(&context, out_size)) { return EXIT_FAILURE; } if (!clSimpleKernelSetArg(context.kernel, 1, sizeof(int), &iterations)) { return EXIT_FAILURE; } if( !clSimpleEnqueueNDRangeKernel(context.command_queue, context.kernel, 1, &global_work_size, &global_work_size)) { return EXIT_FAILURE; } if (!clSimpleReadOutput(&context, out, out_size)) { return EXIT_FAILURE; } for (i = 0; i < global_work_size; i++) { for (j = 0; j < iterations; j++) { unsigned id = (i * iterations) + j; if (out[id] != id) { fprintf(stderr, "\n\nExpected %d, but got %d\n\n", id, out[id]); pass = 0; } fprintf(stderr, "%2u ", out[id]); } fprintf(stderr, "\n"); } if (pass) { fprintf(stderr, "Pass\n"); return EXIT_SUCCESS; } else { fprintf(stderr, "Fail\n"); return EXIT_FAILURE; } }