表示
超・人工知能研究所 Super AI Research Lab トップへ超・人工知能研究所AI Research Lab / ぱそ太郎工事中

since
平成38年9月29日

← 検索結果に戻る

Pythonのループを並列化候補として分類する深層学習手法

Discovering Software Parallelization Points Using Deep Neural Networks

保存した記事を見るこのブラウザに保存します。無料会員で端末間の同期・フォルダ整理
原論文の図

Discovering Software Parallelization Points Using Deep Neural Networksの原論文から掲載した図です。細部はクリックして拡大できます。

原論文の図の説明を読む

Figure 1: Fitness evolution across 30 runs of the genetic algorithm. The plot shows the average, maximum, and minimum fitness per generation.

出典:Discovering Software Parallelization Points Using Deep Neural Networks / arXiv ↗

概要

  • 遺伝的アルゴリズムで生成したPythonコード4,000件を使い、独立したループと依存関係が曖昧なループを分類した。
  • 全特徴を使った30回の平均テスト正解率はDNNが91.37%、CNNが92.70%。実行ごとのばらつきも報告された。
  • 実務で使うには、対象コードの確認済みラベルを用意し、生成コードからの適用可能性と誤判定を検証する必要がある。
補足:編集した模式図で仕組みを確認する

VISUAL EXPLAINER

図でつかむ、Discovering Software Parallelization Points Using Deep Neural Networksの仕組み

左から右へ読む
  1. 01生成Pythonコード
  2. 02トークンを数値化
  3. 03正規化・次元調整
  4. 04ループの分類ラベル

原論文の説明をもとにした模式図です。処理の細部は省略しています。

研究の背景

ループの各反復が互いの結果に依存しなければ、同時に実行する並列化の候補になる。既存システムや他人が書いたコードでは、変数の読み書きを追い、反復間の依存関係を確かめる作業が難しい。

候補を見落とすと性能改善の機会を逃し、依存のあるループを独立と誤認すると計算結果に影響しうる。本研究は、Pythonコードからループの独立性に関する候補ラベルを出し、確認作業を支援する方法を調べた。

手法

著者らは二つの生成器で、反復が独立したループと、変数の再利用や依存する代入を含むループを作った。各コードをキーワード、識別子、演算子などのトークンに分け、同じトークンには同じ数値を割り当てる。例えば「import」を数値1として記録し、コードを数値列に変える。

数値列を正規化し、学習・検証・テストに分割する。全特徴を使う条件に加え、PCA(主成分分析)で数値の項目数を減らし、元のデータのばらつきを一定割合残す条件も試した。DNN(深層ニューラルネットワーク)とCNN(畳み込みニューラルネットワーク)が、独立したクラスか、依存関係が曖昧なクラスかを予測する。

新規性

著者らは、独立したループと、依存関係が曖昧なループを作る別々の生成器を用意し、遺伝的アルゴリズムで学習用コードを生成した。遺伝的アルゴリズムは、候補を選び、コードの一部を交換・変更しながら例を作る手法である。

生成コードを数値列に変え、DNNとCNNによる二値分類を30回ずつ評価した。入力の次元を減らした条件も調べている。対象は並列化できる箇所の候補判定であり、コードの並列実行や変換は評価対象ではない。

従来手法との違い

従来手法として本文が挙げる静的解析は、コードの制御やデータの流れを調べて依存関係を判定する。強化学習では、コードへの操作と、その結果に対する報酬を使って学習する。著者らは生成コードの構造を学習し、ループに分類ラベルを付ける。

実験で同じデータを使って比較したのはDNNとCNNである。全特徴を使う条件ではCNNの平均テスト正解率がやや高かったが、正解率分布の検定では有意差が示されなかった。静的解析や強化学習との同条件での性能比較は示されていない。

実験結果

著者らは生成したPythonコード4,000件を使用し、独立ループと負例を各2,000件とした。学習70%、検証15%、テスト15%に分け、DNNとCNNを各30回評価した。指標にはテスト正解率、損失、適合率、再現率、F1値を用いた。

全特徴を使う条件での平均テスト正解率はDNNが91.37%、CNNが92.70%、標準偏差はそれぞれ7.41、7.53ポイントだった。著者らの正解率分布の検定では有意差は示されていない。PCAで元のばらつきの85%を残したDNNの平均は94.04%で、全特徴とは別条件の結果である。

応用の可能性

編集上の応用案 · 論文が実証した用途とは区別しています。

編集上の応用案:社内のPython製データ処理プログラムで、並列化を調べるループの候補を作業票に並べる。入力は対象コード、出力はループごとの「独立」または「依存関係が曖昧」という予測ラベルとし、担当者が反復間の読み書きを確認する。

必要な学習データは対象プログラムから集めたコードと、確認済みの独立性ラベルである。コード以外のセンサー入力は不要と想定する。対象コードの書き方に合わせたトークン化と再学習を検討するが、実務での精度向上は仮説として検証する。

応用先の候補からNauhに相談できます。

導入時の検証

導入時の検証案 · 対象データでの再評価が必要です。

導入時の検証案:対象のPythonコードからループを収集し、各反復の読み書きを人手で確認して独立性ラベルを付ける。必要な入力はコードとそのラベルであり、追加のセンサーは使わない。まず人手の判定を基準として、論文と同じ分類手順を対象コードに適用する。

次に対象コードの一部でトークン化とモデルを調整し、別に保留したコードで再評価する。「独立」と予測した候補の正しさ、独立ループの検出率、確認に要した時間を測る。負例の定義を固定し、同じコードが学習側と評価側にまたがらないよう点検する。

限界と課題

著者らの全特徴条件では、30回中の最低テスト正解率がDNNで59.33%、CNNで55.83%だった。最悪の実行については、学習時と検証時の正解率の差から過学習を指摘している。平均値だけでは実行ごとの変動を表せない。

編集上の検証事項は、生成コードでの分類が実務コードへ移るか、独立と誤判定したループを人手で発見できるかである。本文には負例を「依存あり」とも「曖昧」とも表す記述があるため、運用前にラベルの判定基準を定める必要がある。

応用先の候補
研究内容と応用案に基づく分類です。業界での導入実績を示すものではありません。

出典

元のタイトル・要旨を確認する(英語)

Discovering Software Parallelization Points Using Deep Neural Networks

This study proposes a deep learning-based approach for discovering loops in programming code according to their potential for parallelization. Two genetic algorithm-based code generators were developed to produce two distinct types of code: (i) independent loops, which are parallelizable, and (ii) ambiguous loops, whose dependencies are unclear, making them impossible to define if the loop is parallelizable or not. The generated code snippets were tokenized and preprocessed to ensure a robust dataset. Two deep learning models - a Deep Neural Network (DNN) and a Convolutional Neural Network (CNN) - were implemented to perform the classification. Based on 30 independent runs, a robust statistical analysis was employed to verify the expected performance of both models, DNN and CNN. The CNN showed a slightly higher mean performance, but the two models had a similar variability. Experiments with varying dataset sizes highlighted the importance of data diversity for model performance. These results demonstrate the feasibility of using deep learning to automate the identification of parallelizable structures in code, offering a promising tool for software optimization and performance improvement.

論文本体の取得範囲に基づく解説。AIが作成した未校閲の記事です。性能の数値は著者の評価条件に依存します。応用例と検証計画は編集上の提案です。解説更新:2026-10-01