/* cl_kernel kernel; kernel = clCreateKernel(arguments, "nothing"); ((args*)kernel.arguments)->param[0] = (int*)malloc(sizeof(int)); memcpy(((args*)kernel.arguments)->param[0], &star, sizeof(int)); ((args*)kernel.arguments)->param[1] = one; clReleaseKernel(kernel); printf("single kernel works\n"); */ #include "cl.cvl" #include #include #include #include typedef struct { void * param[2]; }args; cl_kernel clCreateKernel(args * argument, char * function) { cl_kernel kernel; kernel.arguments = argument; kernel.method = function; return kernel; } void clReleaseKernel(cl_kernel kernel) { for (int i = 0; i < 2; i++) { free(((args*)kernel.arguments)->param[i]); } } int main(int argc, char** argv) { args * arguments; arguments = (args*)malloc(sizeof(args)); int star = 1; int * one = (int*)malloc(sizeof(int)); memcpy(one, &star, sizeof(int)); //cl_kernel *kernels = (cl_kernel*)malloc(3 * sizeof(cl_kernel)); cl_kernel kernels[3]; printf("%d, %d\n", star, *one); for (int i = 0; i < 3; i++) { kernels[i] = clCreateKernel(arguments, "eh"); } for (int i = 0; i < 3; i++) { printf("starts here\n"); ((args*)kernels[i].arguments)->param[0] = (int*)malloc(sizeof(int)); printf("malloc works\n"); memcpy(((args*)kernels[i].arguments)->param[0], &star, sizeof(int)); printf("I am kernel of index %d, with a value of %d\n", i, ((args*)kernels[i].arguments)->param[0]); //((args*)kernels[i].arguments)->param[1] = one; } printf("assigned properly\n"); /* for (int i = 0; i < 3; i++) { //clReleaseKernel(kernels[i]); } */ for (int i = 0; i < 3; i++) { free(((args*)kernels[i].arguments)->param[0]); } //((args*)kernels[0].arguments)->param[1] = one; //free(((args*)kernels[0].arguments)->param[1]); //((args*)kernels[0].arguments)->param[0] = (int*)malloc(sizeof(int)); //memcpy(((args*)kernels[0].arguments)->param[0], &star, sizeof(int)); //free(((args*)kernels[0].arguments)->param[0]); // //((args*)kernels[1].arguments)->param[0] = (int*)malloc(sizeof(int)); //memcpy(((args*)kernels[1].arguments)->param[0], &star, sizeof(int)); //free(((args*)kernels[1].arguments)->param[0]); //free(((args*)kernels[1].arguments)->param[1]); //free(((args*)kernels[2].arguments)->param[0]); //free(((args*)kernels[2].arguments)->param[1]); free(one); free(arguments); return 0; }