column.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import * as B from 'benchmark';
  2. import { Column as C } from '../mol-data/db';
  3. export namespace Column {
  4. function createData(n: number) {
  5. const ret = new Float32Array(n);
  6. for (let i = 0; i < n; i++) {
  7. ret[i] = i * i + 1;
  8. }
  9. return ret;
  10. }
  11. function raw(xs: ArrayLike<number>) {
  12. let sum = 0;
  13. for (let i = 0, _i = xs.length; i < _i; i++) {
  14. sum += xs[i];
  15. }
  16. return sum;
  17. }
  18. function column(col: C<number>) {
  19. let sum = 0;
  20. for (let i = 0, _i = col.rowCount; i < _i; i++) {
  21. sum += col.value(i);
  22. }
  23. return sum;
  24. }
  25. function column1(col: C<number>) {
  26. let sum = 0;
  27. for (let i = 0, _i = col.rowCount; i < _i; i++) {
  28. sum += col.value(i);
  29. }
  30. return sum;
  31. }
  32. function val(i: number) { return i * i + 1; }
  33. export function runMono() {
  34. const suite = new B.Suite();
  35. const data = createData(1000);
  36. const nativeData = [...data as any];
  37. const col = C.ofArray({ array: data, schema: C.Schema.float });
  38. const lambda = C.ofLambda({ value: val, rowCount: data.length, schema: C.Schema.float });
  39. const cnst = C.ofConst(10, data.length, C.Schema.float);
  40. suite
  41. .add('raw', () => raw(data))
  42. .add('native raw', () => raw(nativeData))
  43. .add('arraycol', () => column(col))
  44. .add('arraycol1', () => column(col))
  45. .add('const', () => column1(cnst))
  46. .add('arraycol2', () => column(col))
  47. .add('lambda', () => column1(lambda))
  48. .on('cycle', (e: any) => console.log(String(e.target)))
  49. .run();
  50. }
  51. export function runPoly() {
  52. const suite = new B.Suite();
  53. const data = createData(10000);
  54. const nativeData = [...data as any];
  55. const col = C.ofArray({ array: data, schema: C.Schema.float });
  56. const lambda = C.ofLambda({ value: val, rowCount: data.length, schema: C.Schema.float });
  57. const cnst = C.ofConst(10, data.length, C.Schema.float);
  58. suite
  59. .add('raw', () => raw(data))
  60. .add('native raw', () => raw(nativeData))
  61. .add('arraycol', () => column(col))
  62. .add('const', () => column(cnst))
  63. .add('arraycol2', () => column(col))
  64. .add('lambda', () => column(lambda))
  65. .on('cycle', (e: any) => console.log(String(e.target)))
  66. .run();
  67. }
  68. }
  69. Column.runMono();
  70. Column.runPoly();