Пример #1
0
def f2cl(source,
         free_form=False,
         strict=True,
         addr_space_hints={},
         force_casts={},
         do_arg_analysis=True,
         use_restrict_pointers=False,
         try_compile=False):
    from fparser import api
    tree = api.parse(source,
                     isfree=free_form,
                     isstrict=strict,
                     analyze=False,
                     ignore_comments=False)

    arg_info = ArgumentAnalayzer()
    if do_arg_analysis:
        arg_info(tree)

    source = F2CLTranslator(addr_space_hints,
                            force_casts,
                            arg_info,
                            use_restrict_pointers=use_restrict_pointers)(tree)

    func_decls = []
    for entry in source:
        if isinstance(entry, cgen.FunctionBody):
            func_decls.append(entry.fdecl)

    mod = cgen.Module(func_decls + [cgen.Line()] + source)

    #open("pre-cnd.cl", "w").write(str(mod))

    from cnd import transform_cl
    str_mod = transform_cl(str(mod))

    if try_compile:
        import pyopencl as cl
        ctx = cl.create_some_context()
        cl.Program(
            ctx, """
            #if __OPENCL_VERSION__ <= CL_VERSION_1_1
            #pragma OPENCL EXTENSION cl_khr_fp64: enable
            #endif
            #include <pyopencl-complex.h>
            """).build()
    return str_mod
Пример #2
0
def f2cl(
    source,
    free_form=False,
    strict=True,
    addr_space_hints={},
    force_casts={},
    do_arg_analysis=True,
    use_restrict_pointers=False,
    try_compile=False,
):
    from fparser import api

    tree = api.parse(source, isfree=free_form, isstrict=strict, analyze=False, ignore_comments=False)

    arg_info = ArgumentAnalayzer()
    if do_arg_analysis:
        arg_info(tree)

    source = F2CLTranslator(addr_space_hints, force_casts, arg_info, use_restrict_pointers=use_restrict_pointers)(tree)

    func_decls = []
    for entry in source:
        if isinstance(entry, cgen.FunctionBody):
            func_decls.append(entry.fdecl)

    mod = cgen.Module(func_decls + [cgen.Line()] + source)

    # open("pre-cnd.cl", "w").write(str(mod))

    from cnd import transform_cl

    str_mod = transform_cl(str(mod))

    if try_compile:
        import pyopencl as cl

        ctx = cl.create_some_context()
        cl.Program(
            ctx,
            """
            #if __OPENCL_VERSION__ <= CL_VERSION_1_1
            #pragma OPENCL EXTENSION cl_khr_fp64: enable
            #endif
            #include <pyopencl-complex.h>
            """,
        ).build()
    return str_mod