CND adalah Python penerjemah sumber-to-sumber yang membuat menggunakan n-dimensi array di C nbsp lebih menyenangkan &; Ini akan mengubah kode ini.:
batal sgemm (float * a, float * b, float * c, int n)
{
& Nbsp; dimensi "fortran" a [n, n];
& Nbsp; dimensi "fortran" b [n, n];
& Nbsp; dimensi c [n, n];
& Nbsp; for (int i = 1; i <= n; i ++)
& Nbsp; for (int j = 1; j <= n; j ++)
& Nbsp; {
& Nbsp; mengambang tmp = 0;
& Nbsp; for (int k = 1; k <= n; k ++)
& Nbsp; tmp + = a [i, k] * b [k, j];
& Nbsp; c [i-1, j-1] = tmp;
& Nbsp;}
}
dalam hal ini:
batal sgemm (float * a, float * b, float * c, int n)
{
& Nbsp; for (int i = 1; i <= n; i ++)
& Nbsp; for (int j = 1; j <= n; j ++)
& Nbsp; {
& Nbsp; mengambang tmp = 0;
& Nbsp; for (int k = 1; k <= n; k ++)
& Nbsp; tmp + = a [((k - 1) * ((n - 1) + 1)) + (i - 1)] * b [((j - 1) * ((n - 1) + 1) ) + (k - 1)];
& Nbsp; c [((i - 1) * n) + (j - 1)] = tmp;
& Nbsp;}
}
Anda juga dapat melihat pada contoh yang lebih komprehensif yang menunjukkan beberapa lonceng dan peluit ekstra.
Satu-satunya efek dari deklarasi dimensi adalah untuk memodifikasi interpretasi array (idx) operator subscript. deklarasi dimensi mematuhi aturan C scoping biasa.
Saya juga ingin untuk dicatat bahwa CND adalah kuat, berbasis parser penerjemah, bukan alat pengganti teks serpihan. Ia mengerti semua C99, plus banyak ekstensi GNU.
Setiap spesifikasi sumbu dalam deklarasi dimensi memiliki bentuk berikut:
mulai: end: langkahnya: leading_dimension
awal dapat diabaikan. end dan langkah juga dapat dihilangkan, tetapi jika entri setelah mereka harus ditentukan, titik dua membuntuti mereka harus tetap di tempat. Sebagai contoh, spesifikasi sumbu: 5 hanya menentukan langkah 5. langkah itu hanya bertindak sebagai multiplier pada indeks. Tidak masuk akal memeriksa apapun yang dilakukan pada deklarasi dimensi. Anda dapat menembak diri sendiri di kaki dengan cara apapun yang Anda suka.
Jika tata letak diberikan sebagai "c" atau tidak diberikan sama sekali, hal-hal berikut ini benar:
- Array diletakkan dalam rangka baris-besar.
- Indeks end diambil untuk menjadi eksklusif, jika ditentukan.
- Default Indeks mulai 0.
Jika tata letak diberikan sebagai "fortran", hal-hal berikut ini benar:
- Array diletakkan dalam urutan kolom-besar.
- Indeks end diambil untuk menjadi inklusif, jika ditentukan.
- Default Indeks mulai 1.
(Most) dari pengetahuan yang terkandung dalam deklarasi dimensi dapat reobtained pemrograman dengan fungsi follwing:
- Rankof (a)
- Nitemsof (a)
- Lboundof (a, axis)
- Uboundof (a, axis) (mengembalikan ditentukan pengguna batas atas)
- Puboundof (a, axis) (mengembalikan indeks hanya melewati akhir axis)
- Ldimof (a, axis)
- Strideof (a, axis)
Dalam setiap kasus, sumbu harus konstanta integer (bukan ekspresi konstan, bilangan bulat polos).
Instalasi / Penggunaan
Anda dapat memperoleh CND dengan mendownload tarbal dari indeks paket, atau dari github:
& Nbsp; git clone git: //github.com/inducer/cnd.git
& Nbsp; cd cnd
git submodule init
& Nbsp; pembaruan submodule git
Untuk menggunakan CND, cukup tambahkan distribusi-dir / bin ke PATH Anda.
Untuk memulai, jalankan (dari dalam akar cnd):
& Nbsp; contoh cd
& Nbsp; bin ../ / cndcc gcc -std = c99 basic.c
& Nbsp; ./ a.out
Jika Anda ingin kontrol yang lebih halus selama proses penerjemahan, perintah cnd mengekspos hanya terjemahan sumber-to-sumber. Perhatikan cnd yang mengharapkan sumber preprocessed. Anda mungkin lulus -E opsi untuk memiliki cnd menjalankan preprocessor pada sumber Anda untuk Anda. Jalankan:
& Nbsp; cnd -h
untuk mendapatkan bantuan penuh pada antarmuka baris perintah. Anda dapat mengatur variabel lingkungan CND_CPP ke preprocessor yang ingin Anda gunakan.
Apa yang baru dalam rilis ini:
- Sintaks perubahan dari [i, j] untuk [i, j] .
- Masih lebih banyak dukungan parser untuk header kehidupan nyata.
Persyaratan :
- Python
Komentar tidak ditemukan