CUDA Atomic ============== * :google:`atomicMin atomicAdd atomicMax atomicExch atomicOr` atomic funcs in chroma ------------------------ :: simon:cuda blyth$ grep atomic *.* daq.cu: atomicMin(earliest_time_int + channel_index, time_int); daq.cu: atomicAdd(channel_q_int + channel_index, charge_int); daq.cu: atomicOr(channel_histories + channel_index, history); daq.cu: atomicMin(earliest_time_int + channel_offset, time_int); daq.cu: atomicAdd(channel_q_int + channel_offset, charge_int); daq.cu: atomicOr(channel_histories + channel_offset, history); hybrid_render.cu: data = atomicExch(addr, data+atomicExch(addr, 0.0f)); pdf.cu: atomicMin(&distance_table_len, i); propagate.cu: atomicAdd(&counter, 1); propagate.cu: atomicAdd(index_counter, counter); propagate.cu: int offset = atomicAdd(index_counter, 1); propagate.cu: int out_idx = atomicAdd(output_queue, 1); Old GPU capability compatibility code -------------------------------------- * https://www.sharcnet.ca/help/index.php/CUDA_tips_and_tricks Capability <2.0 (but >=1.3) :: // For capability <2.0 (but >=1.3) GPUs #define ATOMIC_ADD(x,y) MyAtomicAdd (x, (float)(y)) #else #define ATOMIC_ADD(x,y) atomicAdd (x, (float)(y)) #endif