我有一个 CUDA 内核,里面有一堆我想展开的循环。现在我做:
void mykernel(int* in, int* out, int baz) {
#pragma unroll
for(int i = 0; i < 4; i++) {
foo();
}
/* ... */
#pragma unroll
for(int i = 0; i < 6; i++) {
bar();
}
}
等等。我想告诉(提示)我的 C/C++ 编译器展开所有这些循环,而不需要为每个循环单独提示。但是,我不想展开文件中所有代码中的所有循环,只是在这个函数中。
如果这是 GCC,我可以这样做:
__attribute__((optimize("unroll-loops")))
void mykernel(int* in, int* out, int baz) {
for(int i = 0; i < 4; i++) {
foo();
}
/* ... */
for(int i = 0; i < 6; i++) {
bar();
}
}
或使用选项推送和弹出。我可以用 CUDA 做一些等效的事情吗?