713 Тем для обсуждения
6,530 Открытых обсуждений
- Association for Computing Machinery TechNews (ACM)
- Go Parallel! (Dr. Dobbs)
- HPCwire (Tabor Communications, Inc.)
- insideHPC (John West)
- Joe Duffy's Weblog (Microsoft)
- Microsoft Parallel Programming Development Center (Microsoft Germany)
- MultiCoreInfo.com
- scalability.org (Scalable Informatics)
- Software Dev Blog (Intel Germany)
- Soft Talk Blog (Intel United Kingdom)
- The Moth (Microsoft)
Возможность расширять типы в FORTRAN 2003 (EXTENDS)
Kirill Mavrodiev (Intel) (22 пост(а)) 22.07.2009 23:03
Раз уж затронул тему новых фич в фортране, то стоит рассказать о возможности расширять типы EXTENDS.
Еще в F95 появилась возможность помещать типы в уже созданные пользовательские типы, но в этом случае надо четко помнить и осознавать структуры типов. Теперь в F2003 можно просто расширять имеющийся тип, что приводит к уменьшению количества рабочих строк в сорсах. ВАЖНО: Эта фиса работает только с расширяемыми типами, т.е. не работает со спецификаторами SEQUENCE и BIND. Рассмотрим пример:
MODULE TYPES
TYPE ANIMAL
CHARACTER (LEN=25) VAR_NAME
END TYPE ANIMAL
TYPE, EXTENDS (ANIMAL) :: ANIMALS_COLOR
CHARACTER (LEN=25) VAR_COLOR
END TYPE ANIMALS_COLOR
TYPE, EXTENDS(ANIMALS_COLOR) :: ANIMALS_SOUND
CHARACTER (LEN=25) VAR_SOUND
END TYPE ANIMALS_SOUND
END MODULE TYPES
PROGRAM MAIN
USE TYPES
TYPE(ANIMALS_SOUND) ZOO
ZOO%VAR_NAME = "CTHULHU"
ZOO%VAR_COLOR = "green"
ZOO%VAR_SOUND = "KREVETKO"
PRINT *, 'I am ', ZOO%VAR_COLOR, ZOO%VAR_NAME
PRINT *, ZOO%VAR_SOUND
END PROGRAM MAIN
Также хорошей новой фишкой стандарта можно считать появление селектора типов: SELECT TYPE. Рассмотрим расширенный предыдущий пример:
PROGRAM MAIN
USE TYPES
TYPE(ANIMALS_COLOR), TARGET :: DUMB_ZOO
TYPE(ANIMALS_SOUND), TARGET :: TALKING_ZOO
CLASS(ANIMAL), POINTER :: ZOO
ZOO => DUMB_ZOO
SELECT TYPE ( FOREST => ZOO )
TYPE IS (ANIMALS_COLOR )
PRINT *, FOREST%VAR_NAME, FOREST%VAR_COLOR ! This block gets executed
TYPE IS ( ANIMALS_SOUND )
PRINT *, FOREST%VAR_NAME, FOREST%VAR_COLOR , FOREST%VAR_SOUND
END SELECT
END PROGRAM MAIN
Ну очень похожа на сишный CASE. Ведь так?
С первого взгляда бесполезная фича, т.к. она плодит лишние ветвления, что в свою очередь понижает производительность. Но с другой стороны, позволяет вместо написания н-ого количества подпрограмм(subroutine) только описать одну универсальную. Ну если хот спот попадает именно на эту функцию, то из двух зол придется выбирать меньшее....
Категории: Intel Software Network, Разработка софта
Метки: FORTRAN, Fortran 2003
Пожалуйста, обратитесь к странице Уведомление об оптимизации для более подробной информации относительно производительности и оптимизации в программных продуктах компании Intel.

