Ejemplo n.º 1
0
Archivo: ocl.c Proyecto: aosp/dvp
ocl_t *ocl_init()
{
    ocl_t *ocl = (ocl_t *)calloc(1, sizeof(ocl_t));
    if (ocl)
    {
        ocl->env = clCreateEnvironment(OCL_ROOT"kernels.cl", clGetTypeFromString(CL_USER_DEVICE_TYPE), CL_USER_DEVICE_COUNT, cl_notifier, CL_ARGS);
    }
    return ocl;
}
Ejemplo n.º 2
0
int main(int argc, char *argv[])
{
    const cl_uint numBodies = 10;
    float *m     = cl_malloc_array(float, numBodies);
    float *t     = cl_malloc_array(float, numBodies);
    cl_float4 *a = cl_malloc_array(cl_float4, numBodies);
    cl_float4 *v = cl_malloc_array(cl_float4, numBodies);
    cl_float4 *p = cl_malloc_array(cl_float4, numBodies);

#ifdef CL_BUILD_RUNTIME
    cl_uint type = clGetTypeFromString(CL_USER_DEVICE_TYPE);
    cl_uint count = CL_USER_DEVICE_COUNT;
    cl_environment_t *pEnv = clCreateEnvironment(KDIR"kernel_nbody.cl",type,count,notify,CL_ARGS);
#else
    cl_environment_t *pEnv = clCreateEnvironmentFromBins(&gKernelBins, notify, CL_ARGS);
#endif
    if (pEnv)
    {
        cl_uint i = 0, j = 0;
        cl_uint numIterations = (argc > 1?atoi(argv[1]):10);
        for (i = 0; i < numBodies; i++)
        {
            m[i] = frand() * ipow(10,rrand(4,27)); // masses should be 10^4 - 10^27 ("Earth heavy")
            frand4(a[i], 1, 3);
            frand4(v[i], 1, 2);
            frand4(p[i], 4, 8);
            t[i] = 0.001f; // 1 millisecond.
        }
        i = 0;
        for (j = 0; j < numIterations; j++)
        {
            nbodies(pEnv, m, a, v, p, t, numBodies);
#if defined(DARWIN)
            printf("[%6u] p={%lf,%lf,%lf} v={%lf,%lf,%lf} a={%lf,%lf,%lf}\n", i,
                    p[i][0], p[i][1], p[i][2],
                    v[i][0], v[i][1], v[i][2],
                    a[i][0], a[i][1], a[i][2]);
#else
            printf("[%6u] p={%lf,%lf,%lf} v={%lf,%lf,%lf} a={%lf,%lf,%lf}\n", i,
                    p[i].s[0], p[i].s[1], p[i].s[2],
                    v[i].s[0], v[i].s[1], v[i].s[2],
                    a[i].s[0], a[i].s[1], a[i].s[2]);
#endif     
        }
        clDeleteEnvironment(pEnv);
        cl_free(t);
        cl_free(m);
        cl_free(v);
        cl_free(a);
        cl_free(p);
    }
    return 0;
}
Ejemplo n.º 3
0
int main(int argc, char *argv[])
{
    // initialize the default values
    numDevices = 1;
    verbose = CL_FALSE;
    no_print_logo = CL_FALSE;
    strncpy(filename, "kernels.cl", CL_MAX_PATHSIZE);
    //strncpy(outfile,  "a.out", CL_MAX_PATHSIZE);
    memset(outfile, 0, sizeof(outfile));
    //strncpy(precomp,  "kernels.h", CL_MAX_PATHSIZE);
    memset(precomp, 0, sizeof(precomp));
    if (argc > 1)
    {
        cl_environment_t *pEnv = NULL;
        cl_uint dev_type = CL_DEVICE_TYPE_DEFAULT;
        clOptions(argc, argv);
        print_logo();

        if (verbose && filename[0] != '\0')
            printf("Compiling File: %s\n",filename);

        if (verbose && cl_args[0] != '\0')
            printf("CL ARGS: %s\n",cl_args);

        if (verbose && precomp[0] != '\0')
            printf("Precompiled Header: %s\n", precomp);

        dev_type = clGetTypeFromString(cl_device_types);
        if (verbose)
            printf("%u devices as type 0x%08x\n",numDevices,dev_type);

        // process the kernel
        pEnv = clCreateEnvironment(filename, dev_type, numDevices, notify, cl_args);
        if (pEnv == NULL)
        {
            printf("ERROR: Failed to compile %s\n", filename);
        }
        clDeleteEnvironment(pEnv);
    }
    else
    {
        cl_uint i;
        print_logo();
        printf("Usage:\n$ %s [OPTIONS] \n", argv[0]);
        for (i = 0; i < numOpts; i++)
        {
            printf("Option %s\t\t%s\n",options[i].arg, options[i].description);
        }
        printf("Example:\n$ %s -f %s -d %u -o %s\n",argv[0],filename,numDevices,outfile);
    }
    return 0;
}