Bagikan melalui


C. Tata bahasa OpenMP C dan C++

Pelajari tentang aturan tata bahasa dan ekstensi sintaksis di C dan C++ untuk OpenMP, kerangka kerja pemrograman paralel.

Notasi C.1

Aturan tata bahasa terdiri dari nama untuk non-terminal, diikuti oleh titik dua, diikuti oleh alternatif pengganti pada baris terpisah.

Keikutsertaan istilahekspresi sindikat menunjukkan bahwa istilah bersifat opsional dalam penggantian.

Optseq istilahekspresi syntactic setara dengan istilah-seqmemilih dengan aturan tambahan berikut:

term-seq:
istilah
istilah term-seq
istilah term-seq,

Aturan C.2

Notasi dijelaskan dalam bagian 6.1 dari standar C. Lampiran tata bahasa ini menunjukkan ekstensi ke tata bahasa dasar untuk arahan OpenMP C dan C++.

/* dalam C++ (ISO/IEC 14882:1998) */

statement-seq:
pernyataan
openmp-direktif
pernyataan statement-seq
pernyataan-seq openmp-direktif

/* dalam C90 (ISO/IEC 9899:1990) */

daftar-pernyataan:
pernyataan
openmp-direktif
pernyataan daftar pernyataan
pernyataan-daftar openmp-direktif

/* dalam C99 (ISO/IEC 9899:1999) */

block-item:
deklarasi
pernyataan
openmp-direktif

/* pernyataan standar */

Pernyataan:
openmp-construct

openmp-construct:
konstruksi paralel
untuk konstruksi
sections-construct
konstruksi tunggal
paralel-for-construct
konstruksi bagian paralel
konstruksi master
konstruksi kritis
konstruksi atom
konstruksi yang diurutkan

openmp-direktif:
barrier-direktif
flush-direktif

blok terstruktur:
pernyataan

konstruksi paralel:
blok terstruktur paralel-direktif

direktif paralel:
# pragma omp parallel klausa paraleloptseqbaris baru

klausa paralel:
klausa paralel unik
klausa data

klausa paralel unik:
if ( Ekspresi)
num_threads ( Ekspresi)

untuk konstruksi:
pernyataan iterasi for-directive

untuk direktif:
# pragma omp for untuk klausuloptseqbaris baru

untuk klausul:
unik-untuk-klausa
klausa data
nowait

unik-untuk-klausa:
ordered
schedule ( jenis jadwal)
schedule ( jenis, jadwal Ekspresi )

jenis jadwal:
static
dynamic
guided
runtime

bagian-konstruksi:
direktif-bagian lingkup-bagian

direktif bagian:
# pragma omp sections sections-clauseoptseqbaris baru

sections-clause:
klausa data
nowait

cakupan bagian:
{ section-sequence }

seksi-urutan:
bagian-direktifoptblok terstruktur
urutan-seksi direktif-seksi blok-terstruktur

direktif bagian:
# pragma omp section baris baru

konstruksi tunggal:
blok terstruktur direktif tunggal

direktif tunggal:
# pragma omp single klausa tunggaloptseqbaris baru

klausa tunggal:
klausa data
nowait

paralel-for-construct:
pernyataan iterasi paralel-untuk-direktif

paralel-untuk-direktif:
# pragma omp parallel for paralel-for-clauseoptseqbaris baru

paralel-for-clause:
klausa paralel unik
unik-untuk-klausa
klausa data

paralel-sections-construct:
Lingkup bagian paralel-sections-direktif

paralel-sections-direktif:
# pragma omp parallel sections paralel-sections-clauseoptseqbaris baru

paralel-sections-clause:
klausa paralel unik
klausa data

konstruksi master:
master-direktif blok terstruktur

direktif master:
# pragma omp master baris baru

konstruksi kritis:
blok terstruktur kritis-direktif

direktif kritis:
# pragma omp critical frasa wilayahoptnew-line

frasa wilayah:
(pengidentifikasi)

barrier-direktif:
# pragma omp barrier baris baru

konstruksi atom:
pernyataan ekspresi direktif atom

direktif atom:
# pragma omp atomic baris baru

direktif flush:
# pragma omp flush flush-varsmemilihbaris baru

`flush-vars`:
(daftar variabel)

konstruksi yang diurutkan:
blok-terstruktur arahan-terurut

direktif yang diurutkan:
# pragma omp ordered baris baru

/* deklarasi standar */

deklarasi:
threadprivate-directive

direktif threadprivate:
# pragma omp threadprivate ( daftar) variabel baris baru

klausa data:
private ( daftar variabel)
copyprivate ( daftar variabel)
firstprivate ( daftar variabel)
lastprivate ( daftar variabel)
shared ( daftar variabel)
default ( shared )
default ( none )
reduction ( daftar variabel operator:reduksi)
copyin ( daftar variabel)

operator pengurangan:
 Salah satu dari: + \* - & ^ | && ||

/* dalam C */

daftar variabel:
pengidentifikasi
pengidentifikasi daftar,variabel

/* di C++ */

daftar variabel:
id-expression
ekspresi id daftar,variabel