{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from psyclone.parse.algorithm import parse\n", "_, inv_info = parse(\"shallow_alg.f90\", api=\"gocean1.0\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from psyclone.psyGen import PSyFactory, TransInfo\n", "psy = PSyFactory(\"gocean1.0\", distributed_memory=False).create(inv_info)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dict_keys(['invoke_0', 'invoke_1', 'invoke_2', 'invoke_3'])\n", "\u001b[37mGOInvokeSchedule\u001b[0m[invoke='invoke_0']\n", " 0: \u001b[31mLoop\u001b[0m[type='outer', field_space='go_cu', it_space='go_internal_pts']\n", " \u001b[33mLiteral\u001b[0m[value:'2']\n", " \u001b[33mLiteral\u001b[0m[value:'jstop']\n", " \u001b[33mLiteral\u001b[0m[value:'1']\n", " \u001b[37mSchedule\u001b[0m[]\n", " 0: \u001b[31mLoop\u001b[0m[type='inner', field_space='go_cu', it_space='go_internal_pts']\n", " \u001b[33mLiteral\u001b[0m[value:'2']\n", " \u001b[33mLiteral\u001b[0m[value:'istop+1']\n", " \u001b[33mLiteral\u001b[0m[value:'1']\n", " \u001b[37mSchedule\u001b[0m[]\n", " 0: \u001b[35mCodedKern\u001b[0m compute_cu_code(cu_fld,p_fld,u_fld) [module_inline=False]\n", " 1: \u001b[31mLoop\u001b[0m[type='outer', field_space='go_cv', it_space='go_internal_pts']\n", " \u001b[33mLiteral\u001b[0m[value:'2']\n", " \u001b[33mLiteral\u001b[0m[value:'jstop+1']\n", " \u001b[33mLiteral\u001b[0m[value:'1']\n", " \u001b[37mSchedule\u001b[0m[]\n", " 0: \u001b[31mLoop\u001b[0m[type='inner', field_space='go_cv', it_space='go_internal_pts']\n", " \u001b[33mLiteral\u001b[0m[value:'2']\n", " \u001b[33mLiteral\u001b[0m[value:'istop']\n", " \u001b[33mLiteral\u001b[0m[value:'1']\n", " \u001b[37mSchedule\u001b[0m[]\n", " 0: \u001b[35mCodedKern\u001b[0m compute_cv_code(cv_fld,p_fld,v_fld) [module_inline=False]\n", " 2: \u001b[31mLoop\u001b[0m[type='outer', field_space='go_cf', it_space='go_internal_pts']\n", " \u001b[33mLiteral\u001b[0m[value:'2']\n", " \u001b[33mLiteral\u001b[0m[value:'jstop+1']\n", " \u001b[33mLiteral\u001b[0m[value:'1']\n", " \u001b[37mSchedule\u001b[0m[]\n", " 0: \u001b[31mLoop\u001b[0m[type='inner', field_space='go_cf', it_space='go_internal_pts']\n", " \u001b[33mLiteral\u001b[0m[value:'2']\n", " \u001b[33mLiteral\u001b[0m[value:'istop+1']\n", " \u001b[33mLiteral\u001b[0m[value:'1']\n", " \u001b[37mSchedule\u001b[0m[]\n", " 0: \u001b[35mCodedKern\u001b[0m compute_z_code(z_fld,p_fld,u_fld,v_fld,dx,dy) [module_inline=False]\n", " 3: \u001b[31mLoop\u001b[0m[type='outer', field_space='go_ct', it_space='go_internal_pts']\n", " \u001b[33mLiteral\u001b[0m[value:'2']\n", " \u001b[33mLiteral\u001b[0m[value:'jstop']\n", " \u001b[33mLiteral\u001b[0m[value:'1']\n", " \u001b[37mSchedule\u001b[0m[]\n", " 0: \u001b[31mLoop\u001b[0m[type='inner', field_space='go_ct', it_space='go_internal_pts']\n", " \u001b[33mLiteral\u001b[0m[value:'2']\n", " \u001b[33mLiteral\u001b[0m[value:'istop']\n", " \u001b[33mLiteral\u001b[0m[value:'1']\n", " \u001b[37mSchedule\u001b[0m[]\n", " 0: \u001b[35mCodedKern\u001b[0m compute_h_code(h_fld,p_fld,u_fld,v_fld) [module_inline=False]\n" ] } ], "source": [ "print(psy.invokes.names)\n", "sched = psy.invokes.get('invoke_0').schedule\n", "print(sched.view())\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "graph = sched.dag()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "GOInvokeSchedule_start\n", "\n", "GOInvokeSchedule_start\n", "\n", "\n", "\n", "loop_[outer]_1_start\n", "\n", "loop_[outer]_1_start\n", "\n", "\n", "\n", "GOInvokeSchedule_start->loop_[outer]_1_start\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_12_start\n", "\n", "loop_[outer]_12_start\n", "\n", "\n", "\n", "GOInvokeSchedule_start->loop_[outer]_12_start\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_23_start\n", "\n", "loop_[outer]_23_start\n", "\n", "\n", "\n", "GOInvokeSchedule_start->loop_[outer]_23_start\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_34_start\n", "\n", "loop_[outer]_34_start\n", "\n", "\n", "\n", "GOInvokeSchedule_start->loop_[outer]_34_start\n", "\n", "\n", "\n", "\n", "\n", "GOInvokeSchedule_end\n", "\n", "GOInvokeSchedule_end\n", "\n", "\n", "\n", "node_2\n", "\n", "node_2\n", "\n", "\n", "\n", "loop_[outer]_1_start->node_2\n", "\n", "\n", "\n", "\n", "\n", "node_3\n", "\n", "node_3\n", "\n", "\n", "\n", "loop_[outer]_1_start->node_3\n", "\n", "\n", "\n", "\n", "\n", "node_4\n", "\n", "node_4\n", "\n", "\n", "\n", "loop_[outer]_1_start->node_4\n", "\n", "\n", "\n", "\n", "\n", "Schedule_start\n", "\n", "Schedule_start\n", "\n", "\n", "\n", "loop_[outer]_1_start->Schedule_start\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_1_end\n", "\n", "loop_[outer]_1_end\n", "\n", "\n", "\n", "loop_[outer]_1_end->GOInvokeSchedule_end\n", "\n", "\n", "\n", "\n", "\n", "node_2->loop_[outer]_1_end\n", "\n", "\n", "\n", "\n", "\n", "node_3->loop_[outer]_1_end\n", "\n", "\n", "\n", "\n", "\n", "node_4->loop_[outer]_1_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_6_start\n", "\n", "loop_[inner]_6_start\n", "\n", "\n", "\n", "Schedule_start->loop_[inner]_6_start\n", "\n", "\n", "\n", "\n", "\n", "kernel_compute_cu_code_11\n", "\n", "kernel_compute_cu_code_11\n", "\n", "\n", "\n", "Schedule_start->kernel_compute_cu_code_11\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_17_start\n", "\n", "loop_[inner]_17_start\n", "\n", "\n", "\n", "Schedule_start->loop_[inner]_17_start\n", "\n", "\n", "\n", "\n", "\n", "kernel_compute_cv_code_22\n", "\n", "kernel_compute_cv_code_22\n", "\n", "\n", "\n", "Schedule_start->kernel_compute_cv_code_22\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_28_start\n", "\n", "loop_[inner]_28_start\n", "\n", "\n", "\n", "Schedule_start->loop_[inner]_28_start\n", "\n", "\n", "\n", "\n", "\n", "kernel_compute_z_code_33\n", "\n", "kernel_compute_z_code_33\n", "\n", "\n", "\n", "Schedule_start->kernel_compute_z_code_33\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_39_start\n", "\n", "loop_[inner]_39_start\n", "\n", "\n", "\n", "Schedule_start->loop_[inner]_39_start\n", "\n", "\n", "\n", "\n", "\n", "kernel_compute_h_code_44\n", "\n", "kernel_compute_h_code_44\n", "\n", "\n", "\n", "Schedule_start->kernel_compute_h_code_44\n", "\n", "\n", "\n", "\n", "\n", "Schedule_end\n", "\n", "Schedule_end\n", "\n", "\n", "\n", "Schedule_end->loop_[outer]_1_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_6_end\n", "\n", "loop_[inner]_6_end\n", "\n", "\n", "\n", "Schedule_end->loop_[inner]_6_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_12_end\n", "\n", "loop_[outer]_12_end\n", "\n", "\n", "\n", "Schedule_end->loop_[outer]_12_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_17_end\n", "\n", "loop_[inner]_17_end\n", "\n", "\n", "\n", "Schedule_end->loop_[inner]_17_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_23_end\n", "\n", "loop_[outer]_23_end\n", "\n", "\n", "\n", "Schedule_end->loop_[outer]_23_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_28_end\n", "\n", "loop_[inner]_28_end\n", "\n", "\n", "\n", "Schedule_end->loop_[inner]_28_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_34_end\n", "\n", "loop_[outer]_34_end\n", "\n", "\n", "\n", "Schedule_end->loop_[outer]_34_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_39_end\n", "\n", "loop_[inner]_39_end\n", "\n", "\n", "\n", "Schedule_end->loop_[inner]_39_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_6_start->Schedule_start\n", "\n", "\n", "\n", "\n", "\n", "node_7\n", "\n", "node_7\n", "\n", "\n", "\n", "loop_[inner]_6_start->node_7\n", "\n", "\n", "\n", "\n", "\n", "node_8\n", "\n", "node_8\n", "\n", "\n", "\n", "loop_[inner]_6_start->node_8\n", "\n", "\n", "\n", "\n", "\n", "node_9\n", "\n", "node_9\n", "\n", "\n", "\n", "loop_[inner]_6_start->node_9\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_6_end->Schedule_end\n", "\n", "\n", "\n", "\n", "\n", "node_7->loop_[inner]_6_end\n", "\n", "\n", "\n", "\n", "\n", "node_8->loop_[inner]_6_end\n", "\n", "\n", "\n", "\n", "\n", "node_9->loop_[inner]_6_end\n", "\n", "\n", "\n", "\n", "\n", "kernel_compute_cu_code_11->Schedule_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_12_start->Schedule_start\n", "\n", "\n", "\n", "\n", "\n", "node_13\n", "\n", "node_13\n", "\n", "\n", "\n", "loop_[outer]_12_start->node_13\n", "\n", "\n", "\n", "\n", "\n", "node_14\n", "\n", "node_14\n", "\n", "\n", "\n", "loop_[outer]_12_start->node_14\n", "\n", "\n", "\n", "\n", "\n", "node_15\n", "\n", "node_15\n", "\n", "\n", "\n", "loop_[outer]_12_start->node_15\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_12_end->GOInvokeSchedule_end\n", "\n", "\n", "\n", "\n", "\n", "node_13->loop_[outer]_12_end\n", "\n", "\n", "\n", "\n", "\n", "node_14->loop_[outer]_12_end\n", "\n", "\n", "\n", "\n", "\n", "node_15->loop_[outer]_12_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_17_start->Schedule_start\n", "\n", "\n", "\n", "\n", "\n", "node_18\n", "\n", "node_18\n", "\n", "\n", "\n", "loop_[inner]_17_start->node_18\n", "\n", "\n", "\n", "\n", "\n", "node_19\n", "\n", "node_19\n", "\n", "\n", "\n", "loop_[inner]_17_start->node_19\n", "\n", "\n", "\n", "\n", "\n", "node_20\n", "\n", "node_20\n", "\n", "\n", "\n", "loop_[inner]_17_start->node_20\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_17_end->Schedule_end\n", "\n", "\n", "\n", "\n", "\n", "node_18->loop_[inner]_17_end\n", "\n", "\n", "\n", "\n", "\n", "node_19->loop_[inner]_17_end\n", "\n", "\n", "\n", "\n", "\n", "node_20->loop_[inner]_17_end\n", "\n", "\n", "\n", "\n", "\n", "kernel_compute_cv_code_22->Schedule_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_23_start->Schedule_start\n", "\n", "\n", "\n", "\n", "\n", "node_24\n", "\n", "node_24\n", "\n", "\n", "\n", "loop_[outer]_23_start->node_24\n", "\n", "\n", "\n", "\n", "\n", "node_25\n", "\n", "node_25\n", "\n", "\n", "\n", "loop_[outer]_23_start->node_25\n", "\n", "\n", "\n", "\n", "\n", "node_26\n", "\n", "node_26\n", "\n", "\n", "\n", "loop_[outer]_23_start->node_26\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_23_end->GOInvokeSchedule_end\n", "\n", "\n", "\n", "\n", "\n", "node_24->loop_[outer]_23_end\n", "\n", "\n", "\n", "\n", "\n", "node_25->loop_[outer]_23_end\n", "\n", "\n", "\n", "\n", "\n", "node_26->loop_[outer]_23_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_28_start->Schedule_start\n", "\n", "\n", "\n", "\n", "\n", "node_29\n", "\n", "node_29\n", "\n", "\n", "\n", "loop_[inner]_28_start->node_29\n", "\n", "\n", "\n", "\n", "\n", "node_30\n", "\n", "node_30\n", "\n", "\n", "\n", "loop_[inner]_28_start->node_30\n", "\n", "\n", "\n", "\n", "\n", "node_31\n", "\n", "node_31\n", "\n", "\n", "\n", "loop_[inner]_28_start->node_31\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_28_end->Schedule_end\n", "\n", "\n", "\n", "\n", "\n", "node_29->loop_[inner]_28_end\n", "\n", "\n", "\n", "\n", "\n", "node_30->loop_[inner]_28_end\n", "\n", "\n", "\n", "\n", "\n", "node_31->loop_[inner]_28_end\n", "\n", "\n", "\n", "\n", "\n", "kernel_compute_z_code_33->Schedule_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_34_start->Schedule_start\n", "\n", "\n", "\n", "\n", "\n", "node_35\n", "\n", "node_35\n", "\n", "\n", "\n", "loop_[outer]_34_start->node_35\n", "\n", "\n", "\n", "\n", "\n", "node_36\n", "\n", "node_36\n", "\n", "\n", "\n", "loop_[outer]_34_start->node_36\n", "\n", "\n", "\n", "\n", "\n", "node_37\n", "\n", "node_37\n", "\n", "\n", "\n", "loop_[outer]_34_start->node_37\n", "\n", "\n", "\n", "\n", "\n", "loop_[outer]_34_end->GOInvokeSchedule_end\n", "\n", "\n", "\n", "\n", "\n", "node_35->loop_[outer]_34_end\n", "\n", "\n", "\n", "\n", "\n", "node_36->loop_[outer]_34_end\n", "\n", "\n", "\n", "\n", "\n", "node_37->loop_[outer]_34_end\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_39_start->Schedule_start\n", "\n", "\n", "\n", "\n", "\n", "node_40\n", "\n", "node_40\n", "\n", "\n", "\n", "loop_[inner]_39_start->node_40\n", "\n", "\n", "\n", "\n", "\n", "node_41\n", "\n", "node_41\n", "\n", "\n", "\n", "loop_[inner]_39_start->node_41\n", "\n", "\n", "\n", "\n", "\n", "node_42\n", "\n", "node_42\n", "\n", "\n", "\n", "loop_[inner]_39_start->node_42\n", "\n", "\n", "\n", "\n", "\n", "loop_[inner]_39_end->Schedule_end\n", "\n", "\n", "\n", "\n", "\n", "node_40->loop_[inner]_39_end\n", "\n", "\n", "\n", "\n", "\n", "node_41->loop_[inner]_39_end\n", "\n", "\n", "\n", "\n", "\n", "node_42->loop_[inner]_39_end\n", "\n", "\n", "\n", "\n", "\n", "kernel_compute_h_code_44->Schedule_end\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "graph" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 4 }