Skip to content
Snippets Groups Projects
Commit 86291a97 authored by Alexander Rose's avatar Alexander Rose
Browse files

optimized gaussian density cpu more

parent 8547f83f
No related branches found
No related tags found
No related merge requests found
...@@ -46,6 +46,8 @@ export async function GaussianDensityCPU(ctx: RuntimeContext, position: Position ...@@ -46,6 +46,8 @@ export async function GaussianDensityCPU(ctx: RuntimeContext, position: Position
const idData = space.create() const idData = space.create()
const idField = Tensor.create(space, idData) const idField = Tensor.create(space, idData)
const iu = dim[2], iv = dim[1], iuv = iu * iv
const densData = space.create() const densData = space.create()
const v = Vec3() const v = Vec3()
...@@ -67,11 +69,7 @@ export async function GaussianDensityCPU(ctx: RuntimeContext, position: Position ...@@ -67,11 +69,7 @@ export async function GaussianDensityCPU(ctx: RuntimeContext, position: Position
const invDelta = Vec3.inverse(Vec3(), delta) const invDelta = Vec3.inverse(Vec3(), delta)
const [ invDeltaX, invDeltaY, invDeltaZ ] = invDelta const [ invDeltaX, invDeltaY, invDeltaZ ] = invDelta
let dx: number, dy: number, dz: number console.time('gaussian density cpu')
let dxySq: number
let dSq: number
// console.time('gaussian density cpu')
for (let i = 0; i < n; ++i) { for (let i = 0; i < n; ++i) {
const j = OrderedSet.getAt(indices, i) const j = OrderedSet.getAt(indices, i)
...@@ -94,19 +92,22 @@ export async function GaussianDensityCPU(ctx: RuntimeContext, position: Position ...@@ -94,19 +92,22 @@ export async function GaussianDensityCPU(ctx: RuntimeContext, position: Position
const [ endX, endY, endZ ] = Vec3.ceil(end, Vec3.add(end, c, rad2)) const [ endX, endY, endZ ] = Vec3.ceil(end, Vec3.add(end, c, rad2))
for (let xi = begX; xi < endX; ++xi) { for (let xi = begX; xi < endX; ++xi) {
dx = xi * invDeltaX - vx const dx = xi * invDeltaX - vx
const xIdx = xi * iuv
for (let yi = begY; yi < endY; ++yi) { for (let yi = begY; yi < endY; ++yi) {
dy = yi * invDeltaY - vy const dy = yi * invDeltaY - vy
dxySq = dx * dx + dy * dy const dxySq = dx * dx + dy * dy
const xyIdx = yi * iu + xIdx
for (let zi = begZ; zi < endZ; ++zi) { for (let zi = begZ; zi < endZ; ++zi) {
dz = zi * invDeltaZ - vz const dz = zi * invDeltaZ - vz
dSq = dxySq + dz * dz const dSq = dxySq + dz * dz
if (dSq <= r2sq) { if (dSq <= r2sq) {
const dens = Math.exp(-alpha * (dSq * rSqInv)) const dens = Math.exp(-alpha * (dSq * rSqInv))
space.add(data, xi, yi, zi, dens) const idx = zi + xyIdx
if (dens > space.get(densData, xi, yi, zi)) { data[idx] += dens
space.set(densData, xi, yi, zi, dens) if (dens > densData[idx]) {
space.set(idData, xi, yi, zi, i) densData[idx] = dens
idData[idx] = i
} }
} }
} }
...@@ -117,7 +118,7 @@ export async function GaussianDensityCPU(ctx: RuntimeContext, position: Position ...@@ -117,7 +118,7 @@ export async function GaussianDensityCPU(ctx: RuntimeContext, position: Position
await ctx.update({ message: 'filling density grid', current: i, max: n }) await ctx.update({ message: 'filling density grid', current: i, max: n })
} }
} }
// console.timeEnd('gaussian density cpu') console.timeEnd('gaussian density cpu')
const transform = Mat4.identity() const transform = Mat4.identity()
Mat4.fromScaling(transform, Vec3.inverse(Vec3.zero(), delta)) Mat4.fromScaling(transform, Vec3.inverse(Vec3.zero(), delta))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment