我正在查看CUDA SASS代码,我注意到对相同寄存器的大量移动操作。例如:
function fixPage5() {
var footer = document.getElementsByTagName('footer')[0];
var pages = document.getElementsByClassName('page');
if (pages[(pages.length - 1)].getBoundingClientRect().top < 1) {
pages[(pages.length - 1)].classList.add('fixed');
footer.style.marginTop = '424px';
}
if (pages[(pages.length - 2)].getBoundingClientRect().bottom > -1) {
footer.style.marginTop = '0';
pages[(pages.length - 1)].classList.remove('fixed');
}
}
window.addEventListener('scroll',fixPage5,false);
我只是好奇,这些搬家行动的目的是什么?是时候了,它们的行为就像'nop',还是不那么明显?
注意:这些不包含在PTX代码中,只包含在SASS中。我假设在中间操作中使用,而不是在PTX操作期间使用。虽然,对于上下文,PTX是:
body {
margin: 0;
padding: 0;
}
.page {
position: relative;
width: 100%;
height: 400px;
padding: 12px;
font-size: 72px;
}
footer {
position: relative;
width: 100%;
z-index: 12;
height: 400px;
font-size: 72px;
color: rgb(255,255,255);
background-color: rgb(31,31,31);
}
.page:nth-of-type(odd) {
color: rgb(255,255,255);
background-color: rgb(127,127,127);
}
.fixed {
position: fixed;
top: 0;
left: 0;
z-index: -12;
}
实际的<div class="page">Page One</div>
<div class="page">Page Two</div>
<div class="page">Page Three</div>
<div class="page">Page Four</div>
<div class="page">Page Five</div>
<footer>Footer</footer>
代码是上面的ptx的内联汇编。
更新
使用Cuda Toolkit 7.5在Visual Studio 2013中使用172 MOV R3, R3;
173 MOV R4, R4;
174 MOV R3, R3;
175 MOV R4, R4;
176 MOV R4, R4;
177 MOV R3, R3;
178 MOV R4, R4;
,85 .reg .u32 a, b;
86 bfind.s64 a, %rd37;
和c++
进行编译。设备:GTX 970(Maxwell GPU)。
从sm_52
切换到compute_52
可以消除这种低效率。