我需要强制 Metal 编译器在我的内核计算函数中展开一个循环。到目前为止,我已尝试将其置于循环#pragma unroll(num_times)
之前for
,但编译器会忽略该语句。
似乎编译器不会自动展开循环 - 我比较了 1) 代码与for
循环 2) 相同代码但手动展开循环的执行时间。手动展开的版本快 3 倍。
例如:我想从这个开始:
for (int i=0; i<3; i++) {
do_stuff();
}
对此:
do_stuff();
do_stuff();
do_stuff();
在 Metal C++ 语言中甚至有类似循环展开的东西吗?如果是,我怎么可能让编译器知道我想展开循环?