Toru Koizumi, Satoshi Nakae, A. Fukuda, H. Irie, S. Sakai
{"title":"利用STRAIGHT编译器减少指令增加开销","authors":"Toru Koizumi, Satoshi Nakae, A. Fukuda, H. Irie, S. Sakai","doi":"10.1109/CANDARW.2018.00026","DOIUrl":null,"url":null,"abstract":"It is effective to remove false dependencies to efficiently perform out-of-order (OoO) execution which improves single thread performance. Hardware register renaming removes these dependencies, but it is one of the bottlenecks of the processor because of its complexity. The use of a STRAIGHT architecture is one of the approaches that allow the compiler to remove these dependencies. Because the source operand is specified as the distance between the producer instruction and consumer instruction and there is no register overwriting, no false dependency occurs. Instead, the compiler must generate code that satisfies the constraint of specifying operands as constant distances that are not dependent on the execution path. Although the basic algorithms for realizing the constraint are already known, the machine code generated thereby cannot achieve high performance because it is necessary to execute many inter-register transfer instructions added by compiler to satisfy the constraints. This paper presents an efficient algorithm that uses data flow analysis to determine the value causing an increase in the number of executed instructions and improve the performance by spilling them on the stack. We developed a compiler that implements the proposed method using LLVM and evaluated using CoreMark as a benchmark. The number of executed instructions was reduced by approximately 31 %, and the execution performance improved by up to 32 %.","PeriodicalId":329439,"journal":{"name":"2018 Sixth International Symposium on Computing and Networking Workshops (CANDARW)","volume":"58 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"2018-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"1","resultStr":"{\"title\":\"Reduction of Instruction Increase Overhead by STRAIGHT Compiler\",\"authors\":\"Toru Koizumi, Satoshi Nakae, A. Fukuda, H. Irie, S. Sakai\",\"doi\":\"10.1109/CANDARW.2018.00026\",\"DOIUrl\":null,\"url\":null,\"abstract\":\"It is effective to remove false dependencies to efficiently perform out-of-order (OoO) execution which improves single thread performance. Hardware register renaming removes these dependencies, but it is one of the bottlenecks of the processor because of its complexity. The use of a STRAIGHT architecture is one of the approaches that allow the compiler to remove these dependencies. Because the source operand is specified as the distance between the producer instruction and consumer instruction and there is no register overwriting, no false dependency occurs. Instead, the compiler must generate code that satisfies the constraint of specifying operands as constant distances that are not dependent on the execution path. Although the basic algorithms for realizing the constraint are already known, the machine code generated thereby cannot achieve high performance because it is necessary to execute many inter-register transfer instructions added by compiler to satisfy the constraints. This paper presents an efficient algorithm that uses data flow analysis to determine the value causing an increase in the number of executed instructions and improve the performance by spilling them on the stack. We developed a compiler that implements the proposed method using LLVM and evaluated using CoreMark as a benchmark. The number of executed instructions was reduced by approximately 31 %, and the execution performance improved by up to 32 %.\",\"PeriodicalId\":329439,\"journal\":{\"name\":\"2018 Sixth International Symposium on Computing and Networking Workshops (CANDARW)\",\"volume\":\"58 1\",\"pages\":\"0\"},\"PeriodicalIF\":0.0000,\"publicationDate\":\"2018-11-01\",\"publicationTypes\":\"Journal Article\",\"fieldsOfStudy\":null,\"isOpenAccess\":false,\"openAccessPdf\":\"\",\"citationCount\":\"1\",\"resultStr\":null,\"platform\":\"Semanticscholar\",\"paperid\":null,\"PeriodicalName\":\"2018 Sixth International Symposium on Computing and Networking Workshops (CANDARW)\",\"FirstCategoryId\":\"1085\",\"ListUrlMain\":\"https://doi.org/10.1109/CANDARW.2018.00026\",\"RegionNum\":0,\"RegionCategory\":null,\"ArticlePicture\":[],\"TitleCN\":null,\"AbstractTextCN\":null,\"PMCID\":null,\"EPubDate\":\"\",\"PubModel\":\"\",\"JCR\":\"\",\"JCRName\":\"\",\"Score\":null,\"Total\":0}","platform":"Semanticscholar","paperid":null,"PeriodicalName":"2018 Sixth International Symposium on Computing and Networking Workshops (CANDARW)","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1109/CANDARW.2018.00026","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
Reduction of Instruction Increase Overhead by STRAIGHT Compiler
It is effective to remove false dependencies to efficiently perform out-of-order (OoO) execution which improves single thread performance. Hardware register renaming removes these dependencies, but it is one of the bottlenecks of the processor because of its complexity. The use of a STRAIGHT architecture is one of the approaches that allow the compiler to remove these dependencies. Because the source operand is specified as the distance between the producer instruction and consumer instruction and there is no register overwriting, no false dependency occurs. Instead, the compiler must generate code that satisfies the constraint of specifying operands as constant distances that are not dependent on the execution path. Although the basic algorithms for realizing the constraint are already known, the machine code generated thereby cannot achieve high performance because it is necessary to execute many inter-register transfer instructions added by compiler to satisfy the constraints. This paper presents an efficient algorithm that uses data flow analysis to determine the value causing an increase in the number of executed instructions and improve the performance by spilling them on the stack. We developed a compiler that implements the proposed method using LLVM and evaluated using CoreMark as a benchmark. The number of executed instructions was reduced by approximately 31 %, and the execution performance improved by up to 32 %.