From: Egon W. <ego...@gm...> - 2013-09-27 17:57:06
|
Hi all, I am taking the observations about the CDK atom typer personal. While I never intended it to be more than a reference implementation, I never got around myself to write a better one, nor did anyone else feel obliged... But with all sorts of speed ups elsewhere, I feel obliged myself now, and the list of things suggested by John are an excellent starting point... One thing I am trying is the switch, but for the CDKAtomTypeMatcherTest I am not seeing any speed up, and probably a slightly slower performance... is the below code correct for good performance? public IAtomType findMatchingAtomType(IAtom atom) throws CDKException { IAtomType type = null; if (atom instanceof IPseudoAtom) { return factory.getAtomType("X"); } String symbol = atom.getSymbol(); switch (symbol) { case "C": type = perceiveCarbons(atomContainer, atom); break; case "O": type = perceiveOxygens(atomContainer, atom); break; case "N": type = perceiveNitrogens(atomContainer, atom); break; case "H": type = perceiveHydrogens(atomContainer, atom); break; case "S" : type = perceiveSulphurs(atomContainer, atom); break; case "P" : type = perceivePhosphors(atomContainer, atom); break; case "Br": type = perceiveBromine(atomContainer, atom); break; case "Cl": type = perceiveChlorine(atomContainer, atom); break; case "F": type = perceiveFluors(atomContainer, atom); break; case "I": type = perceiveIodine(atomContainer, atom); break; case "Li": type = perceiveLithium(atomContainer, atom); break; case "Si": type = perceiveSilicon(atomContainer, atom); break; case "B": type = perceiveBorons(atomContainer, atom); break; case "Be": type = perceiveBeryllium(atomContainer, atom); break; case "Cr": type = perceiveChromium(atomContainer, atom); break; case "Se": type = perceiveSelenium(atomContainer, atom); break; case "Mo": type = perceiveMolybdenum(atomContainer, atom); break; case "Rb": type = perceiveRubidium(atomContainer, atom); break; case "Te": type = perceiveTellurium(atomContainer, atom); break; case "Cu": type = perceiveCopper(atomContainer, atom); break; case "Ba": type = perceiveBarium(atomContainer, atom); break; case "Ga": type = perceiveGallium(atomContainer, atom); break; case "Ru": type = perceiveRuthenium(atomContainer, atom); break; case "Zn": type = perceiveZinc(atomContainer, atom); break; case "Al": type = perceiveAluminium(atomContainer, atom); break; case "Ni": type = perceiveNickel(atomContainer, atom); break; case "Gd": type = perceiveGadolinum(atomContainer, atom); break; case "Ge": type = perceiveGermanium(atomContainer, atom); break; case "Co": type = perceiveCobalt(atomContainer, atom); break; case "Sb": type = perceiveAntimony(atomContainer, atom); break; case "V": type = perceiveVanadium(atomContainer, atom); break; case "Ti": type = perceiveTitanium(atomContainer, atom); break; case "Sr": type = perceiveStrontium(atomContainer, atom); break; case "Pb": type = perceiveLead(atomContainer, atom); break; case "Tl": type = perceiveThallium(atomContainer, atom); break; case "Pt": type = perceivePlatinum(atomContainer, atom); break; case "Hg": type = perceiveMercury(atomContainer, atom); break; case "Fe": type = perceiveIron(atomContainer, atom); break; case "Ra": type = perceiveRadium(atomContainer, atom); break; case "Au": type = perceiveGold(atomContainer, atom); break; case "Ag": type = perceiveSilver(atomContainer, atom); break; case "In": type = perceiveIndium(atomContainer, atom); break; case "Pu": type = perceivePlutonium(atomContainer, atom); break; case "Th": type = perceiveThorium(atomContainer, atom); break; case "K": type = perceivePotassium(atomContainer, atom); break; case "Mn": type = perceiveManganese(atomContainer, atom); break; case "Mg": type = perceiveMagnesium(atomContainer, atom); break; case "Na": type = perceiveSodium(atomContainer, atom); break; case "As": type = perceiveArsenic(atomContainer, atom); break; case "Cd": type = perceiveCadmium(atomContainer, atom); break; case "Ca": type = perceiveCalcium(atomContainer, atom); break; case "W": type = perceiveTungstun(atomContainer, atom); break; case "Ar": type = perceiveArgon(atomContainer, atom); break; case "Xe": type = perceiveXenon(atomContainer, atom); break; case "Rn": type = perceiveRadon(atomContainer, atom); break; case "Ne": type = perceiveNeon(atomContainer, atom); break; case "Sn": type = perceiveStannum(atomContainer, atom); break; case "Po": type = perceivePolodium(atomContainer, atom); break; case "Sc": type = perceiveScandium(atomContainer, atom); break; } return type; } Looking forward to hearing ideas, Egon -- Dr E.L. Willighagen Postdoctoral Researcher Department of Bioinformatics - BiGCaT Maastricht University (http://www.bigcat.unimaas.nl/) Homepage: http://egonw.github.com/ LinkedIn: http://se.linkedin.com/in/egonw Blog: http://chem-bla-ics.blogspot.com/ PubList: http://www.citeulike.org/user/egonw/tag/papers ORCID: 0000-0001-7542-0286 |
From: John M. <joh...@gm...> - 2013-09-28 11:01:16
|
Yes, but this would require that we bump to java 7. The portable way is to use the atomic number but from your other post I guess there was some problems with it not being set. As for going to Java 7 - I'm kind of two minds on this. For libraries and app servers it's great but the Java desktop support (i.e. AWT/Swing) took some hits. Oracle has stopped patching Java 6 so maybe it would be good for CDK 1.6 and would also ease the move to Java 8. You won't see much speed up as most elements were going in the first 4 conditionals and the JIT was probably compiling that out. It is correct though not to penalise entries further down the table. > case "C": type = perceiveCarbons(atomContainer, atom); break; > case "O": type = perceiveOxygens(atomContainer, atom); break; > case "N": type = perceiveNitrogens(atomContainer, atom); break; > case "H": type = perceiveHydrogens(atomContainer, atom); break; J On 27 Sep 2013, at 18:56, Egon Willighagen <ego...@gm...> wrote: > Hi all, > > I am taking the observations about the CDK atom typer personal. While > I never intended it to be more than a reference implementation, I > never got around myself to write a better one, nor did anyone else > feel obliged... > > But with all sorts of speed ups elsewhere, I feel obliged myself now, > and the list of things suggested by John are an excellent starting > point... > > One thing I am trying is the switch, but for the > CDKAtomTypeMatcherTest I am not seeing any speed up, and probably a > slightly slower performance... is the below code correct for good > performance? > > public IAtomType findMatchingAtomType(IAtom atom) > throws CDKException { > IAtomType type = null; > if (atom instanceof IPseudoAtom) { > return factory.getAtomType("X"); > } > String symbol = atom.getSymbol(); > switch (symbol) { > case "C": type = perceiveCarbons(atomContainer, atom); break; > case "O": type = perceiveOxygens(atomContainer, atom); break; > case "N": type = perceiveNitrogens(atomContainer, atom); break; > case "H": type = perceiveHydrogens(atomContainer, atom); break; > case "S" : type = perceiveSulphurs(atomContainer, atom); break; > case "P" : type = perceivePhosphors(atomContainer, atom); break; > case "Br": type = perceiveBromine(atomContainer, atom); break; > case "Cl": type = perceiveChlorine(atomContainer, atom); break; > case "F": type = perceiveFluors(atomContainer, atom); break; > case "I": type = perceiveIodine(atomContainer, atom); break; > case "Li": type = perceiveLithium(atomContainer, atom); break; > case "Si": type = perceiveSilicon(atomContainer, atom); break; > case "B": type = perceiveBorons(atomContainer, atom); break; > case "Be": type = perceiveBeryllium(atomContainer, atom); break; > case "Cr": type = perceiveChromium(atomContainer, atom); break; > case "Se": type = perceiveSelenium(atomContainer, atom); break; > case "Mo": type = perceiveMolybdenum(atomContainer, atom); break; > case "Rb": type = perceiveRubidium(atomContainer, atom); break; > case "Te": type = perceiveTellurium(atomContainer, atom); break; > case "Cu": type = perceiveCopper(atomContainer, atom); break; > case "Ba": type = perceiveBarium(atomContainer, atom); break; > case "Ga": type = perceiveGallium(atomContainer, atom); break; > case "Ru": type = perceiveRuthenium(atomContainer, atom); break; > case "Zn": type = perceiveZinc(atomContainer, atom); break; > case "Al": type = perceiveAluminium(atomContainer, atom); break; > case "Ni": type = perceiveNickel(atomContainer, atom); break; > case "Gd": type = perceiveGadolinum(atomContainer, atom); break; > case "Ge": type = perceiveGermanium(atomContainer, atom); break; > case "Co": type = perceiveCobalt(atomContainer, atom); break; > case "Sb": type = perceiveAntimony(atomContainer, atom); break; > case "V": type = perceiveVanadium(atomContainer, atom); break; > case "Ti": type = perceiveTitanium(atomContainer, atom); break; > case "Sr": type = perceiveStrontium(atomContainer, atom); break; > case "Pb": type = perceiveLead(atomContainer, atom); break; > case "Tl": type = perceiveThallium(atomContainer, atom); break; > case "Pt": type = perceivePlatinum(atomContainer, atom); break; > case "Hg": type = perceiveMercury(atomContainer, atom); break; > case "Fe": type = perceiveIron(atomContainer, atom); break; > case "Ra": type = perceiveRadium(atomContainer, atom); break; > case "Au": type = perceiveGold(atomContainer, atom); break; > case "Ag": type = perceiveSilver(atomContainer, atom); break; > case "In": type = perceiveIndium(atomContainer, atom); break; > case "Pu": type = perceivePlutonium(atomContainer, atom); break; > case "Th": type = perceiveThorium(atomContainer, atom); break; > case "K": type = perceivePotassium(atomContainer, atom); break; > case "Mn": type = perceiveManganese(atomContainer, atom); break; > case "Mg": type = perceiveMagnesium(atomContainer, atom); break; > case "Na": type = perceiveSodium(atomContainer, atom); break; > case "As": type = perceiveArsenic(atomContainer, atom); break; > case "Cd": type = perceiveCadmium(atomContainer, atom); break; > case "Ca": type = perceiveCalcium(atomContainer, atom); break; > case "W": type = perceiveTungstun(atomContainer, atom); break; > case "Ar": type = perceiveArgon(atomContainer, atom); break; > case "Xe": type = perceiveXenon(atomContainer, atom); break; > case "Rn": type = perceiveRadon(atomContainer, atom); break; > case "Ne": type = perceiveNeon(atomContainer, atom); break; > case "Sn": type = perceiveStannum(atomContainer, atom); break; > case "Po": type = perceivePolodium(atomContainer, atom); break; > case "Sc": type = perceiveScandium(atomContainer, atom); break; > } > return type; > } > > Looking forward to hearing ideas, > > Egon > > > -- > Dr E.L. Willighagen > Postdoctoral Researcher > Department of Bioinformatics - BiGCaT > Maastricht University (http://www.bigcat.unimaas.nl/) > Homepage: http://egonw.github.com/ > LinkedIn: http://se.linkedin.com/in/egonw > Blog: http://chem-bla-ics.blogspot.com/ > PubList: http://www.citeulike.org/user/egonw/tag/papers > ORCID: 0000-0001-7542-0286 > > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk > _______________________________________________ > Cdk-devel mailing list > Cdk...@li... > https://lists.sourceforge.net/lists/listinfo/cdk-devel |
From: Egon W. <ego...@gm...> - 2013-09-28 12:31:46
|
On Sat, Sep 28, 2013 at 1:01 PM, John May <joh...@gm...> wrote: > You won't see much speed up as most elements were going in the first 4 conditionals and the JIT was probably compiling that out. It is correct though not to penalise entries further down the table. OK, unless someone comes up with something that really improves speed (caching doesn't do it for the kind of molecules we're typically using...)... So, meanwhile I'll won't change anything, and focus on adding those missing Sybyl atom types... (that is, on the train to Mainz tomorrow morning...) That patch with the method name fix I still like to see applied. Grtz, Egon -- Dr E.L. Willighagen Postdoctoral Researcher Department of Bioinformatics - BiGCaT Maastricht University (http://www.bigcat.unimaas.nl/) Homepage: http://egonw.github.com/ LinkedIn: http://se.linkedin.com/in/egonw Blog: http://chem-bla-ics.blogspot.com/ PubList: http://www.citeulike.org/user/egonw/tag/papers ORCID: 0000-0001-7542-0286 |