Loading ofdock_taskpar_alt/Makefile +2 −2 Original line number Diff line number Diff line Loading @@ -741,8 +741,8 @@ $(TARGET_DIR)/$(TARGET) : Makefile $(SRCS) $(INCS) $(TARGET_DIR) # Following values are used only for emulation # to have a short but still a representative test PDB := 1stp NRUN := 10 NEV := 50000 NRUN := 5 NEV := 100000 # Project name PROJECT_NAME := ofdock_taskpar_alt Loading ofdock_taskpar_alt/device/Krnl_IntraE.cl +81 −28 Original line number Diff line number Diff line Loading @@ -18,6 +18,13 @@ void Krnl_IntraE( __constant char* restrict KerConstStatic_atom_types_const, __global const char3* restrict KerConstStatic_intraE_contributors_const, float DockConst_smooth, __constant float* restrict KerConstStatic_reqm, __constant float* restrict KerConstStatic_reqm_hbond, __constant uint* restrict KerConstStatic_atom1_types_reqm, __constant uint* restrict KerConstStatic_atom2_types_reqm, __constant float* restrict KerConstStatic_VWpars_AC_const, __constant float* restrict KerConstStatic_VWpars_BD_const, __constant float* restrict KerConstStatic_dspars_S_const, Loading Loading @@ -112,53 +119,101 @@ while(active) { float suby = loc_coords_atid1.y - loc_coords_atid2.y; float subz = loc_coords_atid1.z - loc_coords_atid2.z; //distance_leo = sqrt(subx*subx + suby*suby + subz*subz)*DockConst_grid_spacing; float distance_leo = sqrt_custom(subx*subx + suby*suby + subz*subz)*DockConst_grid_spacing; //atomic_distance = sqrt(subx*subx + suby*suby + subz*subz)*DockConst_grid_spacing; float atomic_distance = sqrt_custom(subx*subx + suby*suby + subz*subz)*DockConst_grid_spacing; if (distance_leo < 1.0f) { /* if (atomic_distance < 1.0f) { #if defined (DEBUG_KRNL_INTRAE) printf("\n\nToo low distance (%f) between atoms %u and %u\n", distance_leo, atom1_id, atom2_id); printf("\n\nToo low distance (%f) between atoms %u and %u\n", atomic_distance, atom1_id, atom2_id); #endif //return HIGHEST_ENERGY; // Returning maximal value distance_leo = 1.0f; atomic_distance = 1.0f; } */ #if defined (DEBUG_KRNL_INTRAE) printf("\n\nCalculating energy contribution of atoms %u and %u\n", atom1_id+1, atom2_id+1); printf("Distance: %f\n", distance_leo); printf("Distance: %f\n", atomic_distance); #endif /* float partialE1; float partialE2; float partialE3; float partialE4; */ // But only if the distance is less than distance cutoff value and 20.48A (because of the tables) //if ((distance_leo < 8.0f) && (distance_leo < 20.48f)) if (distance_leo < 8.0f) { float distance_pow_2 = distance_leo*distance_leo; float inverse_distance_pow_2 = native_divide(1.0f, distance_pow_2); float inverse_distance_pow_4 = inverse_distance_pow_2 * inverse_distance_pow_2; float inverse_distance_pow_6 = inverse_distance_pow_4 * inverse_distance_pow_2; float inverse_distance_pow_10 = inverse_distance_pow_6 * inverse_distance_pow_4; float inverse_distance_pow_12 = inverse_distance_pow_6 * inverse_distance_pow_6; float partialE1 = 0.0f; float partialE2 = 0.0f; float partialE3 = 0.0f; float partialE4 = 0.0f; // Getting types ids char atom1_typeid = KerConstStatic_atom_types_const [atom1_id]; char atom2_typeid = KerConstStatic_atom_types_const [atom2_id]; // Getting optimum pair distance (opt_distance) from reqm and reqm_hbond // reqm: equilibrium internuclear separation // (sum of the vdW radii of two like atoms (A)) in the case of vdW // reqm_hbond: equilibrium internuclear separation // (sum of the vdW radii of two like atoms (A)) in the case of hbond float opt_distance; uint atom1_type_vdw_hb = KerConstStatic_atom1_types_reqm [atom1_typeid]; uint atom2_type_vdw_hb = KerConstStatic_atom2_types_reqm [atom2_typeid]; if (ref_intraE_contributors_const.z == 1) // H-bond { opt_distance = KerConstStatic_reqm_hbond [atom1_type_vdw_hb] + KerConstStatic_reqm_hbond [atom2_type_vdw_hb]; } else // Van der Waals { opt_distance = 0.5f*(KerConstStatic_reqm [atom1_type_vdw_hb] + KerConstStatic_reqm [atom2_type_vdw_hb]); } // Getting smoothed distance // smoothed_distance = function(atomic_distance, opt_distance) float smoothed_distance; float delta_distance = 0.5f*DockConst_smooth; /*printf("delta_distance: %f\n", delta_distance);*/ if (atomic_distance <= (opt_distance - delta_distance)) { smoothed_distance = atomic_distance + delta_distance; } else if (atomic_distance < (opt_distance + delta_distance)) { smoothed_distance = opt_distance; } else { // else if (atomic_distance >= (opt_distance + delta_distance)) smoothed_distance = atomic_distance - delta_distance; } float distance_pow_2 = atomic_distance*atomic_distance; float smoothed_distance_pow_2 = smoothed_distance*smoothed_distance; float inverse_smoothed_distance_pow_2 = native_divide(1.0f, smoothed_distance_pow_2); float inverse_smoothed_distance_pow_4 = inverse_smoothed_distance_pow_2 * inverse_smoothed_distance_pow_2; float inverse_smoothed_distance_pow_6 = inverse_smoothed_distance_pow_4 * inverse_smoothed_distance_pow_2; float inverse_smoothed_distance_pow_10 = inverse_smoothed_distance_pow_6 * inverse_smoothed_distance_pow_4; float inverse_smoothed_distance_pow_12 = inverse_smoothed_distance_pow_6 * inverse_smoothed_distance_pow_6; if (atomic_distance < 8.0f) { // Calculating van der Waals / hydrogen bond term partialE1 = KerConstStatic_VWpars_AC_const [atom1_typeid*DockConst_num_of_atypes+atom2_typeid]*inverse_distance_pow_12; partialE1 = KerConstStatic_VWpars_AC_const [atom1_typeid*DockConst_num_of_atypes+atom2_typeid]*inverse_smoothed_distance_pow_12; float tmp_pE2 = KerConstStatic_VWpars_BD_const [atom1_typeid*DockConst_num_of_atypes+atom2_typeid]; if (ref_intraE_contributors_const.z == 1) // H-bond partialE2 = tmp_pE2 * inverse_distance_pow_10; partialE2 = tmp_pE2 * inverse_smoothed_distance_pow_10; else // Van der Waals partialE2 = tmp_pE2 * inverse_distance_pow_6; partialE2 = tmp_pE2 * inverse_smoothed_distance_pow_6; } // End of if: if (dist < dcutoff) // Calculating electrostatic term partialE3 = native_divide( (DockConst_coeff_elec*KerConstStatic_atom_charges_const[atom1_id]*KerConstStatic_atom_charges_const[atom2_id]) , (distance_leo*(-8.5525f + native_divide(86.9525f, (1.0f + 7.7839f*native_exp(-0.3154f*distance_leo))))) ); partialE3 = native_divide( (DockConst_coeff_elec*KerConstStatic_atom_charges_const[atom1_id]*KerConstStatic_atom_charges_const[atom2_id]) , (atomic_distance*(-8.5525f + native_divide(86.9525f, (1.0f + 7.7839f*native_exp(-0.3154f*atomic_distance))))) ); // Calculating desolvation term partialE4 = ( Loading @@ -166,8 +221,6 @@ while(active) { (KerConstStatic_dspars_S_const [atom2_typeid] + DockConst_qasp*fabs(KerConstStatic_atom_charges_const[atom2_id])) * KerConstStatic_dspars_V_const [atom1_typeid]) * DockConst_coeff_desolv*native_exp(-0.0386f*distance_pow_2); } // End of if: if ((dist < dcutoff) && (dist < 20.48)) #if defined (FIXED_POINT_INTRAE) //shift_intraE[32] = shift_intraE[0] + partialE1 + partialE2 + partialE3 + partialE4; shift_intraE[32] = shift_intraE[0] + fixedpt64_fromfloat(partialE1) + Loading ofdock_taskpar_alt/host/inc/calcenergy.h +10 −2 Original line number Diff line number Diff line Loading @@ -60,6 +60,9 @@ typedef struct float abs_max_dmov; float abs_max_dang; float lsearch_rate; float smooth; unsigned int num_of_lsentities; float rho_lower_bound; float base_dmov_mul_sqrt3; Loading Loading @@ -128,6 +131,11 @@ typedef struct */ cl_char3 intraE_contributors_const[MAX_INTRAE_CONTRIBUTORS] __attribute__ ((aligned (32768))); float reqm_const [ATYPE_NUM] __attribute__ ((aligned (64))); float reqm_hbond_const [ATYPE_NUM] __attribute__ ((aligned (64))); unsigned int atom1_types_reqm_const [ATYPE_NUM] __attribute__ ((aligned (64))); unsigned int atom2_types_reqm_const [ATYPE_NUM] __attribute__ ((aligned (64))); float VWpars_AC_const [MAX_NUM_OF_ATYPES*MAX_NUM_OF_ATYPES] __attribute__ ((aligned (1024))); float VWpars_BD_const [MAX_NUM_OF_ATYPES*MAX_NUM_OF_ATYPES] __attribute__ ((aligned (1024))); float dspars_S_const [MAX_NUM_OF_ATYPES] __attribute__ ((aligned (64))); Loading ofdock_taskpar_alt/host/inc/getparameters.h +3 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,9 @@ typedef struct float mutation_rate; float crossover_rate; float lsearch_rate; float smooth; unsigned long num_of_ls; float tournament_rate; float rho_lower_bound; Loading ofdock_taskpar_alt/host/inc/processligand.h +9 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,15 @@ typedef struct int atom_rigid_structures [256]; char bonds [256][256]; char intraE_contributors [256][256]; // Sizes are hardcoded, ATYPE_NUM=22 float elements as in // https://git.esa.informatik.tu-darmstadt.de/docking/ocladock/blob/master/host/src/processligand.cpp#L456 // See "User Guide AutoDock 4.2" (page 34) double reqm [ATYPE_NUM]; double reqm_hbond [ATYPE_NUM]; unsigned int atom1_types_reqm [ATYPE_NUM]; unsigned int atom2_types_reqm [ATYPE_NUM]; double VWpars_A [14][14]; double VWpars_B [14][14]; double VWpars_C [14][14]; Loading Loading
ofdock_taskpar_alt/Makefile +2 −2 Original line number Diff line number Diff line Loading @@ -741,8 +741,8 @@ $(TARGET_DIR)/$(TARGET) : Makefile $(SRCS) $(INCS) $(TARGET_DIR) # Following values are used only for emulation # to have a short but still a representative test PDB := 1stp NRUN := 10 NEV := 50000 NRUN := 5 NEV := 100000 # Project name PROJECT_NAME := ofdock_taskpar_alt Loading
ofdock_taskpar_alt/device/Krnl_IntraE.cl +81 −28 Original line number Diff line number Diff line Loading @@ -18,6 +18,13 @@ void Krnl_IntraE( __constant char* restrict KerConstStatic_atom_types_const, __global const char3* restrict KerConstStatic_intraE_contributors_const, float DockConst_smooth, __constant float* restrict KerConstStatic_reqm, __constant float* restrict KerConstStatic_reqm_hbond, __constant uint* restrict KerConstStatic_atom1_types_reqm, __constant uint* restrict KerConstStatic_atom2_types_reqm, __constant float* restrict KerConstStatic_VWpars_AC_const, __constant float* restrict KerConstStatic_VWpars_BD_const, __constant float* restrict KerConstStatic_dspars_S_const, Loading Loading @@ -112,53 +119,101 @@ while(active) { float suby = loc_coords_atid1.y - loc_coords_atid2.y; float subz = loc_coords_atid1.z - loc_coords_atid2.z; //distance_leo = sqrt(subx*subx + suby*suby + subz*subz)*DockConst_grid_spacing; float distance_leo = sqrt_custom(subx*subx + suby*suby + subz*subz)*DockConst_grid_spacing; //atomic_distance = sqrt(subx*subx + suby*suby + subz*subz)*DockConst_grid_spacing; float atomic_distance = sqrt_custom(subx*subx + suby*suby + subz*subz)*DockConst_grid_spacing; if (distance_leo < 1.0f) { /* if (atomic_distance < 1.0f) { #if defined (DEBUG_KRNL_INTRAE) printf("\n\nToo low distance (%f) between atoms %u and %u\n", distance_leo, atom1_id, atom2_id); printf("\n\nToo low distance (%f) between atoms %u and %u\n", atomic_distance, atom1_id, atom2_id); #endif //return HIGHEST_ENERGY; // Returning maximal value distance_leo = 1.0f; atomic_distance = 1.0f; } */ #if defined (DEBUG_KRNL_INTRAE) printf("\n\nCalculating energy contribution of atoms %u and %u\n", atom1_id+1, atom2_id+1); printf("Distance: %f\n", distance_leo); printf("Distance: %f\n", atomic_distance); #endif /* float partialE1; float partialE2; float partialE3; float partialE4; */ // But only if the distance is less than distance cutoff value and 20.48A (because of the tables) //if ((distance_leo < 8.0f) && (distance_leo < 20.48f)) if (distance_leo < 8.0f) { float distance_pow_2 = distance_leo*distance_leo; float inverse_distance_pow_2 = native_divide(1.0f, distance_pow_2); float inverse_distance_pow_4 = inverse_distance_pow_2 * inverse_distance_pow_2; float inverse_distance_pow_6 = inverse_distance_pow_4 * inverse_distance_pow_2; float inverse_distance_pow_10 = inverse_distance_pow_6 * inverse_distance_pow_4; float inverse_distance_pow_12 = inverse_distance_pow_6 * inverse_distance_pow_6; float partialE1 = 0.0f; float partialE2 = 0.0f; float partialE3 = 0.0f; float partialE4 = 0.0f; // Getting types ids char atom1_typeid = KerConstStatic_atom_types_const [atom1_id]; char atom2_typeid = KerConstStatic_atom_types_const [atom2_id]; // Getting optimum pair distance (opt_distance) from reqm and reqm_hbond // reqm: equilibrium internuclear separation // (sum of the vdW radii of two like atoms (A)) in the case of vdW // reqm_hbond: equilibrium internuclear separation // (sum of the vdW radii of two like atoms (A)) in the case of hbond float opt_distance; uint atom1_type_vdw_hb = KerConstStatic_atom1_types_reqm [atom1_typeid]; uint atom2_type_vdw_hb = KerConstStatic_atom2_types_reqm [atom2_typeid]; if (ref_intraE_contributors_const.z == 1) // H-bond { opt_distance = KerConstStatic_reqm_hbond [atom1_type_vdw_hb] + KerConstStatic_reqm_hbond [atom2_type_vdw_hb]; } else // Van der Waals { opt_distance = 0.5f*(KerConstStatic_reqm [atom1_type_vdw_hb] + KerConstStatic_reqm [atom2_type_vdw_hb]); } // Getting smoothed distance // smoothed_distance = function(atomic_distance, opt_distance) float smoothed_distance; float delta_distance = 0.5f*DockConst_smooth; /*printf("delta_distance: %f\n", delta_distance);*/ if (atomic_distance <= (opt_distance - delta_distance)) { smoothed_distance = atomic_distance + delta_distance; } else if (atomic_distance < (opt_distance + delta_distance)) { smoothed_distance = opt_distance; } else { // else if (atomic_distance >= (opt_distance + delta_distance)) smoothed_distance = atomic_distance - delta_distance; } float distance_pow_2 = atomic_distance*atomic_distance; float smoothed_distance_pow_2 = smoothed_distance*smoothed_distance; float inverse_smoothed_distance_pow_2 = native_divide(1.0f, smoothed_distance_pow_2); float inverse_smoothed_distance_pow_4 = inverse_smoothed_distance_pow_2 * inverse_smoothed_distance_pow_2; float inverse_smoothed_distance_pow_6 = inverse_smoothed_distance_pow_4 * inverse_smoothed_distance_pow_2; float inverse_smoothed_distance_pow_10 = inverse_smoothed_distance_pow_6 * inverse_smoothed_distance_pow_4; float inverse_smoothed_distance_pow_12 = inverse_smoothed_distance_pow_6 * inverse_smoothed_distance_pow_6; if (atomic_distance < 8.0f) { // Calculating van der Waals / hydrogen bond term partialE1 = KerConstStatic_VWpars_AC_const [atom1_typeid*DockConst_num_of_atypes+atom2_typeid]*inverse_distance_pow_12; partialE1 = KerConstStatic_VWpars_AC_const [atom1_typeid*DockConst_num_of_atypes+atom2_typeid]*inverse_smoothed_distance_pow_12; float tmp_pE2 = KerConstStatic_VWpars_BD_const [atom1_typeid*DockConst_num_of_atypes+atom2_typeid]; if (ref_intraE_contributors_const.z == 1) // H-bond partialE2 = tmp_pE2 * inverse_distance_pow_10; partialE2 = tmp_pE2 * inverse_smoothed_distance_pow_10; else // Van der Waals partialE2 = tmp_pE2 * inverse_distance_pow_6; partialE2 = tmp_pE2 * inverse_smoothed_distance_pow_6; } // End of if: if (dist < dcutoff) // Calculating electrostatic term partialE3 = native_divide( (DockConst_coeff_elec*KerConstStatic_atom_charges_const[atom1_id]*KerConstStatic_atom_charges_const[atom2_id]) , (distance_leo*(-8.5525f + native_divide(86.9525f, (1.0f + 7.7839f*native_exp(-0.3154f*distance_leo))))) ); partialE3 = native_divide( (DockConst_coeff_elec*KerConstStatic_atom_charges_const[atom1_id]*KerConstStatic_atom_charges_const[atom2_id]) , (atomic_distance*(-8.5525f + native_divide(86.9525f, (1.0f + 7.7839f*native_exp(-0.3154f*atomic_distance))))) ); // Calculating desolvation term partialE4 = ( Loading @@ -166,8 +221,6 @@ while(active) { (KerConstStatic_dspars_S_const [atom2_typeid] + DockConst_qasp*fabs(KerConstStatic_atom_charges_const[atom2_id])) * KerConstStatic_dspars_V_const [atom1_typeid]) * DockConst_coeff_desolv*native_exp(-0.0386f*distance_pow_2); } // End of if: if ((dist < dcutoff) && (dist < 20.48)) #if defined (FIXED_POINT_INTRAE) //shift_intraE[32] = shift_intraE[0] + partialE1 + partialE2 + partialE3 + partialE4; shift_intraE[32] = shift_intraE[0] + fixedpt64_fromfloat(partialE1) + Loading
ofdock_taskpar_alt/host/inc/calcenergy.h +10 −2 Original line number Diff line number Diff line Loading @@ -60,6 +60,9 @@ typedef struct float abs_max_dmov; float abs_max_dang; float lsearch_rate; float smooth; unsigned int num_of_lsentities; float rho_lower_bound; float base_dmov_mul_sqrt3; Loading Loading @@ -128,6 +131,11 @@ typedef struct */ cl_char3 intraE_contributors_const[MAX_INTRAE_CONTRIBUTORS] __attribute__ ((aligned (32768))); float reqm_const [ATYPE_NUM] __attribute__ ((aligned (64))); float reqm_hbond_const [ATYPE_NUM] __attribute__ ((aligned (64))); unsigned int atom1_types_reqm_const [ATYPE_NUM] __attribute__ ((aligned (64))); unsigned int atom2_types_reqm_const [ATYPE_NUM] __attribute__ ((aligned (64))); float VWpars_AC_const [MAX_NUM_OF_ATYPES*MAX_NUM_OF_ATYPES] __attribute__ ((aligned (1024))); float VWpars_BD_const [MAX_NUM_OF_ATYPES*MAX_NUM_OF_ATYPES] __attribute__ ((aligned (1024))); float dspars_S_const [MAX_NUM_OF_ATYPES] __attribute__ ((aligned (64))); Loading
ofdock_taskpar_alt/host/inc/getparameters.h +3 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,9 @@ typedef struct float mutation_rate; float crossover_rate; float lsearch_rate; float smooth; unsigned long num_of_ls; float tournament_rate; float rho_lower_bound; Loading
ofdock_taskpar_alt/host/inc/processligand.h +9 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,15 @@ typedef struct int atom_rigid_structures [256]; char bonds [256][256]; char intraE_contributors [256][256]; // Sizes are hardcoded, ATYPE_NUM=22 float elements as in // https://git.esa.informatik.tu-darmstadt.de/docking/ocladock/blob/master/host/src/processligand.cpp#L456 // See "User Guide AutoDock 4.2" (page 34) double reqm [ATYPE_NUM]; double reqm_hbond [ATYPE_NUM]; unsigned int atom1_types_reqm [ATYPE_NUM]; unsigned int atom2_types_reqm [ATYPE_NUM]; double VWpars_A [14][14]; double VWpars_B [14][14]; double VWpars_C [14][14]; Loading