LINUX.ORG.RU

Fortran 2018: новый стандарт языка

 , ,


4

5

2-го декабря 2018-го года Международная Организация по Стандартизации (ISO) опубликовала ISO/IEC 1539:2018, ранее известный под названием Fortran 2015.

Новый стандарт расширяет возможности взаимодействия с программами на C и параллельного программирования:

  • Введён новый тип CFI_cdesc_t, содержащий информацию о типе элементов, ранге, размере передаваемого массива и способе выделения его памяти. Ранее на сторону программы, написанной на языке C, вместо массивов чисел можно было передать только «голые» указатели, и о соблюдении границ массивов приходилось заботиться вручную.
  • Введено понятие команды (team), позволяющее разделить выполняющуюся на кластере программу на несколько сравнительно независимых подмножеств процессов.
  • Появилась возможность обработки ошибок отдельных процессов кластера (fail image и аргумент stat= вызовов change team, end team, event post, form team, sync all, sync images, sync team).
  • Добавлены атомарные операции над переменными (atomic_add, atomic_and, atomic_or, atomic_xor, atomic_fetch_add, atomic_fetch_and, atomic_fetch_or, atomic_fetch_xor, atomic_cas).
  • Улучшена совместимость со стандартом ISO/IEC/IEEE 60559:2011 для чисел с плавающей запятой.

Следующая версия стандарта временно называется Fortran 202x.

Новые возможности Fortran 2018

Бесплатно доступный черновик стандарта

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: Shaman007 (всего исправлений: 1)
Ответ на: комментарий от jamy

Не вдаваясь в подробности, просто напишу, что в фортране перемножение двух матриц будет записываться как A*B

grem ★★★★★
()
Ответ на: комментарий от grem

Ну что я могу сказать? Склоняю голову ;)

jamy
()
Ответ на: комментарий от grem

Не вдаваясь в подробности, просто напишу, что в фортране перемножение двух матриц будет записываться как A*B

Только лучше это делать через BLAS. Скорость перемножения гораздо выше (если большие матрицы).

Zodd ★★★★★
()
Ответ на: комментарий от grem

Это неверно. При таком перемножении матрицы будут помножены поэлементно, т.е. это аналог кода вида

do i = 1, size(A, DIM=1)
    do j = 1, size(A, DIM=2)
        C[i, j] = A[i, j] * B[i, j]
    enddo
enddo
Нормальное перемножение матриц как в линейной алгебре --- это
C = matmul(A, B)

Vudod ★★★★★
()
Ответ на: комментарий от Vudod

Нормальное перемножение матриц как в линейной алгебре --- это
C = matmul(A, B)

Как так? В убогих крестах нормальное перемножение матриц — это A*B, а в богом данном научным сотрудникам Фортране это какой-то занюханый matmul(A,B)... ;)))

eao197 ★★★★★
()
Ответ на: комментарий от eao197

В крестах по умолчанию ничего не поддерживается. Там нужно делать переопределение операции «*». В Фортране эта операция уже определена и не только для матриц, но и для массивов произвольной размерности, она приводит к поэлементному умножению, как я показал выше. И это свойство используется очень часто. А операция именно матричного умножения --- это функция matmul. Тут просто следование традиции. Ничего ущербного тут нет: вот если бы «*» делало с одномерными массивами одно, с двумерными --- другое, а с трёхмерными --- третье, то это было бы действительно ужасно. А так оба функционала реализованы стандартными средствами языка: функция matmul является частью ядра и импортировать ничего не нужно, хотя возможно указать компилятору заменить стандартную реализацию реализацией из BLAS.

Vudod ★★★★★
()
Ответ на: комментарий от Vudod

А операция именно матричного умножения --- это функция matmul. Тут просто следование традиции.

Какой-такой традиции? Это в какой традиции матричное умножение записывается как matmul?

Ну, это не говоря про то, что вы обратили внимание на количество смайликов.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Как так? В убогих крестах нормальное перемножение матриц — это A*B, а в богом данном научным сотрудникам Фортране это какой-то занюханый matmul(A,B)... ;)))

В крестах нет перемножения матриц. Там даже нет стандартной библиотеки работы с матрицами. Нужно подключать библиотеки типа boost.

И второе. А ты уверено, что перегрузка операции * будет работать правильно, без расхода лишней памяти и быстро как matmul в фортране?

Zodd ★★★★★
()
Ответ на: комментарий от Vudod

Посыпал голову пеплом. Как такое можно было забыть? :(

grem ★★★★★
()
Ответ на: комментарий от Zodd

В крестах нет перемножения матриц.

Надо же, а мужики и не знают!

Там даже нет стандартной библиотеки работы с матрицами.

Что ж вы остановились на полдороги, давайте совсем уже сорвем покровы: там даже нет такого понятия, как матрица!

А ты уверено, что перегрузка операции * будет работать правильно, без расхода лишней памяти и быстро как matmul в фортране

Пилять, ну дебилизм.

Смайлики все видели в сообщении? Нет? А они там есть.

eao197 ★★★★★
()
Ответ на: комментарий от Zodd

Мне кажется, что там уже всё встроено.

ZERG ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.