IE。为了
int A[100]
A[:] = 1;
那会尝试创建 100 个线程吗?还是与执行 for 循环相同?
我认为它是并行化的,但我只是对其进行了测试,它看起来不像。
有没有办法让它使用多个线程,或者数组符号就是这样,符号?
不,Cilk Plus 支持两种并行度;数据并行和任务并行。
数据并行性同时对多个值执行相同的操作。它有时被称为 SIMD - 单指令,多数据。数组表示法是对编译器的“提示”,即这是一个数据并行操作,应该使用 CPU 的向量单元来执行。当元素数量超过向量单元的容量时,编译器将围绕操作生成一个循环。如果编译器可以检测到多行正在对同一组数据进行操作,它将围绕整个计算进行循环。
任务并行性同时执行多个任务,其中每个任务都执行自己的指令流。如果您还想并行进行计算,则需要在计算周围使用 cilk_for 循环。如果您愿意,也可以使用 TBB 或 OpenMP。