Skip to content

Commit 7e81ddc

Browse files
committed
Merge branch 'release/6.0.1'
2 parents f1e8126 + f844bbc commit 7e81ddc

13 files changed

Lines changed: 419 additions & 16 deletions

Makefile

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ ARCHFLAG += -gencode arch=compute_$(HIGHEST_SM),code=compute_$(HIGHEST_SM)
2828
endif
2929
endif
3030

31-
main: build/main.o cfits build/MSFITSIO.o build/functions.o build/directioncosines.o build/copyrightwarranty.o build/rngs.o build/rvgs.o build/f1dim.o build/mnbrak.o build/brent.o build/linmin.o build/frprmn.o build/synthesizer.o build/imageProcessor.o build/chi2.o build/laplacian.o build/gridding.o build/entropy.o build/ioms.o build/totalvariation.o build/quadraticpenalization.o build/error.o
31+
main: build/main.o cfits build/MSFITSIO.o build/functions.o build/directioncosines.o build/copyrightwarranty.o build/rngs.o build/rvgs.o build/f1dim.o build/mnbrak.o build/brent.o build/linmin.o build/frprmn.o build/synthesizer.o build/imageProcessor.o build/chi2.o build/laplacian.o build/gridding.o build/entropy.o build/ioms.o build/totalvariation.o build/quadraticpenalization.o build/error.o build/lbfgs.o
3232
@ echo "Linking CUDAMEM"
3333
@ mkdir -p bin
3434
@ nvcc build/*.o -o bin/gpuvmem $(LDFLAGS) $(CFFLAG) $(FOPENFLAG) $(CUFFTFLAG) $(ARCHFLAG) $(CCFLAG)
@@ -134,6 +134,10 @@ build/frprmn.o: src/frprmn.cu
134134
@ echo "Building frprmn"
135135
@ nvcc $(CFLAGS) $(INC_DIRS) src/frprmn.cu -o build/frprmn.o $(LDFLAGS) $(CFFLAG) $(ARCHFLAG)
136136

137+
build/lbfgs.o: src/lbfgs.cu
138+
@ echo "Building lbfgs"
139+
@ nvcc $(CFLAGS) $(INC_DIRS) src/lbfgs.cu -o build/lbfgs.o $(LDFLAGS) $(CFFLAG) $(ARCHFLAG)
140+
137141
cfits:
138142
@ mkdir -p lib
139143
@ cd cfitsio; make; cp libcfitsio.a ../lib/.
@@ -143,6 +147,7 @@ cleanall:
143147
@ rm -rf build/*
144148
@ rm -rf bin/*
145149
@ rm -f lib/*.a
150+
@ rm -r *.fits
146151
@ cd cfitsio; make clean
147152
@ cd cfitsio; make distclean
148153

@@ -156,7 +161,7 @@ conf:
156161
@ ./configure
157162

158163
co65:
159-
@ ./bin/gpuvmem -i ./tests/co65/co65.ms -o ./tests/co65/co65_out.ms -O ./tests/co65/mod_out.fits -m ./tests/co65/mod_in_0.fits -I ./tests/co65/input.dat -p ./tests/co65/mem/ -X 16 -Y 16 -V 256 -z 0.001 -Z 0.01,0.5 -t 500000000 --verbose --print-images --print-errors
164+
@ ./bin/gpuvmem -i ./tests/co65/co65.ms -o ./tests/co65/co65_out.ms -O ./tests/co65/mod_out.fits -m ./tests/co65/mod_in_0.fits -I ./tests/co65/input.dat -p ./tests/co65/mem/ -X 16 -Y 16 -V 256 -z 0.001 -Z 0.01,0.05 -t 500000000 --verbose --print-images --print-errors
160165
selfcalband9:
161166
@ cuda-memcheck ./bin/gpuvmem -i ./tests/selfcalband9/hd142_b9cont_self_tav.ms -o ./tests/selfcalband9/hd142_b9cont_out.ms -O ./tests/selfcalband9/mod_out.fits -m ./tests/selfcalband9/mod_in_0.fits -I ./tests/selfcalband9/input.dat -p ./tests/selfcalband9/mem/ -X 8 -Y 8 -V 256 --verbose -z 0.001 -Z 0.05,0.5 -t 500000000 --print-images
162167
freq78:

include/framework.cuh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,9 @@ void setDS(float *DS){
119119
cudaFree(device_DS); this->device_DS = DS;
120120
};
121121
virtual float calculateSecondDerivate() = 0;
122+
float getPenalizationFactor(){
123+
return this->penalization_factor;
124+
}
122125
protected:
123126
float *device_S;
124127
float *device_DS;
@@ -258,7 +261,8 @@ public:
258261
ObjectiveFunction(){
259262
};
260263
void addFi(Fi *fi){
261-
fis.push_back(fi);
264+
if(fi->getPenalizationFactor())
265+
fis.push_back(fi);
262266
};
263267
//virtual void print() = 0;
264268
float calcFunction(float *p)

include/functions.cuh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,5 +107,12 @@ __global__ void newPNoPositivity(float *p, float *xi, float xmin, long N, long M
107107
__global__ void evaluateXtNoPositivity(float *xt, float *pcom, float *xicom, float x, long N, long M, int image);
108108
__global__ void chainRule2I(float *chain, float *noise, float *I, float nu, float nu_0, float noise_cut, float fg_scale, long N, long M);
109109
__global__ void DChi2_2I(float *noise, float *chain, float *dchi2, float *dchi2_total, float threshold, int image, long N, long M);
110+
__global__ void calculateSandY (float *d_y, float *d_s, float *p, float *xi, float *p_old, float *xi_old, int iter, int M, int N, int image);
111+
__global__ void getR (float *d_r, float *d_q, float scalar, int M, int N, int image);
112+
__global__ void updateQ (float *d_q, float alpha, float *d_y, int k, int M, int N, int image);
113+
__global__ void getDot_LBFGS_ff(float *aux_vector, float *vec_1, float *vec_2, int k, int h, int M, int N, int image);
114+
__global__ void searchDirection_LBFGS(float *xi, long N, long M, int image);
115+
116+
110117

111118
#endif

include/lbfgs.cuh

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#ifndef LBFGS_CUH
2+
#define LBFGS_CUH
3+
#include "linmin.cuh"
4+
5+
class LBFGS : public Optimizator
6+
{
7+
public:
8+
__host__ void allocateMemoryGpu();
9+
__host__ void deallocateMemoryGpu();
10+
__host__ void minimizate();
11+
__host__ void LBFGS_recursion(float *d_y, float *d_s, float *xi, int par_M, int lbfgs_it, int M, int N);
12+
private:
13+
float ftol = 0;
14+
float fret = 0;
15+
float gg, dgg, gam, fp;
16+
float *device_g, *device_h;
17+
float *device_gg_vector, *device_dgg_vector;
18+
int configured = 1;
19+
float *d_s;
20+
float *d_y, *xi, *xi_old, *norm_vector, *d_r;
21+
float norm;
22+
float *p_old;
23+
int K = 200;
24+
};
25+
26+
#endif

src/chi2.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ void Chi2::configure(int penalizatorIndex, int imageIndex, int imageToAdd)
2323

2424
if(penalizatorIndex != -1)
2525
{
26-
if(penalizatorIndex > (nPenalizators - 1))
26+
if(penalizatorIndex > (nPenalizators - 1) || penalizatorIndex < 0)
2727
{
2828
printf("invalid index for penalizator (chi2)\n");
2929
exit(-1);

src/entropy.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void Entropy::configure(int penalizatorIndex, int imageIndex, int imageToAdd)
4545

4646
if(penalizatorIndex != -1)
4747
{
48-
if(penalizatorIndex > (nPenalizators - 1))
48+
if(penalizatorIndex > (nPenalizators - 1) || penalizatorIndex < 0)
4949
{
5050
printf("invalid index for penalizator (entropy)\n");
5151
exit(-1);

src/functions.cu

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,6 +1521,48 @@ __global__ void searchDirection(float *g, float *xi, float *h, long N)
15211521
xi[N*i+j] = h[N*i+j] = g[N*i+j];
15221522
}
15231523

1524+
__global__ void searchDirection_LBFGS(float *xi, long N, long M, int image)
1525+
{
1526+
int j = threadIdx.x + blockDim.x * blockIdx.x;
1527+
int i = threadIdx.y + blockDim.y * blockIdx.y;
1528+
1529+
xi[M*N*image+N*i+j] *= -1.0f;
1530+
}
1531+
1532+
__global__ void getDot_LBFGS_ff(float *aux_vector, float *vec_1, float *vec_2, int k, int h, int M, int N, int image)
1533+
{
1534+
int j = threadIdx.x + blockDim.x * blockIdx.x;
1535+
int i = threadIdx.y + blockDim.y * blockIdx.y;
1536+
1537+
aux_vector[N*i+j] = vec_1[M*N*image*k + M*N*image + (N*i+j)]*vec_2[M*N*image*h + M*N*image + (N*i+j)];
1538+
}
1539+
1540+
__global__ void updateQ (float *d_q, float alpha, float *d_y, int k, int M, int N, int image)
1541+
{
1542+
int j = threadIdx.x + blockDim.x * blockIdx.x;
1543+
int i = threadIdx.y + blockDim.y * blockIdx.y;
1544+
1545+
d_q[M*N*image+N*i+j] += alpha *d_y[M*N*image + M*N*k + (N*i+j)];
1546+
}
1547+
1548+
__global__ void getR (float *d_r, float *d_q, float scalar, int M, int N, int image)
1549+
{
1550+
int j = threadIdx.x + blockDim.x * blockIdx.x;
1551+
int i = threadIdx.y + blockDim.y * blockIdx.y;
1552+
1553+
d_r[M*N*image+N*i+j] = d_q[M*N*image+N*i+j] * scalar;
1554+
}
1555+
1556+
__global__ void calculateSandY (float *d_y, float *d_s, float *p, float *xi, float *p_old, float *xi_old, int iter, int M, int N, int image)
1557+
{
1558+
int j = threadIdx.x + blockDim.x * blockIdx.x;
1559+
int i = threadIdx.y + blockDim.y * blockIdx.y;
1560+
1561+
d_y[M*N*image*iter + M*N*image + (N*i+j)] = xi[M*N*image+N*i+j] - (-1.0f*xi_old[M*N*image+N*i+j]);
1562+
d_s[M*N*image*iter + M*N*image + (N*i+j)] = p[M*N*image+N*i+j] - p_old[M*N*image+N*i+j];
1563+
1564+
}
1565+
15241566
__global__ void searchDirection(float* g, float* xi, float* h, long N, long M, int image)
15251567
{
15261568
int j = threadIdx.x + blockDim.x * blockIdx.x;

src/laplacian.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void Laplacian::configure(int penalizatorIndex, int imageIndex, int imageToAdd)
4545

4646
if(penalizatorIndex != -1)
4747
{
48-
if(penalizatorIndex > (nPenalizators - 1))
48+
if(penalizatorIndex > (nPenalizators - 1) || penalizatorIndex < 0)
4949
{
5050
printf("invalid index for penalizator (laplacian)\n");
5151
exit(-1);

0 commit comments

Comments
 (0)