SixTrack / sixtracklib

Library for single charged particle simulations in accelerators
GNU Lesser General Public License v2.1
12 stars 16 forks source link

Compile error upon changing compute capability in `Settings.make` #125

Closed aoeftiger closed 3 years ago

aoeftiger commented 4 years ago

For PR #123 I obtain compilation errors for computing capabilities other than 30 (e.g. 60, or here 75:)

$ make -j30
Scanning dependencies of target sixtrack_common_be_limit
Scanning dependencies of target sixtrack_cuda_cxx_track
Scanning dependencies of target sixtrack_common_be_dipedge
Scanning dependencies of target sixtrack_cuda_device
Scanning dependencies of target sixtrack_common_buffer
Scanning dependencies of target sixtrack_common_context
Scanning dependencies of target sixtrack_common_internal_cxx
Scanning dependencies of target sixtrack_common_be_tricub
Scanning dependencies of target sixtrack_common_control_cxx
Scanning dependencies of target sixtrack_common_be_rfmultipole_c99
Scanning dependencies of target sixtrack_common_be_monitor
Scanning dependencies of target sixtrack_common_be_beamfields
Scanning dependencies of target sixtrack_test_common_belems_c99
Scanning dependencies of target sixtrack_common_output
Scanning dependencies of target sixtrack_common_track
Scanning dependencies of target sixtrack_cuda_c99_control
Scanning dependencies of target sixtrack_cuda_host
Scanning dependencies of target sixtrack_test_testdata
Scanning dependencies of target sixtrack_common_particles_c99
Scanning dependencies of target sixtrack_common_track_cxx
Scanning dependencies of target sixtrack_test_common_c99
Scanning dependencies of target sixtrack_opencl
Scanning dependencies of target sixtrack_test_common_track_cxx
Scanning dependencies of target sixtrack_cuda_cxx_control
Scanning dependencies of target sixtrack_test_common_particle_c99
Scanning dependencies of target sixtrack_test_common_output_c99
Scanning dependencies of target sixtrack_test_common_particle_cxx
Scanning dependencies of target sixtrack_test_common_buffer_c99
Scanning dependencies of target sixtrack_test_common_track_c99
[  2%] Building C object sixtracklib/common/context/CMakeFiles/sixtrack_common_context.dir/compute_arch.c.o
[  2%] Building C object tests/sixtracklib/testlib/common/CMakeFiles/sixtrack_test_common_c99.dir/random.c.o
[  4%] Building C object sixtracklib/common/be_rfmultipole/CMakeFiles/sixtrack_common_be_rfmultipole_c99.dir/be_rfmultipole.c.o
[  4%] Building C object tests/sixtracklib/testlib/common/CMakeFiles/sixtrack_test_common_c99.dir/gpu_kernel.c.o
[  5%] Building C object sixtracklib/common/be_dipedge/CMakeFiles/sixtrack_common_be_dipedge.dir/be_dipedge.c.o
[  6%] Building C object sixtracklib/common/be_beamfields/CMakeFiles/sixtrack_common_be_beamfields.dir/be_beamfields.c.o
[  7%] Building C object sixtracklib/common/be_tricub/CMakeFiles/sixtrack_common_be_tricub.dir/be_tricub.c.o
[  9%] Building C object sixtracklib/common/particles/CMakeFiles/sixtrack_common_particles_c99.dir/particles.c.o
[  9%] Building C object tests/sixtracklib/testlib/common/particles/CMakeFiles/sixtrack_test_common_particle_c99.dir/particles.c.o
[ 10%] Building C object sixtracklib/cuda/control/CMakeFiles/sixtrack_cuda_c99_control.dir/default_kernel_config.c.o
[ 10%] Building C object sixtracklib/common/be_monitor/CMakeFiles/sixtrack_common_be_monitor.dir/be_monitor.c.o
[ 11%] Building C object sixtracklib/common/be_limit/CMakeFiles/sixtrack_common_be_limit.dir/be_limit_rect.c.o
[ 12%] Building CUDA object sixtracklib/cuda/CMakeFiles/sixtrack_cuda_host.dir/wrappers/controller_wrappers.cu.o
[ 13%] Building C object sixtracklib/common/buffer/CMakeFiles/sixtrack_common_buffer.dir/alignment.c.o
[ 14%] Building CXX object tests/sixtracklib/testlib/common/track/CMakeFiles/sixtrack_test_common_track_cxx.dir/track_job_setup.cpp.o
[ 14%] Building CXX object tests/sixtracklib/testlib/common/particles/CMakeFiles/sixtrack_test_common_particle_cxx.dir/particles_addr.cpp.o
[ 16%] Building CXX object sixtracklib/cuda/control/CMakeFiles/sixtrack_cuda_cxx_control.dir/kernel_config.cpp.o
[ 16%] Building C object tests/sixtracklib/testlib/common/output/CMakeFiles/sixtrack_test_common_output_c99.dir/assign_be_monitor_ctrl_arg.c.o
[ 18%] Building C object tests/sixtracklib/testlib/common/beam_elements/CMakeFiles/sixtrack_test_common_belems_c99.dir/be_beamfields.c.o
[ 18%] Building C object sixtracklib/common/output/CMakeFiles/sixtrack_common_output.dir/elem_by_elem_config.c.o
[ 19%] Building CXX object sixtracklib/common/control/CMakeFiles/sixtrack_common_control_cxx.dir/arch_info.cpp.o
[ 19%] Building C object tests/sixtracklib/testlib/common/buffer/CMakeFiles/sixtrack_test_common_buffer_c99.dir/buffer.c.o
[ 20%] Building C object tests/sixtracklib/testlib/testdata/CMakeFiles/sixtrack_test_testdata.dir/track_testdata.c.o
[ 21%] Building C object sixtracklib/common/track/CMakeFiles/sixtrack_common_track.dir/track.c.o
[ 21%] Building CXX object sixtracklib/cuda/track/CMakeFiles/sixtrack_cuda_cxx_track.dir/track_job.cpp.o
[ 21%] Building CUDA object sixtracklib/cuda/CMakeFiles/sixtrack_cuda_device.dir/kernels/be_monitors_assign_out_buffer.cu.o
[ 21%] Building CXX object sixtracklib/opencl/CMakeFiles/sixtrack_opencl.dir/internal/argument.cpp.o
[ 23%] Building CXX object sixtracklib/common/track/CMakeFiles/sixtrack_common_track_cxx.dir/track_job_base.cpp.o
[ 23%] Building CXX object sixtracklib/common/internal/CMakeFiles/sixtrack_common_internal_cxx.dir/track_job_base.cpp.o
[ 24%] Building C object tests/sixtracklib/testlib/common/track/CMakeFiles/sixtrack_test_common_track_c99.dir/track_job_setup.c.o
[ 25%] Building CXX object sixtracklib/common/control/CMakeFiles/sixtrack_common_control_cxx.dir/arch_info_c99.cpp.o
[ 25%] Building C object sixtracklib/common/buffer/CMakeFiles/sixtrack_common_buffer.dir/assign_address_item.c.o
[ 25%] Building C object tests/sixtracklib/testlib/common/CMakeFiles/sixtrack_test_common_c99.dir/time.c.o
[ 25%] Built target sixtrack_common_context
[ 25%] Built target sixtrack_test_common_c99
[ 25%] Built target sixtrack_cuda_c99_control
[ 26%] Building CXX object sixtracklib/cuda/control/CMakeFiles/sixtrack_cuda_cxx_control.dir/kernel_config_c99.cpp.o
[ 26%] Building C object tests/sixtracklib/testlib/common/beam_elements/CMakeFiles/sixtrack_test_common_belems_c99.dir/be_limit_rect.c.o
[ 27%] Building CXX object sixtracklib/common/control/CMakeFiles/sixtrack_common_control_cxx.dir/arch_base.cpp.o
[ 28%] Building C object sixtracklib/common/buffer/CMakeFiles/sixtrack_common_buffer.dir/buffer.c.o
[ 28%] Built target sixtrack_common_be_dipedge
[ 28%] Building C object sixtracklib/common/be_monitor/CMakeFiles/sixtrack_common_be_monitor.dir/output_buffer.c.o
[ 29%] Building C object sixtracklib/common/buffer/CMakeFiles/sixtrack_common_buffer.dir/mem_pool.c.o
[ 29%] Built target sixtrack_common_be_rfmultipole_c99
[ 29%] Built target sixtrack_common_be_beamfields
[ 30%] Building C object tests/sixtracklib/testlib/common/track/CMakeFiles/sixtrack_test_common_track_c99.dir/track_particles_cpu.c.o
[ 31%] Building CXX object sixtracklib/opencl/CMakeFiles/sixtrack_opencl.dir/internal/base_context.cpp.o
[ 32%] Building CXX object sixtracklib/cuda/control/CMakeFiles/sixtrack_cuda_cxx_control.dir/node_info.cpp.o
[ 33%] Building C object tests/sixtracklib/testlib/common/output/CMakeFiles/sixtrack_test_common_output_c99.dir/assign_elem_by_elem_ctrl_arg.c.o
[ 33%] Built target sixtrack_common_be_tricub
[ 33%] Building C object sixtracklib/common/be_limit/CMakeFiles/sixtrack_common_be_limit.dir/be_limit_ellipse.c.o
[ 34%] Building C object sixtracklib/common/output/CMakeFiles/sixtrack_common_output.dir/elem_by_elem_output_buffer.c.o
[ 35%] Building C object tests/sixtracklib/testlib/common/beam_elements/CMakeFiles/sixtrack_test_common_belems_c99.dir/be_limit_ellipse.c.o
[ 35%] Building C object sixtracklib/common/output/CMakeFiles/sixtrack_common_output.dir/output_buffer.c.o
[ 36%] Building C object tests/sixtracklib/testlib/common/beam_elements/CMakeFiles/sixtrack_test_common_belems_c99.dir/be_dipedge.c.o
[ 36%] Built target sixtrack_test_common_particle_c99
[ 37%] Building C object tests/sixtracklib/testlib/common/beam_elements/CMakeFiles/sixtrack_test_common_belems_c99.dir/be_tricub.c.o
[ 37%] Building C object sixtracklib/common/particles/CMakeFiles/sixtrack_common_particles_c99.dir/particles_addr.c.o
[ 38%] Building C object tests/sixtracklib/testlib/common/beam_elements/CMakeFiles/sixtrack_test_common_belems_c99.dir/beam_elements.c.o
[ 38%] Building CXX object sixtracklib/common/control/CMakeFiles/sixtrack_common_control_cxx.dir/arch_base_c99.cpp.o
[ 39%] Building C object tests/sixtracklib/testlib/common/buffer/CMakeFiles/sixtrack_test_common_buffer_c99.dir/generic_buffer_obj.c.o
[ 39%] Building C object sixtracklib/common/buffer/CMakeFiles/sixtrack_common_buffer.dir/managed_buffer_handle.c.o
[ 40%] Building C object sixtracklib/common/buffer/CMakeFiles/sixtrack_common_buffer.dir/buffer_string_object.c.o
[ 41%] Building C object sixtracklib/common/buffer/CMakeFiles/sixtrack_common_buffer.dir/buffer_array_object.c.o
[ 42%] Building C object sixtracklib/common/be_limit/CMakeFiles/sixtrack_common_be_limit.dir/be_limit_rect_ellipse.c.o
[ 43%] Building CUDA object sixtracklib/cuda/CMakeFiles/sixtrack_cuda_host.dir/wrappers/track_job_wrappers.cu.o
[ 43%] Built target sixtrack_test_testdata
[ 43%] Building C object tests/sixtracklib/testlib/common/buffer/CMakeFiles/sixtrack_test_common_buffer_c99.dir/assign_address_item.c.o
[ 43%] Building CXX object sixtracklib/cuda/control/CMakeFiles/sixtrack_cuda_cxx_control.dir/node_info_c99.cpp.o
[ 44%] Building CXX object sixtracklib/common/control/CMakeFiles/sixtrack_common_control_cxx.dir/node_id.cpp.o
[ 44%] Built target sixtrack_common_track
[ 45%] Building CXX object sixtracklib/cuda/control/CMakeFiles/sixtrack_cuda_cxx_control.dir/argument.cpp.o
[ 46%] Building CXX object sixtracklib/cuda/control/CMakeFiles/sixtrack_cuda_cxx_control.dir/argument_c99.cpp.o
[ 46%] Built target sixtrack_test_common_buffer_c99
[ 46%] Built target sixtrack_test_common_output_c99
[ 47%] Building CXX object sixtracklib/common/track/CMakeFiles/sixtrack_common_track_cxx.dir/track_job_base_c99.cpp.o
[ 47%] Built target sixtrack_common_be_monitor
[ 48%] Building CXX object sixtracklib/common/control/CMakeFiles/sixtrack_common_control_cxx.dir/node_id_c99.cpp.o
[ 48%] Building CXX object sixtracklib/cuda/control/CMakeFiles/sixtrack_cuda_cxx_control.dir/controller.cpp.o
[ 49%] Building CXX object sixtracklib/common/control/CMakeFiles/sixtrack_common_control_cxx.dir/node_info.cpp.o
[ 50%] Building CXX object sixtracklib/cuda/control/CMakeFiles/sixtrack_cuda_cxx_control.dir/controller_c99.cpp.o
[ 50%] Building C object tests/sixtracklib/testlib/common/track/CMakeFiles/sixtrack_test_common_track_c99.dir/track_particles_ctrl_arg.c.o
[ 50%] Built target sixtrack_common_particles_c99
[ 50%] Building CXX object sixtracklib/common/control/CMakeFiles/sixtrack_common_control_cxx.dir/node_info_c99.cpp.o
[ 51%] Building CXX object sixtracklib/common/track/CMakeFiles/sixtrack_common_track_cxx.dir/track_job_ctrl_arg_base.cpp.o
[ 52%] Building CXX object sixtracklib/common/control/CMakeFiles/sixtrack_common_control_cxx.dir/kernel_config_base.cpp.o
[ 52%] Built target sixtrack_common_buffer
[ 52%] Built target sixtrack_common_output
[ 52%] Built target sixtrack_test_common_belems_c99
[ 52%] Building CXX object sixtracklib/common/track/CMakeFiles/sixtrack_common_track_cxx.dir/track_job_nodectrl_arg_base.cpp.o
[ 53%] Building CXX object sixtracklib/common/track/CMakeFiles/sixtrack_common_track_cxx.dir/track_job_cpu.cpp.o
[ 54%] Building CXX object sixtracklib/common/track/CMakeFiles/sixtrack_common_track_cxx.dir/track_job_cpu_c99.cpp.o
[ 54%] Built target sixtrack_common_be_limit
[ 55%] Building CXX object sixtracklib/opencl/CMakeFiles/sixtrack_opencl.dir/internal/context.cpp.o
[ 56%] Building CXX object sixtracklib/common/control/CMakeFiles/sixtrack_common_control_cxx.dir/kernel_config_base_c99.cpp.o
/home/oeftiger/gsi/git/sixtracklib_martinschwinzerl/sixtracklib/cuda/cuda_tools.h(222): error: no instance of overloaded function "atomicOr" matches the argument list
            argument types are: (st_arch_debugging_t *, const st_arch_debugging_t)

