Loop interchange (original) (raw)

About DBpedia

In compiler theory, loop interchange is the process of exchanging the order of two iteration variables used by a nested loop. The variable used in the inner loop switches to the outer loop, and vice versa. It is often done to ensure that the elements of a multi-dimensional array are accessed in the order in which they are present in memory, improving locality of reference. For example, in the code fragment: for i from 0 to 10 for j from 0 to 20 a[i,j] = i + j loop interchange would result in: for j from 0 to 20 for i from 0 to 10 a[i,j] = i + j

thumbnail

Property Value
dbo:abstract In compiler theory, loop interchange is the process of exchanging the order of two iteration variables used by a nested loop. The variable used in the inner loop switches to the outer loop, and vice versa. It is often done to ensure that the elements of a multi-dimensional array are accessed in the order in which they are present in memory, improving locality of reference. For example, in the code fragment: for i from 0 to 10 for j from 0 to 20 a[i,j] = i + j loop interchange would result in: for j from 0 to 20 for i from 0 to 10 a[i,j] = i + j On occasion, such a transformation may create opportunities to further optimize, such as automatic vectorization of the array assignments. (en) Перестановка циклов (англ. Loop interchange) — оптимизация компилятора при которой меняется порядок итерационных переменных, относящихся к группе вложенных циклов. Итерационная переменная, используемая во внутреннем цикле, перемещается во внешний цикл, и наоборот. Это часто делается, чтобы гарантировать, что элементы многомерных массивов доступны в том порядке, в котором они хранятся в памяти, т.е. для улучшения локальности ссылок. Например, следующий код: for (int j=0; j<10; j++){ for (int i=0; i<20; i++) { y[i][j] = i + j; }} в результате применения оптимизации может быть преобразован в: for (int i=0; i<20; i++){ for (int j=0; j<10; j++) { y[i][j] = i + j; }} В отдельных случаях, такое преобразование может создать контекст для дальнейших оптимизаций, например для векторизации. В то же время, как и любая другая оптимизация компилятора, данная оптимизация может привести к ухудшению производительности. Рассмотрим следующий пример: for (int i=0; i<10; i++){ for (int j=0; j<20; j++) { a[i] = a[i] + b[j][i] * c[i] }} Применение оптимизации в данном случае может улучшить производительность доступа к b[j][i], однако появятся повторные чтения a[i] и c[i] во внутреннем цикле в течение каждой итерации. В результате, эффективность работы может ухудшиться. (ru)
dbo:thumbnail wiki-commons:Special:FilePath/Row_and_column_major_order.svg?width=300
dbo:wikiPageID 1837923 (xsd:integer)
dbo:wikiPageLength 4104 (xsd:nonNegativeInteger)
dbo:wikiPageRevisionID 1052687857 (xsd:integer)
dbo:wikiPageWikiLink dbr:Morgan_Kaufmann_Publishers dbr:Dependence_analysis dbc:Articles_with_example_code dbr:Elsevier dbr:Compiler_theory dbr:CPU_Cache dbr:CPU_cache dbr:C_(programming_language) dbc:Compiler_optimizations dbr:Locality_of_reference dbr:FORTRAN dbr:Array_data_structure dbr:Academic_Press dbr:Automatic_vectorization dbr:Optimizing_compiler dbr:Loop_fission_and_fusion dbr:Loop_splitting dbr:Loop_unrolling dbr:Loop_(computing) dbr:Row-major_order dbr:Compiler_optimization dbr:Loop_skewing dbr:File:Row_and_column_major_order.svg
dbp:wikiPageUsesTemplate dbt:Cite_book dbt:Reflist dbt:Compiler_optimizations
dct:subject dbc:Articles_with_example_code dbc:Compiler_optimizations
rdf:type yago:WikicatCompilerOptimizations yago:Abstraction100002137 yago:Act100030358 yago:Action100037396 yago:Change100191142 yago:ChangeOfState100199130 yago:Event100029378 yago:Improvement100248977 yago:Optimization100260051 yago:PsychologicalFeature100023100 yago:YagoPermanentlyLocatedEntity
rdfs:comment In compiler theory, loop interchange is the process of exchanging the order of two iteration variables used by a nested loop. The variable used in the inner loop switches to the outer loop, and vice versa. It is often done to ensure that the elements of a multi-dimensional array are accessed in the order in which they are present in memory, improving locality of reference. For example, in the code fragment: for i from 0 to 10 for j from 0 to 20 a[i,j] = i + j loop interchange would result in: for j from 0 to 20 for i from 0 to 10 a[i,j] = i + j (en) Перестановка циклов (англ. Loop interchange) — оптимизация компилятора при которой меняется порядок итерационных переменных, относящихся к группе вложенных циклов. Итерационная переменная, используемая во внутреннем цикле, перемещается во внешний цикл, и наоборот. Это часто делается, чтобы гарантировать, что элементы многомерных массивов доступны в том порядке, в котором они хранятся в памяти, т.е. для улучшения локальности ссылок. Например, следующий код: for (int j=0; j<10; j++){ for (int i=0; i<20; i++) { y[i][j] = i + j; }} в результате применения оптимизации может быть преобразован в: (ru)
rdfs:label Loop interchange (en) Перестановка циклов (ru)
owl:sameAs freebase:Loop interchange yago-res:Loop interchange wikidata:Loop interchange dbpedia-ru:Loop interchange https://global.dbpedia.org/id/4r4D9
prov:wasDerivedFrom wikipedia-en:Loop_interchange?oldid=1052687857&ns=0
foaf:depiction wiki-commons:Special:FilePath/Row_and_column_major_order.svg
foaf:isPrimaryTopicOf wikipedia-en:Loop_interchange
is dbo:wikiPageWikiLink of dbr:Enabling_transformation dbr:Normalized_loop dbr:Intel_Fortran_Compiler dbr:Optimizing_compiler dbr:Loop_dependence_analysis dbr:Loop_nest_optimization dbr:Loop_optimization
is foaf:primaryTopic of wikipedia-en:Loop_interchange