Jof*_*fro 6 c++ macos concurrency grand-central-dispatch
我编写了使用Runge-Kutta方法计算大量耦合主方程的动力学的代码.代码包含许多for循环,其中每个步骤都是独立的.我打算使用Grand Central Dispatch加速该计划.我的尝试基于我在http://www.macresearch.org/cocoa-scientists-xxxi-all-aboard-grand-central找到的一个例子.我的代码和macresearch上的示例都没有在我的机器上编译(MacOSX 10.6.8 Xcode 4.0.2).所以这是我的代码:
...
double values[SpaceSize], k1[SpaceSize];
for ( int t=1 ; t<Time ; t++ ) {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//k1
for (int k=0 ; k<SpaceSize ; k++ ) values[k]=Concentration[k][t-1];
dispatch_apply(SpaceSize, queue,
^(size_t k) {
k1[k]=h * derives(values, SpaceSize, k); //<--error
}
);
...
Run Code Online (Sandbox Code Playgroud)
它打破了错误:
语义问题:不能在块内引用具有可变修改类型的声明
我尝试用向量替换数组(值,k1),但后来我得到另一个错误消息:
语义问题:只读变量不可分配
这就是我被困住的地方,并不知道这些错误消息试图告诉我的是什么.我花了很长时间搜索并询问是否有人可以提供帮助.我会非常感谢提示或更好的方法来解决这个问题.
Kaz*_*oto 14
错误:无法在块内引用数组类型的声明
在块实现下,不允许从块访问C数组.(我找不到关于它的文档......)
有一个简单的解决方法:-)
double valuesArray[SpaceSize], k1Array[SpaceSize];
double *values = valuesArray, *k1 = k1Array;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4250 次 |
| 最近记录: |