1 error detected in the compilation of "/tmp/tmpxft_0001e131_00000000-8_be_monitors_assign_out_buffer.compute_75.cpp1.ii".
make[2]: *** [sixtracklib/cuda/CMakeFiles/sixtrack_cuda_device.dir/build.make:63: sixtracklib/cuda/CMakeFiles/sixtrack_cuda_device.dir/kernels/be_monitors_assign_out_buffer.cu.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1242: sixtracklib/cuda/CMakeFiles/sixtrack_cuda_device.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[...]
make: *** [Makefile:130: all] Error 2
aoeftiger commented 4 years ago

A quick dirty fix is to comment out the atomics for cc>=6.0:

$ git diff
diff --git a/sixtracklib/cuda/cuda_tools.h b/sixtracklib/cuda/cuda_tools.h
index 5af22e54..e39c85b0 100644
--- a/sixtracklib/cuda/cuda_tools.h
+++ b/sixtracklib/cuda/cuda_tools.h
@@ -216,7 +216,7 @@ SIXTRL_INLINE SIXTRL_DEVICE_FN void NS(Cuda_collect_status_flag_value)(
     if( ( status_flags != SIXTRL_ARCH_DEBUGGING_REGISTER_EMPTY ) &&
         ( ptr_status_flags != SIXTRL_NULLPTR ) )
     {
-        #if ( defined( __CUDA_ARCH__ ) && ( __CUDA_ARCH__ >= 350 ) )
+        #if ( defined( __CUDA_ARCH__ ) && ( __CUDA_ARCH__ >= 350 ) && ( __CUDA_ARCH__ < 600 ) )
             /* sm_35 or larger defines atomicOr also for
              * 64Bit variables -> this is the only clean solution */
             ::atomicOr( ptr_status_flags, status_flags );
martinschwinzerl commented 4 years ago

Problem is caused by an inconsistency between host and device side - SIXTRL_UINT64 refers to different types. The commit 6522a17 works-around the issue, we'll remove the inconsistencies before merging with master

martinschwinzerl commented 4 years ago

@aoeftiger Could you please verify whether the latest changes in PR #132 allow you now to compile for compute capabilities >= 3.5 (especially >= 6.0, as demonstrated in your example)? Thank you!cd

martinschwinzerl commented 3 years ago

Closing since with the merge of PR #132, this should work now. Please re-open in case the issue persists!