Unverified Commit 16aed09c authored by Lucas Hosseini's avatar Lucas Hosseini Committed by GitHub

Make tutorial examples use dynamic linkage. (#343)

* Add shared lib target for GPU version.

* Dynamically link tutorial examples.

* Add shared lib to clean target in GPU Makefile.

* Add clean target to tutorial examples Makefile.

* Minor modifications to tutorial GPU examples.
parent 97eba202
...@@ -85,6 +85,10 @@ CUOBJ= impl/BroadcastSum.o \ ...@@ -85,6 +85,10 @@ CUOBJ= impl/BroadcastSum.o \
$(LIBNAME).a: $(CPPOBJ) $(CUOBJ) $(LIBNAME).a: $(CPPOBJ) $(CUOBJ)
ar r $@ $^ ar r $@ $^
$(LIBNAME).$(SHAREDEXT): $(CPPOBJ) $(CUOBJ)
$(CC) -L$(CUDAROOT)/lib64 -lcublas -lcudart $(LDFLAGS) \
$(FAISSSHAREDFLAGS) -o $(LIBNAME).$(SHAREDEXT) $^
test/demo_ivfpq_indexing_gpu: test/demo_ivfpq_indexing_gpu.cpp \ test/demo_ivfpq_indexing_gpu: test/demo_ivfpq_indexing_gpu.cpp \
$(LIBNAME).a ../libfaiss.a $(LIBNAME).a ../libfaiss.a
...@@ -115,6 +119,7 @@ test/demo_ivfpq_indexing_gpu: test/demo_ivfpq_indexing_gpu.cpp \ ...@@ -115,6 +119,7 @@ test/demo_ivfpq_indexing_gpu: test/demo_ivfpq_indexing_gpu.cpp \
clean: clean:
rm -rf *.o impl/*.o utils/*.o test/*.o $(LIBNAME).a \ rm -rf *.o impl/*.o utils/*.o test/*.o $(LIBNAME).a \
$(LIBNAME).$(SHAREDEXT) \
../python/*swigfaiss_gpu* ../*swigfaiss_gpu* ../python/*swigfaiss_gpu* ../*swigfaiss_gpu*
......
...@@ -36,8 +36,6 @@ int main() { ...@@ -36,8 +36,6 @@ int main() {
xq[d * i] += i / 1000.; xq[d * i] += i / 1000.;
} }
int k = 4;
faiss::gpu::StandardGpuResources res; faiss::gpu::StandardGpuResources res;
// Using a flat index // Using a flat index
...@@ -48,6 +46,8 @@ int main() { ...@@ -48,6 +46,8 @@ int main() {
index_flat.add(nb, xb); // add vectors to the index index_flat.add(nb, xb); // add vectors to the index
printf("ntotal = %ld\n", index_flat.ntotal); printf("ntotal = %ld\n", index_flat.ntotal);
int k = 4;
{ // search xq { // search xq
long *I = new long[k * nq]; long *I = new long[k * nq];
float *D = new float[k * nq]; float *D = new float[k * nq];
......
...@@ -38,6 +38,8 @@ int main() { ...@@ -38,6 +38,8 @@ int main() {
int ngpus = faiss::gpu::getNumDevices(); int ngpus = faiss::gpu::getNumDevices();
printf("Number of GPUs: %d\n", ngpus);
std::vector<faiss::gpu::GpuResources*> res; std::vector<faiss::gpu::GpuResources*> res;
std::vector<int> devs; std::vector<int> devs;
for(int i = 0; i < ngpus; i++) { for(int i = 0; i < ngpus; i++) {
...@@ -55,7 +57,7 @@ int main() { ...@@ -55,7 +57,7 @@ int main() {
); );
printf("is_trained = %s\n", gpu_index->is_trained ? "true" : "false"); printf("is_trained = %s\n", gpu_index->is_trained ? "true" : "false");
gpu_index->add(nb, xb); // vectors to the index gpu_index->add(nb, xb); // add vectors to the index
printf("ntotal = %ld\n", gpu_index->ntotal); printf("ntotal = %ld\n", gpu_index->ntotal);
int k = 4; int k = 4;
......
...@@ -2,25 +2,38 @@ MAKEFILE_INC=../../makefile.inc ...@@ -2,25 +2,38 @@ MAKEFILE_INC=../../makefile.inc
-include $(MAKEFILE_INC) -include $(MAKEFILE_INC)
NVCCLDFLAGS = -Xcompiler \"-Wl,-rpath=../../:../../gpu/\" \
-L../.. -L../../gpu -lfaiss -lgpufaiss
LDFLAGS = -L../.. -Wl,-rpath=../.. -lfaiss
all: cpu gpu all: cpu gpu
cpu: 1-Flat 2-IVFFlat 3-IVFPQ cpu: 1-Flat 2-IVFFlat 3-IVFPQ
gpu: 4-GPU 5-Multiple-GPUs gpu: 4-GPU 5-Multiple-GPUs
1-Flat: 1-Flat.cpp ../../libfaiss.a 1-Flat: 1-Flat.cpp ../../libfaiss.$(SHAREDEXT)
$(CC) -o $@ $(CFLAGS) $^ -I../../../ $(LDFLAGS) $(BLASLDFLAGS) $(CC) -o $@ $(CFLAGS) $< -I../../../ $(LDFLAGS)
2-IVFFlat: 2-IVFFlat.cpp ../../libfaiss.$(SHAREDEXT)
$(CC) -o $@ $(CFLAGS) $< -I../../../ $(LDFLAGS)
3-IVFPQ: 3-IVFPQ.cpp ../../libfaiss.$(SHAREDEXT)
$(CC) -o $@ $(CFLAGS) $< -I../../../ $(LDFLAGS)
4-GPU: 4-GPU.cpp ../../libfaiss.$(SHAREDEXT) ../../gpu/libgpufaiss.$(SHAREDEXT)
$(NVCC) $(NVCCFLAGS) -o $@ $< $(NVCCLDFLAGS) -I../../../
2-IVFFlat: 2-IVFFlat.cpp ../../libfaiss.a 5-Multiple-GPUs: 5-Multiple-GPUs.cpp ../../libfaiss.$(SHAREDEXT) \
$(CC) -o $@ $(CFLAGS) $^ -I../../../ $(LDFLAGS) $(BLASLDFLAGS) ../../gpu/libgpufaiss.$(SHAREDEXT)
$(NVCC) $(NVCCFLAGS) -o $@ $< $(NVCCLDFLAGS) -I../../../
3-IVFPQ: 3-IVFPQ.cpp ../../libfaiss.a ../../libfaiss.$(SHAREDEXT):
$(CC) -o $@ $(CFLAGS) $^ -I../../../ $(LDFLAGS) $(BLASLDFLAGS) cd ../../ && make libfaiss.$(SHAREDEXT)
4-GPU: 4-GPU.cpp ../../libfaiss.a ../../gpu/libgpufaiss.a ../../gpu/libgpufaiss.$(SHAREDEXT):
$(NVCC) $(NVCCFLAGS) -o $@ $^ -I../../../ -Xcompiler -fopenmp -lcublas \ cd ../../gpu/ && make libgpufaiss.$(SHAREDEXT)
$(BLASLDFLAGSNVCC)
5-Multiple-GPUs: 5-Multiple-GPUs.cpp ../../libfaiss.a ../../gpu/libgpufaiss.a clean:
$(NVCC) $(NVCCFLAGS) -o $@ $^ -I../../../ -Xcompiler -fopenmp -lcublas \ rm -f 1-Flat 2-IVFFlat 3-IVFPQ 4-GPU 5-Multiple-GPUs
$(BLASLDFLAGSNVCC)
...@@ -17,8 +17,6 @@ xq[:, 0] += np.arange(nq) / 1000. ...@@ -17,8 +17,6 @@ xq[:, 0] += np.arange(nq) / 1000.
import faiss # make faiss available import faiss # make faiss available
print("number of GPUs:", faiss.get_num_gpus())
res = faiss.StandardGpuResources() # use a single GPU res = faiss.StandardGpuResources() # use a single GPU
## Using a flat index ## Using a flat index
......
...@@ -21,14 +21,16 @@ ngpus = faiss.get_num_gpus() ...@@ -21,14 +21,16 @@ ngpus = faiss.get_num_gpus()
print("number of GPUs:", ngpus) print("number of GPUs:", ngpus)
index = faiss.index_cpu_to_all_gpus( # build the index cpu_index = faiss.IndexFlatL2(d)
faiss.IndexFlatL2(d)
gpu_index = faiss.index_cpu_to_all_gpus( # build the index
cpu_index
) )
index.add(xb) # add vectors to the index gpu_index.add(xb) # add vectors to the index
print(index.ntotal) print(gpu_index.ntotal)
k = 4 # we want to see 4 nearest neighbors k = 4 # we want to see 4 nearest neighbors
D, I = index.search(xq, k) # actual search D, I = gpu_index.search(xq, k) # actual search
print(I[:5]) # neighbors of the 5 first queries print(I[:5]) # neighbors of the 5 first queries
print(I[-5:]) # neighbors of the 5 last queries print(I[-5:]) # neighbors of the 5 last queries
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment