How to resolve "The variable in a parfor cannot be classified" error?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
When I try to run the following code:
parfor n = 1:size(chan_combos_idx,1)
for pre_same_z = 1:size(pre_same_snip_all,2)
pre_same_cpsd(:,pre_same_z,n) = cpsd(pre_same_snip_all(:,pre_same_z,chan_combos_idx(n,1)),pre_same_snip_all(:,pre_same_z,chan_combos_idx(n,2)));
end
for pre_diff_z = 1:size(pre_diff_snip_all,2)
pre_diff_cpsd(:,pre_diff_z,n) = cpsd(pre_diff_snip_all(:,pre_diff_z,chan_combos_idx(n,1)),pre_diff_snip_all(:,pre_diff_z,chan_combos_idx(n,2)));
end
for post_same_z = 1:size(post_same_snip_all,2)
post_same_cpsd(:,post_same_z,n) = cpsd(post_same_snip_all(:,post_same_z,chan_combos_idx(n,1)),post_same_snip_all(:,post_same_z,chan_combos_idx(n,2)));
end
for post_diff_z = 1:size(post_diff_snip_all,2)
post_diff_cpsd(:,post_diff_z,n) = cpsd(post_diff_snip_all(:,post_diff_z,chan_combos_idx(n,1)),post_diff_snip_all(:,post_diff_z,chan_combos_idx(n,2)));
end
end
I get the error "The variable pre_same_cpsd in a parfor cannot be classified. I think this has something to do with this being a sliced variable, but I'm not sure how to resolve it.
Thanks in advance!
0 comentarios
Respuestas (1)
Walter Roberson
el 13 de Jun. de 2018
Inside the parfor loops, you should write to temporary variables like local_same_pre_cpsd(:,pre_samez) with no third subscript. Once you have completed the local variable for loop, write the entire variable into same_pre_cpsd(:,:,n) as one assignment statement. Use the same kind of technique for the other output variables.
You might also need to extract pre_same_snip_all(:,pre_same_z,:) into a local variable, and index that local variable at chan_combos_idx(n,2) and pass that to your function.
In summary, if you have an input variable being accessed with a parfor variable, then you should copy out the entire slice into a local variable and access the slice, and if you have an output variable being accessed with a parfor variable then create a local variable which is a slice, and then afterwards copy the slice to the output variable all at one time.
0 comentarios
Ver también
Categorías
Más información sobre Parallel for-Loops (parfor) en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!