经线不同步

问题描述

我正在经历并行归约example from Nvidia。如果species = pd.read_csv('/path/input_test.csv') scenarios=['study1','study2'] hourly_results = pd.DataFrame(columns = ['species','study_group','julian','hour','Rabs_sun']) for i in range(len(species)): for scenario_val in range(len(scenarios)): ectotherm = Individual(species.type[i],species.spp[i],species.animal_location[i],scenarios[scenario_val],species.latitude[i],species.longitude[i],species.altitude[i],species.mass[i],species.length[i],species.width[i],species.emissivity[i]) for julian in range(len(julian_list)): for hour in range(len(hour_list)): Rabs_sun = ectotherm.radiation_abs(julian_list[julian],hour_list[hour],s,A_S,tau,Ta_sun,Ta_ground,A_L) dataframe = pd.DataFrame([[species.spp[i],julian_list[julian],Rabs_sun]],columns = ['species','Rabs_sun']) hourly_results = hourly_results.append(dataframe) hourly_results.to_csv('Desktop/hourly_v14_standard.csv',columns=['species','Rabs_sun'],as_index = False) [1]: https://stackoverflow.com/questions/63819209/setting-up-a-function-in-a-class-that-will-read-in-csv-data-in-a-way-that-it-can ,则所有线程都应该处于同一扭曲中,因此指令被假定为SIMD同步,因此我们可以假设tid < 32sdata[tid] += sdata[tid + 32];之前为所有线程完成,并且以此类推。但这对我来说不是这种情况。

sdata[tid] += sdata[tid + 16];

关于Cuda的同一问题的解决方案已经发布(see),但是它使用了指针和volatile关键字。 Directcompute没有指针,并且不允许在全局内存上使用volatile关键字。

解决方法

Directcompute没有指针,并且不允许在全局内存上使用volatile关键字。

确实,但是它将可比较的功能公开为内在功能。将循环中的+=替换为InterlockedAdd intrinsic function,然后看看会发生什么。但是,该函数仅适用于整数。