プログラミングパラダイム
(プログラミングモデル から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/09/29 13:14 UTC 版)
プログラミングパラダイム(英: programming paradigm)とは、プログラミングにおける模範である。
- 1 プログラミングパラダイムとは
- 2 プログラミングパラダイムの概要
プログラミングモデル
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/05 05:56 UTC 版)
「OpenCL」の記事における「プログラミングモデル」の解説
OpenCLのプログラム(アプリケーションソフトウェア)は、GLSLを利用したOpenGLプログラムとほぼ同じ要領で開発することができ、OpenCL C/C++を利用したデバイスコード(カーネルコード)と、OpenCL APIを利用したホストコードを別々に記述する。カーネルコードのコンパイルは、clCreateProgramWithSource()関数経由でデバイスドライバーが実行する。CUDAプログラムのような専用オフライン コンパイラ(nvcc)を必要としないため、様々なプラットフォームへの展開が容易となることが利点である。ただしカーネルコードの初回の実行時コンパイル(オンライン コンパイル)に時間がかかるなどのデメリットも存在する。この点に関しては、実運用時にはclCreateProgramWithSource()関数によるオンライン コンパイルは行なわず、clGetProgramInfo()関数とclCreateProgramWithBinary()関数を用いてコンパイル済みバイナリからプログラムオブジェクトを生成する方法もある が、ベンダーごとのOpenCLバイナリ間における互換性は保証されない。デバイスドライバーにカーネル記述言語のオンラインコンパイラの役割を持たせることで、ベンダー独自の拡張を実装しやすくなるが、コンパイラ品質はデバイスドライバーの品質に左右される。 なお、OpenCL 1.2、2.0、2.1、2.2では、SPIR(英語版)およびSPIR-Vと呼ばれる中間表現(中間言語、バイトコード)をサポートすることにより、事前コンパイルしたベンダーに依存しないカーネルコードを実行することができるようになる。ただし、SPIR 1.2およびSPIR 2.0はOpenCL 1.2およびOpenCL 2.0の拡張機能(cl_khr_spir)となっており、サポート必須の機能ではない。一方、SPIR-VはOpenCL 2.1/2.2のコア機能となる。OpenCL 2.1ではSPIR-V 1.0を、OpenCL 2.2ではSPIR-V 1.0/1.1/1.2をサポートするが、OpenCL 3.0ではSPIR-Vはコア機能から外れ、サポート状況に関しては実行時の問い合わせが必要となった。
※この「プログラミングモデル」の解説は、「OpenCL」の解説の一部です。
「プログラミングモデル」を含む「OpenCL」の記事については、「OpenCL」の概要を参照ください。
プログラミングモデル
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/04/21 02:01 UTC 版)
「データゼネラルNova」の記事における「プログラミングモデル」の解説
命令フォーマットは、大きく分けて以下の3つの機能に分類される。1)レジスタ間操作、2)メモリ参照、3)入力/出力。 各命令は1語で構成されていた。 レジスタ間操作はRISCに近いビット効率で、レジスタデータを操作する命令は、テストやシフトを実行し、結果の破棄も可能であった。 ハードウェアのオプションとして、整数乗算除算ユニット、 浮動小数点ユニット (単精度および倍精度)、メモリ管理などがあった 。 初期のNovaには、 パンチテープの BASICインタプリタが付属していた。 製品が成長するにつれ、データゼネラルはNovaコンピュータ用に多くの言語を開発し、一貫したオペレーティングシステムの下で動作するようになった。 FORTRAN IV 、 ALGOL 、拡張BASIC、データゼネラルBusiness Basic(英語版)、Interactive COBOL 、およびいくつかのアセンブラがデータゼネラルから提供された。 サードパーティのベンダーやユーザーコミュニティは、 Forth 、 Lisp 、 BCPL 、 C 、 ALGOL 、およびCOBOLとBASICの他の独自バージョンで製品を拡張した。
※この「プログラミングモデル」の解説は、「データゼネラルNova」の解説の一部です。
「プログラミングモデル」を含む「データゼネラルNova」の記事については、「データゼネラルNova」の概要を参照ください。
プログラミングモデル
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/04/11 07:39 UTC 版)
「Blue Gene」の記事における「プログラミングモデル」の解説
Blue Gene/Lのシステム構成は、各計算ノードで独立して実行されるプロセスがネットワークを介して互いにデータを交換するメッセージパッシングモデルを想定した設計となっている。メッセージパッシングにおいてデファクトスタンダードとして利用されるMessage Passing Interface (MPI)をサポートしていることから、MPIを利用して実装された既存のスーパーコンピュータ向け並列アプリケーションの多くは移植するだけでBlue Gene/Lの特徴を生かして実行される。しかし、ネットワークで述べたように通信の局所性が乏しい、また処理全体の中で通信時間の比率が高いもの、元々並列度が低いアプリケーションについては、より低遅延・広帯域なネットワークを備える他のシステムに比べ低い実行効率しか得られない。Blue Geneは、通信に対する計算の比率が高いアプリケーションほどより有利に実行可能である。
※この「プログラミングモデル」の解説は、「Blue Gene」の解説の一部です。
「プログラミングモデル」を含む「Blue Gene」の記事については、「Blue Gene」の概要を参照ください。
プログラミングモデル
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/12 04:28 UTC 版)
「Intel 8086」の記事における「プログラミングモデル」の解説
C言語から生成されたプログラムにおいて、コードとデータのそれぞれで、デフォルトのアクセスをセグメント内のオフセットのみとするか、セグメントも併用してアクセスするか、の違いにより「コード・データともセグメント内」「コードのみセグメント内」「データのみセグメント内」「コード・データともセグメント併用」といったパターンが存在し、ライブラリ等はそれぞれ異なるものを使うため煩雑であった。デフォルトでないアドレッシングには、ポインタに far や near という修飾を付ける。プログラミングモデルあるいはメモリモデル等ともいう。 詳細は以下の通り。 Tiny コードセグメントとデータセグメントが共通で、両者合わせて64Kバイト以内。拡張子が"COM"の実行ファイルがこのモデルである。 Small コードセグメント、データセグメントのどちらも64Kバイト以内。 Compact コードセグメントは64Kバイト以内、データセグメントはfarポインタ。コードは小さいが、扱うデータが大きいときに用いられる。 Medium コードセグメントはfarポインタ、データセグメントは64Kバイト以内。コードが大きくても、扱うデータが小さい場合に利用される。 Large コードセグメント、データセグメントのどちらもfarポインタ。変数(配列)のサイズは64Kバイトに制限される。 Huge 基本的にLargeと同じだが、配列などのメモリオブジェクトのサイズが64Kバイトに制限されない。 効率などの理由から、コンパイルはSmallモデルとし、必要に応じて明示的にセグメント操作をプログラマが指示する(適宜farまたはhugeポインタを使用し、また動的なメモリ確保によって64KBの制限を超える)ような作りのプログラムも多い。
※この「プログラミングモデル」の解説は、「Intel 8086」の解説の一部です。
「プログラミングモデル」を含む「Intel 8086」の記事については、「Intel 8086」の概要を参照ください。
- プログラミングモデルのページへのリンク