import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20shlex%0A%20%20%20%20import%20shutil%0A%20%20%20%20import%20subprocess%0A%20%20%20%20import%20textwrap%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20notebook_dir%20%3D%20Path(__file__).resolve().parent%20if%20%22__file__%22%20in%20globals()%20else%20Path.cwd()%0A%20%20%20%20repo_root%20%3D%20notebook_dir.parents%5B1%5D%0A%20%20%20%20work_dir%20%3D%20repo_root%20%2F%20%22data%22%20%2F%20%22others%22%20%2F%20%22cpp%22%0A%20%20%20%20work_dir.mkdir(parents%3DTrue%2C%20exist_ok%3DTrue)%0A%20%20%20%20compiler_path%20%3D%20shutil.which(%22g%2B%2B%22)%0A%20%20%20%20return%20Path%2C%20compiler_path%2C%20mo%2C%20shlex%2C%20subprocess%2C%20textwrap%2C%20work_dir%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20C%2B%2B%20%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%96%B9%E6%B3%95%0A%0A%20%20%20%20%60%25%25writefile%60%20%E3%82%84%20%60!g%2B%2B%60%20%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%81%AF%E4%BD%BF%E3%82%8F%E3%81%9A%E3%80%81%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E8%87%AA%E8%BA%AB%E3%81%8C%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%92%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%81%A6%0A%20%20%20%20%60subprocess.run()%60%20%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%83%BB%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%80%82%E5%A4%B1%E6%95%97%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%82%82%E3%81%9D%E3%81%AE%E5%A0%B4%E3%81%A7%E7%B5%90%E6%9E%9C%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(compiler_path%2C%20shlex%2C%20subprocess%2C%20textwrap%2C%20work_dir)%3A%0A%20%20%20%20def%20run_command(command_parts)%3A%0A%20%20%20%20%20%20%20%20return%20subprocess.run(%0A%20%20%20%20%20%20%20%20%20%20%20%20command_parts%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cwd%3Dwork_dir%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20capture_output%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20check%3DFalse%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20def%20compile_and_run(name%3A%20str%2C%20source%3A%20str%2C%20extra_flags%3D())%3A%0A%20%20%20%20%20%20%20%20source_path%20%3D%20work_dir%20%2F%20f%22%7Bname%7D.cpp%22%0A%20%20%20%20%20%20%20%20binary_path%20%3D%20work_dir%20%2F%20name%0A%20%20%20%20%20%20%20%20source_path.write_text(textwrap.dedent(source).strip()%20%2B%20%22%5Cn%22%2C%20encoding%3D%22utf-8%22)%0A%0A%20%20%20%20%20%20%20%20if%20compiler_path%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22compile_command%22%3A%20%22g%2B%2B%20not%20found%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22compile_returncode%22%3A%20127%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22compile_stdout%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22compile_stderr%22%3A%20%22g%2B%2B%20is%20not%20installed.%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22run_returncode%22%3A%20None%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22run_stdout%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22run_stderr%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source_path%22%3A%20source_path%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20compile_command%20%3D%20%5Bcompiler_path%2C%20str(source_path)%2C%20%22-std%3Dc%2B%2B17%22%2C%20%22-O2%22%2C%20%22-o%22%2C%20str(binary_path)%2C%20*extra_flags%5D%0A%20%20%20%20%20%20%20%20compile_result%20%3D%20run_command(compile_command)%0A%20%20%20%20%20%20%20%20report%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22compile_command%22%3A%20%22%20%22.join(shlex.quote(part)%20for%20part%20in%20compile_command)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22compile_returncode%22%3A%20compile_result.returncode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22compile_stdout%22%3A%20compile_result.stdout%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22compile_stderr%22%3A%20compile_result.stderr%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22run_returncode%22%3A%20None%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22run_stdout%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22run_stderr%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22source_path%22%3A%20source_path%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20compile_result.returncode%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20run_result%20%3D%20run_command(%5Bstr(binary_path)%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20report%5B%22run_returncode%22%5D%20%3D%20run_result.returncode%0A%20%20%20%20%20%20%20%20%20%20%20%20report%5B%22run_stdout%22%5D%20%3D%20run_result.stdout%0A%20%20%20%20%20%20%20%20%20%20%20%20report%5B%22run_stderr%22%5D%20%3D%20run_result.stderr%0A%20%20%20%20%20%20%20%20return%20report%0A%0A%20%20%20%20def%20format_report(title%3A%20str%2C%20report)%3A%0A%20%20%20%20%20%20%20%20body%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%23%23%23%20%7Btitle%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22-%20source%3A%20%60%7Breport%5B'source_path'%5D.name%7D%60%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22-%20compile%20command%3A%20%60%7Breport%5B'compile_command'%5D%7D%60%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22-%20compile%20return%20code%3A%20%60%7Breport%5B'compile_returncode'%5D%7D%60%22%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20if%20report%5B%22compile_stdout%22%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20body.append(%22%60%60%60text%5Cn%22%20%2B%20report%5B%22compile_stdout%22%5D.rstrip()%20%2B%20%22%5Cn%60%60%60%22)%0A%20%20%20%20%20%20%20%20if%20report%5B%22compile_stderr%22%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20body.append(%22%60%60%60text%5Cn%22%20%2B%20report%5B%22compile_stderr%22%5D.rstrip()%20%2B%20%22%5Cn%60%60%60%22)%0A%20%20%20%20%20%20%20%20if%20report%5B%22run_returncode%22%5D%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20body.append(f%22-%20run%20return%20code%3A%20%60%7Breport%5B'run_returncode'%5D%7D%60%22)%0A%20%20%20%20%20%20%20%20if%20report%5B%22run_stdout%22%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20body.append(%22%60%60%60text%5Cn%22%20%2B%20report%5B%22run_stdout%22%5D.rstrip()%20%2B%20%22%5Cn%60%60%60%22)%0A%20%20%20%20%20%20%20%20if%20report%5B%22run_stderr%22%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20body.append(%22%60%60%60text%5Cn%22%20%2B%20report%5B%22run_stderr%22%5D.rstrip()%20%2B%20%22%5Cn%60%60%60%22)%0A%20%20%20%20%20%20%20%20return%20%22%5Cn%22.join(body)%0A%0A%20%20%20%20return%20compile_and_run%2C%20format_report%2C%20run_command%0A%0A%0A%40app.cell%0Adef%20_(Path%2C%20compiler_path%2C%20format_report%2C%20mo%2C%20run_command)%3A%0A%20%20%20%20if%20compiler_path%20is%20None%3A%0A%20%20%20%20%20%20%20%20compiler_summary%20%3D%20mo.md(%22g%2B%2B%20%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E4%BB%A5%E9%99%8D%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AF%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E7%B5%90%E6%9E%9C%E3%81%AE%E8%AA%AC%E6%98%8E%E3%81%AE%E3%81%BF%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82%22)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20version_result%20%3D%20run_command(%5Bcompiler_path%2C%20%22--version%22%5D)%0A%20%20%20%20%20%20%20%20report%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22compile_command%22%3A%20f%22%7Bcompiler_path%7D%20--version%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22compile_returncode%22%3A%20version_result.returncode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22compile_stdout%22%3A%20version_result.stdout%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22compile_stderr%22%3A%20version_result.stderr%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22run_returncode%22%3A%20None%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22run_stdout%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22run_stderr%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22source_path%22%3A%20Path(compiler_path)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20compiler_summary%20%3D%20mo.md(format_report(%22%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E7%A2%BA%E8%AA%8D%22%2C%20report))%0A%20%20%20%20compiler_summary%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20hello_world_source%20%3D%20r'''%0A%20%20%20%20%23include%20%3Ciostream%3E%0A%0A%20%20%20%20int%20main()%20%7B%0A%20%20%20%20%20%20std%3A%3Acout%20%3C%3C%20%22Hello%20World!%22%20%3C%3C%20std%3A%3Aendl%3B%0A%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20'''%0A%20%20%20%20return%20(hello_world_source%2C)%0A%0A%0A%40app.cell%0Adef%20_(compile_and_run%2C%20format_report%2C%20hello_world_source%2C%20mo)%3A%0A%20%20%20%20hello_report%20%3D%20compile_and_run(%22hello_world%22%2C%20hello_world_source)%0A%20%20%20%20mo.md(format_report(%22Hello%20World%22%2C%20hello_report))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E8%A8%88%E7%AE%97%E6%99%82%E9%96%93%E8%A8%88%E6%B8%AC%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20chrono_source%20%3D%20r'''%0A%20%20%20%20%23include%20%3Cchrono%3E%0A%20%20%20%20%23include%20%3Ciostream%3E%0A%20%20%20%20%23include%20%3Cvector%3E%0A%0A%20%20%20%20int%20main()%20%7B%0A%20%20%20%20%20%20%20%20auto%20start%20%3D%20std%3A%3Achrono%3A%3Asystem_clock%3A%3Anow()%3B%0A%20%20%20%20%20%20%20%20std%3A%3Avector%3Cint%3E%20values%3B%0A%20%20%20%20%20%20%20%20constexpr%20int%20N%20%3D%201000%20*%201000%3B%0A%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%20N%3B%20%2B%2Bi)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20values.push_back(i)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20auto%20end%20%3D%20std%3A%3Achrono%3A%3Asystem_clock%3A%3Anow()%3B%0A%20%20%20%20%20%20%20%20auto%20msec%20%3D%20std%3A%3Achrono%3A%3Aduration_cast%3Cstd%3A%3Achrono%3A%3Amilliseconds%3E(end%20-%20start).count()%3B%0A%20%20%20%20%20%20%20%20std%3A%3Acout%20%3C%3C%20msec%20%3C%3C%20%22%20milli%20sec%22%20%3C%3C%20std%3A%3Aendl%3B%0A%20%20%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20'''%0A%20%20%20%20return%20(chrono_source%2C)%0A%0A%0A%40app.cell%0Adef%20_(chrono_source%2C%20compile_and_run%2C%20format_report%2C%20mo)%3A%0A%20%20%20%20chrono_report%20%3D%20compile_and_run(%22chrono_vector%22%2C%20chrono_source)%0A%20%20%20%20mo.md(format_report(%22chrono%20%E3%81%AB%E3%82%88%E3%82%8B%E8%A8%88%E6%B8%AC%22%2C%20chrono_report))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20OpenMP%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20openmp_probe_source%20%3D%20r'''%0A%20%20%20%20%23include%20%3Ccstdio%3E%0A%20%20%20%20%23ifdef%20_OPENMP%0A%20%20%20%20%23include%20%3Comp.h%3E%0A%20%20%20%20%23endif%0A%0A%20%20%20%20int%20main()%20%7B%0A%20%20%20%20%23ifdef%20_OPENMP%0A%20%20%20%20%20%20%20%20std%3A%3Aprintf(%22OpenMP%20enabled%5Cn%22)%3B%0A%20%20%20%20%23else%0A%20%20%20%20%20%20%20%20std%3A%3Aprintf(%22OpenMP%20unavailable%5Cn%22)%3B%0A%20%20%20%20%23endif%0A%20%20%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20'''%0A%20%20%20%20return%20(openmp_probe_source%2C)%0A%0A%0A%40app.cell%0Adef%20_(compile_and_run%2C%20format_report%2C%20mo%2C%20openmp_probe_source)%3A%0A%20%20%20%20openmp_probe_report%20%3D%20compile_and_run(%22openmp_probe%22%2C%20openmp_probe_source%2C%20extra_flags%3D(%22-fopenmp%22%2C))%0A%20%20%20%20mo.md(format_report(%22OpenMP%20%E3%81%AE%E6%9C%89%E5%8A%B9%E5%8C%96%E7%A2%BA%E8%AA%8D%22%2C%20openmp_probe_report))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20openmp_parallel_source%20%3D%20r'''%0A%20%20%20%20%23include%20%3Cchrono%3E%0A%20%20%20%20%23include%20%3Ciostream%3E%0A%20%20%20%20%23include%20%3Cvector%3E%0A%20%20%20%20%23ifdef%20_OPENMP%0A%20%20%20%20%23include%20%3Comp.h%3E%0A%20%20%20%20%23endif%0A%0A%20%20%20%20int%20main()%20%7B%0A%20%20%20%20%20%20%20%20auto%20start%20%3D%20std%3A%3Achrono%3A%3Asystem_clock%3A%3Anow()%3B%0A%20%20%20%20%20%20%20%20constexpr%20int%20N%20%3D%201000%20*%201000%3B%0A%20%20%20%20%20%20%20%20std%3A%3Avector%3Cint%3E%20values(N)%3B%0A%20%20%20%20%23pragma%20omp%20parallel%20for%0A%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%20N%3B%20%2B%2Bi)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20values%5Bi%5D%20%3D%20i%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20auto%20end%20%3D%20std%3A%3Achrono%3A%3Asystem_clock%3A%3Anow()%3B%0A%20%20%20%20%20%20%20%20auto%20msec%20%3D%20std%3A%3Achrono%3A%3Aduration_cast%3Cstd%3A%3Achrono%3A%3Amilliseconds%3E(end%20-%20start).count()%3B%0A%20%20%20%20%20%20%20%20std%3A%3Acout%20%3C%3C%20msec%20%3C%3C%20%22%20milli%20sec%22%20%3C%3C%20std%3A%3Aendl%3B%0A%20%20%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20'''%0A%20%20%20%20return%20(openmp_parallel_source%2C)%0A%0A%0A%40app.cell%0Adef%20_(compile_and_run%2C%20format_report%2C%20mo%2C%20openmp_parallel_source)%3A%0A%20%20%20%20openmp_parallel_report%20%3D%20compile_and_run(%22openmp_parallel%22%2C%20openmp_parallel_source%2C%20extra_flags%3D(%22-fopenmp%22%2C))%0A%20%20%20%20mo.md(format_report(%22OpenMP%20%E3%81%AB%E3%82%88%E3%82%8B%E4%B8%A6%E5%88%97%E5%8C%96%22%2C%20openmp_parallel_report))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20OpenACC%0A%0A%20%20%20%20OpenACC%20%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E6%9C%89%E7%84%A1%E3%81%AF%E7%92%B0%E5%A2%83%E4%BE%9D%E5%AD%98%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%83%AD%E3%82%B0%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E6%AE%8B%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20openacc_source%20%3D%20r'''%0A%20%20%20%20%23include%20%3Cchrono%3E%0A%20%20%20%20%23include%20%3Ciostream%3E%0A%20%20%20%20%23include%20%3Cvector%3E%0A%20%20%20%20%23ifdef%20_OPENACC%0A%20%20%20%20%23include%20%3Copenacc.h%3E%0A%20%20%20%20%23endif%0A%0A%20%20%20%20int%20main()%20%7B%0A%20%20%20%20%20%20%20%20auto%20start%20%3D%20std%3A%3Achrono%3A%3Asystem_clock%3A%3Anow()%3B%0A%20%20%20%20%20%20%20%20constexpr%20int%20N%20%3D%201000%20*%201000%3B%0A%20%20%20%20%20%20%20%20std%3A%3Avector%3Cint%3E%20values(N)%3B%0A%20%20%20%20%23pragma%20acc%20data%20copy(values)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%23pragma%20acc%20kernels%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%20N%3B%20%2B%2Bi)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20values%5Bi%5D%20%3D%20i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20auto%20end%20%3D%20std%3A%3Achrono%3A%3Asystem_clock%3A%3Anow()%3B%0A%20%20%20%20%20%20%20%20auto%20msec%20%3D%20std%3A%3Achrono%3A%3Aduration_cast%3Cstd%3A%3Achrono%3A%3Amilliseconds%3E(end%20-%20start).count()%3B%0A%20%20%20%20%20%20%20%20std%3A%3Acout%20%3C%3C%20msec%20%3C%3C%20%22%20milli%20sec%22%20%3C%3C%20std%3A%3Aendl%3B%0A%20%20%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20'''%0A%20%20%20%20return%20(openacc_source%2C)%0A%0A%0A%40app.cell%0Adef%20_(compile_and_run%2C%20format_report%2C%20mo%2C%20openacc_source)%3A%0A%20%20%20%20openacc_report%20%3D%20compile_and_run(%22openacc_parallel%22%2C%20openacc_source%2C%20extra_flags%3D(%22-fopenacc%22%2C))%0A%20%20%20%20mo.md(format_report(%22OpenACC%20%E3%81%AE%E7%A2%BA%E8%AA%8D%22%2C%20openacc_report))%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
da87bfd08d37d4078ea37d2335c02e29