如何解决经线不同步
我正在经历并行归约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 < 32
在sdata[tid] += sdata[tid + 32];
之前为所有线程完成,并且以此类推。但这对我来说不是这种情况。
sdata[tid] += sdata[tid + 16];
关于Cuda的同一问题的解决方案已经发布(see),但是它使用了指针和volatile关键字。 Directcompute没有指针,并且不允许在全局内存上使用volatile关键字。
解决方法
Directcompute没有指针,并且不允许在全局内存上使用volatile关键字。
确实,但是它将可比较的功能公开为内在功能。将循环中的+=
替换为InterlockedAdd
intrinsic function,然后看看会发生什么。但是,该函数仅适用于整数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。